|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] x86, hvm: MMIO emulations should defer do
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1206617997 0
# Node ID b667e220e55615957f98e54a44c2f638d270e225
# Parent a294519d97d2fc59ec286b9c4e9988776166053e
x86, hvm: MMIO emulations should defer domain shutdown requests until
the relevant instruction has been fully emulated (which may require
multiple round trips to qemu-dm).
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
xen/arch/x86/hvm/io.c | 19 +++++++++----------
xen/common/domain.c | 6 ++++++
2 files changed, 15 insertions(+), 10 deletions(-)
diff -r a294519d97d2 -r b667e220e556 xen/arch/x86/hvm/io.c
--- a/xen/arch/x86/hvm/io.c Thu Mar 27 11:03:45 2008 +0000
+++ b/xen/arch/x86/hvm/io.c Thu Mar 27 11:39:57 2008 +0000
@@ -221,35 +221,34 @@ int handle_mmio_with_translation(unsigne
void hvm_io_assist(void)
{
- struct vcpu *v = current;
- ioreq_t *p = &get_ioreq(v)->vp_ioreq;
+ struct vcpu *curr = current;
+ ioreq_t *p = &get_ioreq(curr)->vp_ioreq;
enum hvm_io_state io_state;
if ( p->state != STATE_IORESP_READY )
{
gdprintk(XENLOG_ERR, "Unexpected HVM iorequest state %d.\n", p->state);
- domain_crash(v->domain);
- goto out;
+ domain_crash_synchronous();
}
rmb(); /* see IORESP_READY /then/ read contents of ioreq */
p->state = STATE_IOREQ_NONE;
- io_state = v->arch.hvm_vcpu.io_state;
- v->arch.hvm_vcpu.io_state = HVMIO_none;
+ io_state = curr->arch.hvm_vcpu.io_state;
+ curr->arch.hvm_vcpu.io_state = HVMIO_none;
if ( (io_state == HVMIO_awaiting_completion) ||
(io_state == HVMIO_handle_mmio_awaiting_completion) )
{
- v->arch.hvm_vcpu.io_state = HVMIO_completed;
- v->arch.hvm_vcpu.io_data = p->data;
+ curr->arch.hvm_vcpu.io_state = HVMIO_completed;
+ curr->arch.hvm_vcpu.io_data = p->data;
if ( io_state == HVMIO_handle_mmio_awaiting_completion )
(void)handle_mmio();
}
- out:
- vcpu_end_shutdown_deferral(v);
+ if ( p->state == STATE_IOREQ_NONE )
+ vcpu_end_shutdown_deferral(curr);
}
void dpci_ioport_read(uint32_t mport, ioreq_t *p)
diff -r a294519d97d2 -r b667e220e556 xen/common/domain.c
--- a/xen/common/domain.c Thu Mar 27 11:03:45 2008 +0000
+++ b/xen/common/domain.c Thu Mar 27 11:39:57 2008 +0000
@@ -393,6 +393,8 @@ void __domain_crash_synchronous(void)
this_cpu(mc_state).flags = 0;
}
+ vcpu_end_shutdown_deferral(current);
+
for ( ; ; )
do_softirq();
}
@@ -459,10 +461,14 @@ void domain_resume(struct domain *d)
int vcpu_start_shutdown_deferral(struct vcpu *v)
{
+ if ( v->defer_shutdown )
+ return 1;
+
v->defer_shutdown = 1;
smp_mb(); /* set deferral status /then/ check for shutdown */
if ( unlikely(v->domain->is_shutting_down) )
vcpu_check_shutdown(v);
+
return v->defer_shutdown;
}
_______________________________________________
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] x86, hvm: MMIO emulations should defer domain shutdown requests until,
Xen patchbot-unstable <=
|
Previous by Date: |
[Xen-changelog] [xen-unstable] x86, vmx: HVM guests are allowed to modify CR2, and the written value, Xen patchbot-unstable |
Next by Date: |
[Xen-changelog] [xen-unstable] x86_emulate: On HVM MMIO emulation, cache the gva->pfn mapping for the, Xen patchbot-unstable |
Previous by Thread: |
[Xen-changelog] [xen-unstable] x86, vmx: HVM guests are allowed to modify CR2, and the written value, Xen patchbot-unstable |
Next by Thread: |
[Xen-changelog] [xen-unstable] x86_emulate: On HVM MMIO emulation, cache the gva->pfn mapping for the, Xen patchbot-unstable |
Indexes: |
[Date]
[Thread]
[Top]
[All Lists] |
|
|
|
|