[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
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |