ChangeSet 1.1159.258.138, 2005/05/18 22:41:38+01:00, iap10@xxxxxxxxxxxxxxxxxxxxx
Move magic sysrq from workqueue to softirq context so that its more
likely to work if the system is in a bad state.
reboot.c | 30 +++++++++++-------------------
1 files changed, 11 insertions(+), 19 deletions(-)
diff -Nru a/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c
b/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c
--- a/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c 2005-05-19 05:04:06
-04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c 2005-05-19 05:04:06
-04:00
@@ -52,7 +52,6 @@
/* Ignore multiple shutdown requests. */
static int shutting_down = -1;
-static int pending_sysrq = -1;
static void __do_suspend(void)
{
@@ -216,36 +215,29 @@
}
}
-static void __sysrq_handler(void *unused)
+static void shutdown_handler(ctrl_msg_t *msg, unsigned long id)
{
+ static DECLARE_WORK(shutdown_work, __shutdown_handler, NULL);
+
+ if ( msg->subtype == CMSG_SHUTDOWN_SYSRQ )
+ {
+ int sysrq = ((shutdown_sysrq_t *)&msg->msg[0])->key;
+
#ifdef CONFIG_MAGIC_SYSRQ
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
- handle_sysrq(pending_sysrq, NULL, NULL);
+ handle_sysrq(sysrq, NULL, NULL);
#else
- handle_sysrq(pending_sysrq, NULL, NULL, NULL);
+ handle_sysrq(sysrq, NULL, NULL, NULL);
#endif
#endif
- pending_sysrq = -1;
-}
-
-static void shutdown_handler(ctrl_msg_t *msg, unsigned long id)
-{
- static DECLARE_WORK(shutdown_work, __shutdown_handler, NULL);
- static DECLARE_WORK(sysrq_work, __sysrq_handler, NULL);
-
- if ( (shutting_down == -1) &&
+ }
+ else if ( (shutting_down == -1) &&
((msg->subtype == CMSG_SHUTDOWN_POWEROFF) ||
(msg->subtype == CMSG_SHUTDOWN_REBOOT) ||
(msg->subtype == CMSG_SHUTDOWN_SUSPEND)) )
{
shutting_down = msg->subtype;
schedule_work(&shutdown_work);
- }
- else if ( (pending_sysrq == -1) &&
- (msg->subtype == CMSG_SHUTDOWN_SYSRQ) )
- {
- pending_sysrq = ((shutdown_sysrq_t *)&msg->msg[0])->key;
- schedule_work(&sysrq_work);
}
else
{
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|