[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] vmx realmode: Multiple I/O reads to qemu in an instruction is not



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1201519735 0
# Node ID ed2ca78286a8c30ab68e37c7eccae6d1748f0d50
# Parent  ed8ab1a36b09b8f952d36943180ac079144144f5
vmx realmode: Multiple I/O reads to qemu in an instruction is not
allowed. But we do allow, for example, a read followed by a write
(e.g., MOVS within video RAM).
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/x86/hvm/vmx/realmode.c |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff -r ed8ab1a36b09 -r ed2ca78286a8 xen/arch/x86/hvm/vmx/realmode.c
--- a/xen/arch/x86/hvm/vmx/realmode.c   Mon Jan 28 10:17:05 2008 +0000
+++ b/xen/arch/x86/hvm/vmx/realmode.c   Mon Jan 28 11:28:55 2008 +0000
@@ -534,12 +534,6 @@ static void realmode_emulate_one(struct 
         goto fail;
     }
 
-    if ( io_completed && curr->arch.hvm_vmx.real_mode_io_in_progress )
-    {
-        gdprintk(XENLOG_ERR, "Multiple I/O transactions in a single insn.\n");
-        goto fail;
-    }
-
     if ( rc == X86EMUL_UNHANDLEABLE )
     {
         gdprintk(XENLOG_ERR, "Failed to emulate insn.\n");
@@ -547,7 +541,13 @@ static void realmode_emulate_one(struct 
     }
 
     if ( rc == X86EMUL_RETRY )
-        return;
+    {
+        BUG_ON(!curr->arch.hvm_vmx.real_mode_io_in_progress);
+        if ( !io_completed )
+            return;
+        gdprintk(XENLOG_ERR, "Multiple I/O reads in a single insn.\n");
+        goto fail;
+    }
 
     if ( curr->arch.hvm_vmx.real_mode_io_in_progress &&
          (get_ioreq(curr)->vp_ioreq.dir == IOREQ_READ) )

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.