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

[Xen-changelog] Move magic sysrq from workqueue to softirq context so that its more likely to work if the system is in a bad state.



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


 


Rackspace

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