* [PATCH][5/5] cmpl workaround for mmio regions
@ 2005-07-10 19:04 Arun Sharma
0 siblings, 0 replies; only message in thread
From: Arun Sharma @ 2005-07-10 19:04 UTC (permalink / raw)
To: Ian Pratt, Keir Fraser; +Cc: xen-devel
cmpl workaround for mmio regions
Although we don't normally expect a guest to use cmpl against a MMIO region,
this may happen due to bugs. This workaround is needed for 64 bit linux-2.6.
Signed-off-by: Chengyuan Li <chengyuan.li@intel.com>
Signed-off-by: Arun Sharma <arun.sharma@intel.com>
diff -r b3872674fc9a -r 8b35a59e4a23 xen/arch/x86/vmx_platform.c
--- a/xen/arch/x86/vmx_platform.c Fri Jul 8 18:06:34 2005
+++ b/xen/arch/x86/vmx_platform.c Fri Jul 8 18:58:08 2005
@@ -266,7 +266,7 @@
switch(mod) {
case 0:
- if (rm == 5) {
+ if (rm == 5 || rm == 4) {
if (op16)
inst = inst + 2; //disp16, skip 2 bytes
else
@@ -363,6 +363,11 @@
}
switch(*inst) {
+ case 0x81:
+ /* This is only a workaround for cmpl instruction*/
+ strcpy((char *)thread_inst->i_name, "cmp");
+ return DECODE_success;
+
case 0x88:
/* mov r8 to m8 */
thread_inst->op_size = BYTE;
@@ -635,7 +640,6 @@
__vmread(GUEST_RIP, &eip);
__vmread(INSTRUCTION_LEN, &inst_len);
-
__vmread(GUEST_RFLAGS, &eflags);
vm86 = eflags & X86_EFLAGS_VM;
@@ -737,6 +741,12 @@
inst_decoder_regs->eax, IOREQ_WRITE, 0);
return;
}
+ /* Workaround for cmp instruction */
+ if (!strncmp((char *)mmio_inst.i_name, "cmp", 3)) {
+ inst_decoder_regs->eflags &= ~X86_EFLAGS_ZF;
+ __vmwrite(GUEST_RFLAGS, inst_decoder_regs->eflags);
+ return;
+ }
domain_crash_synchronous();
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2005-07-10 19:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-07-10 19:04 [PATCH][5/5] cmpl workaround for mmio regions Arun Sharma
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.