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-4.0-testing] Allow domains to set a shutdown code w

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-4.0-testing] Allow domains to set a shutdown code without actually shutting down
From: "Xen patchbot-4.0-testing" <patchbot-4.0-testing@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 04 Jun 2010 03:45:58 -0700
Delivery-date: Fri, 04 Jun 2010 03:50:58 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/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 1275644940 -3600
# Node ID bfabcd558dbe38b5f99f40b6584baaa2ca025151
# Parent  0e1521f654f2ab616b37da7359a45a8979356083
Allow domains to set a shutdown code without actually shutting down

Useful for Windows guests, since the PV drivers are notified that
the domain is about to crash just before the crash dump gets written.

Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx>
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
xen-unstable changeset:   21510:2dffb2585516
xen-unstable date:        Fri Jun 04 09:33:11 2010 +0100
---
 xen/common/domain.c        |   14 ++++++++++----
 xen/common/schedule.c      |   21 +++++++++++++++++++++
 xen/include/public/sched.h |    7 +++++++
 xen/include/public/trace.h |    1 +
 4 files changed, 39 insertions(+), 4 deletions(-)

diff -r 0e1521f654f2 -r bfabcd558dbe xen/common/domain.c
--- a/xen/common/domain.c       Fri Jun 04 10:47:26 2010 +0100
+++ b/xen/common/domain.c       Fri Jun 04 10:49:00 2010 +0100
@@ -231,10 +231,12 @@ struct domain *domain_create(
     atomic_set(&d->refcnt, 1);
     spin_lock_init_prof(d, domain_lock);
     spin_lock_init_prof(d, page_alloc_lock);
-    spin_lock_init(&d->shutdown_lock);
     spin_lock_init(&d->hypercall_deadlock_mutex);
     INIT_PAGE_LIST_HEAD(&d->page_list);
     INIT_PAGE_LIST_HEAD(&d->xenpage_list);
+
+    spin_lock_init(&d->shutdown_lock);
+    d->shutdown_code = -1;
 
     if ( domcr_flags & DOMCRF_hvm )
         d->is_hvm = 1;
@@ -483,11 +485,15 @@ void domain_shutdown(struct domain *d, u
 {
     struct vcpu *v;
 
+    spin_lock(&d->shutdown_lock);
+
+    if ( d->shutdown_code == -1 )
+        d->shutdown_code = reason;
+    reason = d->shutdown_code;
+
     if ( d->domain_id == 0 )
         dom0_shutdown(reason);
 
-    spin_lock(&d->shutdown_lock);
-
     if ( d->is_shutting_down )
     {
         spin_unlock(&d->shutdown_lock);
@@ -495,7 +501,6 @@ void domain_shutdown(struct domain *d, u
     }
 
     d->is_shutting_down = 1;
-    d->shutdown_code = reason;
 
     smp_mb(); /* set shutdown status /then/ check for per-cpu deferrals */
 
@@ -527,6 +532,7 @@ void domain_resume(struct domain *d)
     spin_lock(&d->shutdown_lock);
 
     d->is_shutting_down = d->is_shut_down = 0;
+    d->shutdown_code = -1;
 
     for_each_vcpu ( d, v )
     {
diff -r 0e1521f654f2 -r bfabcd558dbe xen/common/schedule.c
--- a/xen/common/schedule.c     Fri Jun 04 10:47:26 2010 +0100
+++ b/xen/common/schedule.c     Fri Jun 04 10:49:00 2010 +0100
@@ -650,6 +650,27 @@ ret_t do_sched_op(int cmd, XEN_GUEST_HAN
         break;
     }
 
+    case SCHEDOP_shutdown_code:
+    {
+        struct sched_shutdown sched_shutdown;
+        struct domain *d = current->domain;
+
+        ret = -EFAULT;
+        if ( copy_from_guest(&sched_shutdown, arg, 1) )
+            break;
+
+        TRACE_3D(TRC_SCHED_SHUTDOWN_CODE,
+                 d->domain_id, current->vcpu_id, sched_shutdown.reason);
+
+        spin_lock(&d->shutdown_lock);
+        if ( d->shutdown_code == -1 )
+            d->shutdown_code = (u8)sched_shutdown.reason;
+        spin_unlock(&d->shutdown_lock);
+
+        ret = 0;
+        break;
+    }
+
     case SCHEDOP_poll:
     {
         struct sched_poll sched_poll;
diff -r 0e1521f654f2 -r bfabcd558dbe xen/include/public/sched.h
--- a/xen/include/public/sched.h        Fri Jun 04 10:47:26 2010 +0100
+++ b/xen/include/public/sched.h        Fri Jun 04 10:49:00 2010 +0100
@@ -99,6 +99,13 @@ DEFINE_XEN_GUEST_HANDLE(sched_remote_shu
 DEFINE_XEN_GUEST_HANDLE(sched_remote_shutdown_t);
 
 /*
+ * Latch a shutdown code, so that when the domain later shuts down it
+ * reports this code to the control tools.
+ * @arg == as for SCHEDOP_shutdown.
+ */
+#define SCHEDOP_shutdown_code 5
+
+/*
  * Reason codes for SCHEDOP_shutdown. These may be interpreted by control
  * software to determine the appropriate action. For the most part, Xen does
  * not care about the shutdown code.
diff -r 0e1521f654f2 -r bfabcd558dbe xen/include/public/trace.h
--- a/xen/include/public/trace.h        Fri Jun 04 10:47:26 2010 +0100
+++ b/xen/include/public/trace.h        Fri Jun 04 10:49:00 2010 +0100
@@ -78,6 +78,7 @@
 #define TRC_SCHED_DOM_TIMER_FN   (TRC_SCHED_VERBOSE + 13)
 #define TRC_SCHED_SWITCH_INFPREV (TRC_SCHED_VERBOSE + 14)
 #define TRC_SCHED_SWITCH_INFNEXT (TRC_SCHED_VERBOSE + 15)
+#define TRC_SCHED_SHUTDOWN_CODE  (TRC_SCHED_VERBOSE + 16)
 
 #define TRC_MEM_PAGE_GRANT_MAP      (TRC_MEM + 1)
 #define TRC_MEM_PAGE_GRANT_UNMAP    (TRC_MEM + 2)

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-4.0-testing] Allow domains to set a shutdown code without actually shutting down, Xen patchbot-4.0-testing <=