All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.