[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] mini-os: Notify shutdown through weak function call instead of wake queue


  • To: xen-changelog@xxxxxxxxxxxxxxxxxxx
  • From: Xen patchbot-unstable <patchbot@xxxxxxx>
  • Date: Thu, 10 Jan 2013 02:22:07 +0000
  • Delivery-date: Thu, 10 Jan 2013 02:22:33 +0000
  • List-id: "Change log for Mercurial \(receive only\)" <xen-changelog.lists.xen.org>

# HG changeset patch
# User Samuel Thibault <samuel.thibaut@xxxxxxxxxxxx>
# Date 1357721033 0
# Node ID 5dec1022923c6abec388962db3320999b73996f1
# Parent  11e92ef6d84a20a6b0b2f989060a6bc1a123d2c0
mini-os: Notify shutdown through weak function call instead of wake queue

To allow for more flexibility, this notifies domain shutdown through a
function rather than a wake queue, to let the application use a wake
queue only if it wishes.

Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>
Committed-by: Keir Fraser <keir@xxxxxxx>
---


diff -r 11e92ef6d84a -r 5dec1022923c extras/mini-os/include/kernel.h
--- a/extras/mini-os/include/kernel.h   Tue Jan 08 10:43:35 2013 +0100
+++ b/extras/mini-os/include/kernel.h   Wed Jan 09 08:43:53 2013 +0000
@@ -1,9 +1,6 @@
 #ifndef _KERNEL_H_
 #define _KERNEL_H_
 
-extern unsigned int do_shutdown;
-extern unsigned int shutdown_reason;
-extern struct wait_queue_head shutdown_queue;
 extern void do_exit(void) __attribute__((noreturn));
 extern void stop_kernel(void);
 
diff -r 11e92ef6d84a -r 5dec1022923c extras/mini-os/kernel.c
--- a/extras/mini-os/kernel.c   Tue Jan 08 10:43:35 2013 +0100
+++ b/extras/mini-os/kernel.c   Wed Jan 09 08:43:53 2013 +0000
@@ -48,12 +48,6 @@
 
 uint8_t xen_features[XENFEAT_NR_SUBMAPS * 32];
 
-#ifdef CONFIG_XENBUS
-unsigned int do_shutdown = 0;
-unsigned int shutdown_reason;
-DECLARE_WAIT_QUEUE_HEAD(shutdown_queue);
-#endif
-
 void setup_xen_features(void)
 {
     xen_feature_info_t fi;
@@ -71,12 +65,19 @@ void setup_xen_features(void)
 }
 
 #ifdef CONFIG_XENBUS
+/* This should be overridden by the application we are linked against. */
+__attribute__((weak)) void app_shutdown(unsigned reason)
+{
+    printk("Shutdown requested: %d\n", reason);
+}
+
 static void shutdown_thread(void *p)
 {
     const char *path = "control/shutdown";
     const char *token = path;
     xenbus_event_queue events = NULL;
     char *shutdown, *err;
+    unsigned int shutdown_reason;
     xenbus_watch_path_token(XBT_NIL, path, token, &events);
     while ((err = xenbus_read(XBT_NIL, path, &shutdown)) != NULL)
     {
@@ -94,10 +95,7 @@ static void shutdown_thread(void *p)
     else
         /* Unknown */
         shutdown_reason = SHUTDOWN_crash;
-    wmb();
-    do_shutdown = 1;
-    wmb();
-    wake_up(&shutdown_queue);
+    app_shutdown(shutdown_reason);
 }
 #endif
 
diff -r 11e92ef6d84a -r 5dec1022923c extras/mini-os/test.c
--- a/extras/mini-os/test.c     Tue Jan 08 10:43:35 2013 +0100
+++ b/extras/mini-os/test.c     Wed Jan 09 08:43:53 2013 +0000
@@ -45,6 +45,10 @@
 #include <xen/features.h>
 #include <xen/version.h>
 
+static unsigned int do_shutdown = 0;
+static unsigned int shutdown_reason;
+static DECLARE_WAIT_QUEUE_HEAD(shutdown_queue);
+
 static struct netfront_dev *net_dev;
 static struct semaphore net_sem = __SEMAPHORE_INITIALIZER(net_sem, 0);
 
@@ -487,6 +491,15 @@ void shutdown_frontends(void)
 #endif
 }
 
+void app_shutdown(unsigned reason)
+{
+    shutdown_reason = reason;
+    wmb();
+    do_shutdown = 1;
+    wmb();
+    wake_up(&shutdown_queue);
+}
+
 static void shutdown_thread(void *p)
 {
     DEFINE_WAIT(w);

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.