aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/hvm/io.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2007-11-25 11:43:53 +0000
committerKeir Fraser <keir.fraser@citrix.com>2007-11-25 11:43:53 +0000
commita2b5673b0018f0184b4833f65a453538cf84f6f5 (patch)
tree3db44cdf515f059f4c2ddfe28a0137ff8a840d6c /xen/arch/x86/hvm/io.c
parent727f3fd5fa194bb03e9e478b2fd1760f38a43546 (diff)
downloadxen-a2b5673b0018f0184b4833f65a453538cf84f6f5.tar.gz
xen-a2b5673b0018f0184b4833f65a453538cf84f6f5.tar.bz2
xen-a2b5673b0018f0184b4833f65a453538cf84f6f5.zip
vmx realmode: Plumb through I/O port accesses in emulated realmode.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/arch/x86/hvm/io.c')
-rw-r--r--xen/arch/x86/hvm/io.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/xen/arch/x86/hvm/io.c b/xen/arch/x86/hvm/io.c
index fe54017012..f522d60378 100644
--- a/xen/arch/x86/hvm/io.c
+++ b/xen/arch/x86/hvm/io.c
@@ -841,13 +841,17 @@ void hvm_io_assist(void)
if ( p->state != STATE_IORESP_READY )
{
gdprintk(XENLOG_ERR, "Unexpected HVM iorequest state %d.\n", p->state);
- domain_crash_synchronous();
+ domain_crash(v->domain);
+ goto out;
}
rmb(); /* see IORESP_READY /then/ read contents of ioreq */
p->state = STATE_IOREQ_NONE;
+ if ( v->arch.hvm_vcpu.io_complete && v->arch.hvm_vcpu.io_complete() )
+ goto out;
+
switch ( p->type )
{
case IOREQ_TYPE_INVALIDATE: