|
@@ -2579,6 +2579,16 @@ static int em_invlpg(struct x86_emulate_ctxt *ctxt)
|
|
|
return X86EMUL_CONTINUE;
|
|
|
}
|
|
|
|
|
|
+static int em_clts(struct x86_emulate_ctxt *ctxt)
|
|
|
+{
|
|
|
+ ulong cr0;
|
|
|
+
|
|
|
+ cr0 = ctxt->ops->get_cr(ctxt, 0);
|
|
|
+ cr0 &= ~X86_CR0_TS;
|
|
|
+ ctxt->ops->set_cr(ctxt, 0, cr0);
|
|
|
+ return X86EMUL_CONTINUE;
|
|
|
+}
|
|
|
+
|
|
|
static bool valid_cr(int nr)
|
|
|
{
|
|
|
switch (nr) {
|
|
@@ -4079,7 +4089,7 @@ twobyte_insn:
|
|
|
rc = emulate_syscall(ctxt, ops);
|
|
|
break;
|
|
|
case 0x06:
|
|
|
- emulate_clts(ctxt->vcpu);
|
|
|
+ rc = em_clts(ctxt);
|
|
|
break;
|
|
|
case 0x09: /* wbinvd */
|
|
|
kvm_emulate_wbinvd(ctxt->vcpu);
|