KVM: x86: Return error on cmpxchg16b emulation
cmpxchg16b is currently unimplemented in the emulator. The least we can do is return error upon the emulation of this instruction. Signed-off-by: Nadav Amit <namit@cs.technion.ac.il> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
67f4d4288c
commit
aaa05f2437
1 changed files with 4 additions and 1 deletions
|
@ -1999,6 +1999,9 @@ static int em_cmpxchg8b(struct x86_emulate_ctxt *ctxt)
|
||||||
{
|
{
|
||||||
u64 old = ctxt->dst.orig_val64;
|
u64 old = ctxt->dst.orig_val64;
|
||||||
|
|
||||||
|
if (ctxt->dst.bytes == 16)
|
||||||
|
return X86EMUL_UNHANDLEABLE;
|
||||||
|
|
||||||
if (((u32) (old >> 0) != (u32) reg_read(ctxt, VCPU_REGS_RAX)) ||
|
if (((u32) (old >> 0) != (u32) reg_read(ctxt, VCPU_REGS_RAX)) ||
|
||||||
((u32) (old >> 32) != (u32) reg_read(ctxt, VCPU_REGS_RDX))) {
|
((u32) (old >> 32) != (u32) reg_read(ctxt, VCPU_REGS_RDX))) {
|
||||||
*reg_write(ctxt, VCPU_REGS_RAX) = (u32) (old >> 0);
|
*reg_write(ctxt, VCPU_REGS_RAX) = (u32) (old >> 0);
|
||||||
|
@ -4077,7 +4080,7 @@ static int decode_operand(struct x86_emulate_ctxt *ctxt, struct operand *op,
|
||||||
op->orig_val = op->val;
|
op->orig_val = op->val;
|
||||||
break;
|
break;
|
||||||
case OpMem64:
|
case OpMem64:
|
||||||
ctxt->memop.bytes = 8;
|
ctxt->memop.bytes = (ctxt->op_bytes == 8) ? 16 : 8;
|
||||||
goto mem_common;
|
goto mem_common;
|
||||||
case OpAcc:
|
case OpAcc:
|
||||||
op->type = OP_REG;
|
op->type = OP_REG;
|
||||||
|
|
Loading…
Reference in a new issue