mirror of https://gitee.com/openkylin/linux.git
KVM: x86 emulator: emulate clflush
If the guest issues a clflush in a mmio address, the instruction can trap into the hypervisor. Currently, we do not decode clflush properly, causing the guest to hang. This patch fixes this emulating clflush (opcode 0f ae). Signed-off-by: Glauber Costa <gcosta@redhat.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
This commit is contained in:
parent
376c53c2b3
commit
2a7c5b8b55
|
@ -219,7 +219,7 @@ static u16 twobyte_table[256] = {
|
|||
/* 0xA0 - 0xA7 */
|
||||
0, 0, 0, DstMem | SrcReg | ModRM | BitOp, 0, 0, 0, 0,
|
||||
/* 0xA8 - 0xAF */
|
||||
0, 0, 0, DstMem | SrcReg | ModRM | BitOp, 0, 0, 0, 0,
|
||||
0, 0, 0, DstMem | SrcReg | ModRM | BitOp, 0, 0, ModRM, 0,
|
||||
/* 0xB0 - 0xB7 */
|
||||
ByteOp | DstMem | SrcReg | ModRM, DstMem | SrcReg | ModRM, 0,
|
||||
DstMem | SrcReg | ModRM | BitOp,
|
||||
|
@ -1947,6 +1947,8 @@ x86_emulate_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
|
|||
c->src.val &= (c->dst.bytes << 3) - 1;
|
||||
emulate_2op_SrcV_nobyte("bts", c->src, c->dst, ctxt->eflags);
|
||||
break;
|
||||
case 0xae: /* clflush */
|
||||
break;
|
||||
case 0xb0 ... 0xb1: /* cmpxchg */
|
||||
/*
|
||||
* Save real source value, then compare EAX against
|
||||
|
|
Loading…
Reference in New Issue