WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] x86, hvm: MMIO emulations should defer do

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] x86, hvm: MMIO emulations should defer domain shutdown requests until
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 27 Mar 2008 14:40:10 -0700
Delivery-date: Thu, 27 Mar 2008 14:40:03 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# 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 <=