[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.4-testing] x86_emulate: Emulate CLFLUSH instruction
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1271355695 -3600 # Node ID 8724be7ad3858c680910adf07d80639c59c9aeaf # Parent aaa44801de3668c4cad3c0f7180532daf91288e5 x86_emulate: Emulate CLFLUSH instruction We recently found that FreeBSD 8.0 guest failed to install and boot on Xen. The reason was that FreeBSD detected clflush feature and invoked this instruction to flush MMIO space. This caused a page fault; but x86_emulate.c failed to emulate this instruction (not supported). As a result, a page fault was detected inside FreeBSD. A similar issue was reported earlier. http://lists.xensource.com/archives/html/xen-devel/2010-03/msg00362.html From: Wei Huang <wei.huang2@xxxxxxx> Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> xen-unstable changeset: 21189:d18e6a6c618a xen-unstable date: Thu Apr 15 18:47:58 2010 +0100 --- xen/arch/x86/x86_emulate/x86_emulate.c | 16 +++++++++++++++- 1 files changed, 15 insertions(+), 1 deletion(-) diff -r aaa44801de36 -r 8724be7ad385 xen/arch/x86/x86_emulate/x86_emulate.c --- a/xen/arch/x86/x86_emulate/x86_emulate.c Thu Apr 15 19:21:13 2010 +0100 +++ b/xen/arch/x86/x86_emulate/x86_emulate.c Thu Apr 15 19:21:35 2010 +0100 @@ -226,7 +226,8 @@ static uint8_t twobyte_table[256] = { DstMem|SrcReg|ModRM, DstMem|SrcReg|ModRM, 0, 0, /* 0xA8 - 0xAF */ ImplicitOps, ImplicitOps, 0, DstBitBase|SrcReg|ModRM, - DstMem|SrcReg|ModRM, DstMem|SrcReg|ModRM, 0, DstReg|SrcMem|ModRM, + DstMem|SrcReg|ModRM, DstMem|SrcReg|ModRM, + ImplicitOps|ModRM, DstReg|SrcMem|ModRM, /* 0xB0 - 0xB7 */ ByteOp|DstMem|SrcReg|ModRM, DstMem|SrcReg|ModRM, DstReg|SrcMem|ModRM|Mov, DstBitBase|SrcReg|ModRM, @@ -3818,6 +3819,19 @@ x86_emulate( emulate_2op_SrcV_nobyte("bts", src, dst, _regs.eflags); break; + case 0xae: /* Grp15 */ + switch ( modrm_reg & 7 ) + { + case 7: /* clflush */ + fail_if(ops->wbinvd == NULL); + if ( (rc = ops->wbinvd(ctxt)) != 0 ) + goto done; + break; + default: + goto cannot_emulate; + } + break; + case 0xaf: /* imul */ _regs.eflags &= ~(EFLG_OF|EFLG_CF); switch ( dst.bytes ) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |