[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 1/2] Make shutdown use strings instead of codes
This patch changes the shutdown driver and xend to use strings instead of codes for signaling a shutdown request. Also, we fix the return code for the shutdown notifier, so other notifiers will get to run ;) Signed-off-by: Dan Smith <danms@xxxxxxxxxx> diff -r 5a33233a608e -r a94ff69a51a3 linux-2.6-xen-sparse/arch/xen/kernel/reboot.c --- a/linux-2.6-xen-sparse/arch/xen/kernel/reboot.c Fri Aug 5 09:53:04 2005 +++ b/linux-2.6-xen-sparse/arch/xen/kernel/reboot.c Fri Aug 5 16:04:24 2005 @@ -247,19 +247,31 @@ { static DECLARE_WORK(shutdown_work, __shutdown_handler, NULL); - int type = -1; - - if (!xenbus_scanf("control", "shutdown", "%i", &type)) { - printk("Unable to read code in control/shutdown\n"); + char *str; + unsigned int len; + + str = (char *)xenbus_read("control", "shutdown", &len); + + if (! len) { return; - }; + } xenbus_printf("control", "shutdown", "%i", SHUTDOWN_INVALID); - if ((type == SHUTDOWN_POWEROFF) || - (type == SHUTDOWN_REBOOT) || - (type == SHUTDOWN_SUSPEND)) { - shutting_down = type; + if (strncmp(str, "poweroff", len) == 0) { + shutting_down = SHUTDOWN_POWEROFF; + } else if (strncmp(str, "reboot", len) == 0) { + shutting_down = SHUTDOWN_REBOOT; + } else if (strncmp(str, "suspend", len) == 0) { + shutting_down = SHUTDOWN_SUSPEND; + } else { + printk("Ignoring shutdown request: %s\n", str); + shutting_down = SHUTDOWN_INVALID; + } + + kfree(str); + + if (shutting_down != SHUTDOWN_INVALID) { schedule_work(&shutdown_work); } @@ -271,7 +283,7 @@ char sysrq_key = '\0'; if (!xenbus_scanf("control", "sysrq", "%c", &sysrq_key)) { - printk("Unable to read sysrq code in control/sysrq\n"); + printk(KERN_ERR "Unable to read sysrq code in control/sysrq\n"); return; } @@ -319,16 +331,16 @@ up(&xenbus_lock); if (err1) { - printk("Failed to set shutdown watcher\n"); + printk(KERN_ERR "Failed to set shutdown watcher\n"); } #ifdef CONFIG_MAGIC_SYSRQ if (err2) { - printk("Failed to set sysrq watcher\n"); - } -#endif - - return NOTIFY_STOP; + printk(KERN_ERR "Failed to set sysrq watcher\n"); + } +#endif + + return NOTIFY_DONE; } static int __init setup_shutdown_event(void) diff -r 5a33233a608e -r a94ff69a51a3 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Fri Aug 5 09:53:04 2005 +++ b/tools/python/xen/xend/XendDomainInfo.py Fri Aug 5 16:04:24 2005 @@ -50,14 +50,6 @@ DOMAIN_REBOOT : "reboot", DOMAIN_SUSPEND : "suspend", DOMAIN_CRASH : "crash", - } - -"""Map shutdown reasons to codes -""" -shutdown_codes = { - 'poweroff' : DOMAIN_POWEROFF, - 'reboot' : DOMAIN_REBOOT, - 'suspend' : DOMAIN_SUSPEND, } RESTART_ALWAYS = 'always' @@ -939,11 +931,10 @@ self.channel.writeRequest(msg) def shutdown(self, reason): - reasonid = shutdown_codes.get(reason) - if reasonid == None: + if not reason in shutdown_reasons.values(): raise XendError('invalid reason:' + reason) db = self.db.addChild("/control"); - db['shutdown'] = '%i' % reasonid; + db['shutdown'] = reason; db.saveDB(save=True); if not reason in ['suspend']: self.shutdown_pending = {'start':time.time(), 'reason':reason} -- Dan Smith IBM Linux Technology Center Open Hypervisor Team email: danms@xxxxxxxxxx _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |