|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] vmx realmode: Multiple I/O reads to qemu
# 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
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] vmx realmode: Multiple I/O reads to qemu in an instruction is not,
Xen patchbot-unstable <=
|
|
|
|
|