sysrq: add debug message to reboot event
Subsystems (2)
PATCH 1/1 sysrq: add debug message to reboot event
Add debug message to detect keyboard vs non-keyboard triggered sysrq-b events.
---
--- linux-2.6.git/drivers/char/sysrq.c.orig 2009-08-13
15:43:34.000000000 -0700
+++ linux-2.6.git/drivers/char/sysrq.c 2009-08-13 21:51:15.832694000 -0700 @@ -135,17 +135,22 @@ static struct sysrq_key_op sysrq_crash_o
.enable_mask = SYSRQ_ENABLE_DUMP,
};
-static void sysrq_handle_reboot(int key, struct tty_struct *tty) +static void sysrq_handle_reboot(int check_mask, int key, struct tty_struct *tty)
{
+ if (check_mask)
+ printk("<keyboard-invoked>\n");
+ else
+ printk("<non-keyboard-invoked: PID %d COMMAND %s>\n",
+ current->pid, current->comm);
lockdep_off();
local_irq_enable();
emergency_restart();
}
static struct sysrq_key_op sysrq_reboot_op = {
- .handler = sysrq_handle_reboot,
- .help_msg = "reBoot",
- .action_msg = "Resetting",
- .enable_mask = SYSRQ_ENABLE_BOOT,
+ .handler_with_mask = sysrq_handle_reboot,
+ .help_msg = "reBoot",
+ .action_msg = "Resetting",
+ .enable_mask = SYSRQ_ENABLE_BOOT,};
static void sysrq_handle_sync(int key, struct tty_struct *tty)
@@ -509,7 +514,10 @@ void __handle_sysrq(int key, struct tty_
if (!check_mask || sysrq_on_mask(op_p->enable_mask)) {
printk("%s\n", op_p->action_msg);
console_loglevel = orig_log_level;- op_p->handler(key, tty);
+ if (op_p->handler_with_mask)
+ op_p->handler_with_mask(check_mask, key,
tty);
+ else
+ op_p->handler(key, tty);
} else {
printk("This sysrq operation is disabled.\n");
}--- linux-2.6.git/include/linux/sysrq.h.orig 2009-08-13
20:53:48.085786000 -0700
+++ linux-2.6.git/include/linux/sysrq.h 2009-08-13 20:54:12.625756000 -0700 @@ -32,6 +32,7 @@ struct tty_struct;
struct sysrq_key_op {
void (*handler)(int, struct tty_struct *);
+ void (*handler_with_mask)(int, int, struct tty_struct *);
char *help_msg;
char *action_msg;
int enable_mask;Quoted 58 lines · tina.yang
Add debug message to detect keyboard vs non-keyboard triggered sysrq-b events.
Signed-off-by Tina Yang <[email protected]>Signed-off-by Zach Brown <[email protected]>---
--- linux-2.6.git/drivers/char/sysrq.c.orig 2009-08-13
15:43:34.000000000 -0700
+++linux-2.6.git/drivers/char/sysrq.c2009-08-13 21:51:15.832694000 -0700(quoted diff) +10
-5@@ -135,17 +135,22 @@ static struct sysrq_key_op sysrq_crash_o .enable_mask = SYSRQ_ENABLE_DUMP, }; -static void sysrq_handle_reboot(int key, struct tty_struct *tty) +static void sysrq_handle_reboot(int check_mask, int key, struct tty_struct *tty) { + if (check_mask) + printk("<keyboard-invoked>\n"); + else + printk("<non-keyboard-invoked: PID %d COMMAND %s>\n", + current->pid, current->comm); lockdep_off(); local_irq_enable(); emergency_restart(); } static struct sysrq_key_op sysrq_reboot_op = { - .handler = sysrq_handle_reboot, - .help_msg = "reBoot", - .action_msg = "Resetting", - .enable_mask = SYSRQ_ENABLE_BOOT, + .handler_with_mask = sysrq_handle_reboot, + .help_msg = "reBoot", + .action_msg = "Resetting", + .enable_mask = SYSRQ_ENABLE_BOOT, };static void
sysrq_handle_sync(int key, struct tty_struct *tty)(quoted diff) +4
-1@@ -509,7 +514,10 @@ void __handle_sysrq(int key, struct tty_ if (!check_mask || sysrq_on_mask(op_p->enable_mask)) { printk("%s\n", op_p->action_msg); console_loglevel = orig_log_level; - op_p->handler(key, tty); + if (op_p->handler_with_mask) + op_p->handler_with_mask(check_mask, key, tty); + else + op_p->handler(key, tty); } else { printk("This sysrq operation is disabled.\n");}--- linux-2.6.git/include/linux/sysrq.h.orig 2009-08-13
20:53:48.085786000 -0700
+++linux-2.6.git/include/linux/sysrq.h2009-08-13 20:54:12.625756000 -0700
Review struct tty_struct; · line 38
Quoted 7 lines
(quoted diff) +1
-0@@ -32,6 +32,7 @@ struct tty_struct; struct sysrq_key_op { void (*handler)(int, struct tty_struct *); + void (*handler_with_mask)(int, int, struct tty_struct *); char *help_msg; char *action_msg; int enable_mask;
I'd rather have this go through -mm, this doesn't really fully qualify for trivial tree. CCing Andrew.
Signature · 2 lines
Jiri Kosina SUSE Labs
Quoted 9 lines · On Tue, 18 Aug 2009 13:40:24 +0200 (CEST) Jiri Kosina <[email protected]> wrote:
Quoted 6 lines · tina.yang
Add debug message to detect keyboard vs non-keyboard triggered sysrq-b events.
Signed-off-by Tina Yang <[email protected]>Signed-off-by Zach Brown <[email protected]>
Quoted 5 lines
...
I'd rather have this go through -mm, this doesn't really fully qualify for trivial tree. CCing Andrew.
The changelog had no description of why the change should be applied and I was unable to understand the motivation from reading the patch, so I skipped it.
Also the patch was wordwrapped and had all its tabs replaced by spaces.
Add debug message to detect keyboard vs non-keyboard triggered sysrq-b events. This is to assist postmortem debugging on complicated computing setup with large number of applications involved where reboot event had occurred, but unclear of its origin.
---
drivers/char/sysrq.c renamed from drivers/char/sysrq.c.orig +14 -6
@@ -112,18 +112,23 @@ static struct sysrq_key_op sysrq_crashdu .enable_mask = SYSRQ_ENABLE_DUMP, }; -static void sysrq_handle_reboot (int key,struct pt_regs *pt_regs, +static void sysrq_handle_reboot (int check_mask,int key,struct pt_regs *pt_regs,struct tty_struct *tty) { +if (check_mask) +printk ("<keyboard-invoked>\n" ); +else +printk ("<non-keyboard-invoked: PID %d COMMAND %s>\n" , + current->pid, current->comm);lockdep_off ();local_irq_enable ();emergency_restart (); }static struct sysrq_key_op sysrq_reboot_op = { - .handler = sysrq_handle_reboot, - .help_msg ="reBoot" , - .action_msg ="Resetting" , - .enable_mask =SYSRQ_ENABLE_BOOT , + .handler_with_mask = sysrq_handle_reboot, + .help_msg ="reBoot" , + .action_msg ="Resetting" , + .enable_mask =SYSRQ_ENABLE_BOOT , }; static void sysrq_handle_sync(int key, struct pt_regs *pt_regs,
@@ -411,7 +416,10 @@ void __handle_sysrq(int key, struct pt_r }printk ("%s\n" , op_p->action_msg); console_loglevel = orig_log_level; - op_p->handler (key, pt_regs, tty); +if (op_p->handler_with_mask) + op_p->handler_with_mask (check_mask, key, pt_regs, tty); +else + op_p->handler (key, pt_regs, tty); }else {printk ("This sysrq operation is disabled.\n" ); }
include/linux/sysrq.h renamed from include/linux/sysrq.h.orig +1 -0
@@ -28,6 +28,7 @@ struct tty_struct;struct sysrq_key_op {void (*handler)(int ,struct pt_regs *,struct tty_struct *); +void (*handler_with_mask)(int check_mask,int ,struct pt_regs *,struct tty_struct *);char *help_msg;char *action_msg;int enable_mask;
Quoted 7 lines · Andrew Morton
The changelog had no description of why the change should be applied and I was unable to understand the motivation from reading the patch, so I skipped it.
Also the patch was wordwrapped and had all its tabs replaced by spaces.
Quoted 4 lines · On Wed, 19 Aug 2009 19:22:16 -0700 "tina.yang" <[email protected]> wrote:
Add debug message to detect keyboard vs non-keyboard triggered sysrq-b events. This is to assist postmortem debugging on complicated computing setup with large number of applications involved where reboot event had occurred, but unclear of its origin.
I'm still struggling to understand the motivation for the change. There are a large number of ways in which a machine can be rebooted, all the way down to a triple-fault. So it seems fairly arbitrary to add additional information to discriminate between just two of those ways.
I assume that somewhere in your setup you have a script which does `echo b /proc/sysrq-trigger' and it took ages to work out that this was happening and you felt that having this code in place would have helped you debug that problem, yes?
If so, I wonder what is the likelihood that someone else will have the same problem and will find this change useful.
Perhaps we should do this for all sysrq events rather than just sysrq-b?
drivers/char/sysrq.c
Quoted 2 lines
drivers/char/sysrq.c renamed from drivers/char/sysrq.c.orig +0
-0
2.6.18 is truly ancient and this patch doesn't apply at all to current development kernels.
Quoted 16 lines · Andrew Morton
Quoted 5 lines · On Wed, 19 Aug 2009 19:22:16 -0700 "tina.yang" <[email protected]> wrote:
Add debug message to detect keyboard vs non-keyboard triggered sysrq-b events. This is to assist postmortem debugging on complicated computing setup with large number of applications involved where reboot event had occurred, but unclear of its origin.
I'm still struggling to understand the motivation for the change. There are a large number of ways in which a machine can be rebooted, all the way down to a triple-fault. So it seems fairly arbitrary to add additional information to discriminate between just two of those ways.
Quoted 8 lines
I assume that somewhere in your setup you have a script which does `echo b
/proc/sysrq-trigger' and it took ages to work out that this was happening and you felt that having this code in place would have helped you debug that problem, yes?If so, I wonder what is the likelihood that someone else will have the same problem and will find this change useful.
Exactly what you've described except we are debugging someone else's (customers') setup remotely without familiarity of their environment and often with a time constraint. The setup usually involves large database clusters and who knows what else are running there. I think people in a comparable environment can benefit from a little more debug help from the system as we can.
Quoted 4 lines
Perhaps we should do this for all sysrq events rather than just sysrq-b?
From a system perspective, I agree generalization of message handling is better. The most critical one we have experienced is the reboot event.
Quoted 8 lines
drivers/char/sysrq.c
Quoted 3 lines
drivers/char/sysrq.c renamed from drivers/char/sysrq.c.orig +0
-02.6.18 is truly ancient and this patch doesn't apply at all to current development kernels.
Sorry grabbed the wrong one.
drivers/char/sysrq.c renamed from drivers/char/sysrq.c.orig +14 -6
@@ -135,17 +135,22 @@ static struct sysrq_key_op sysrq_crash_o .enable_mask = SYSRQ_ENABLE_DUMP, }; -static void sysrq_handle_reboot (int key,struct tty_struct *tty) +static void sysrq_handle_reboot (int check_mask,int key,struct tty_struct *tty) { +if (check_mask) +printk ("<keyboard-invoked>\n" ); +else +printk ("<non-keyboard-invoked: PID %d COMMAND %s>\n" , + current->pid, current->comm);lockdep_off ();local_irq_enable ();emergency_restart (); }static struct sysrq_key_op sysrq_reboot_op = { - .handler = sysrq_handle_reboot, - .help_msg ="reBoot" , - .action_msg ="Resetting" , - .enable_mask =SYSRQ_ENABLE_BOOT , + .handler_with_mask = sysrq_handle_reboot, + .help_msg ="reBoot" , + .action_msg ="Resetting" , + .enable_mask =SYSRQ_ENABLE_BOOT , };static void sysrq_handle_sync (int key,struct tty_struct *tty)
@@ -509,7 +514,10 @@ void __handle_sysrq(int key, struct tty_if (!check_mask ||sysrq_on_mask (op_p->enable_mask)) {printk ("%s\n" , op_p->action_msg); console_loglevel = orig_log_level; - op_p->handler (key, tty); +if (op_p->handler_with_mask) + op_p->handler_with_mask (check_mask, key, tty); +else + op_p->handler (key, tty); }else {printk ("This sysrq operation is disabled.\n" ); }
include/linux/sysrq.h renamed from include/linux/sysrq.h.orig +1 -0
@@ -32,6 +32,7 @@ struct tty_struct;struct sysrq_key_op {void (*handler)(int ,struct tty_struct *); +void (*handler_with_mask)(int ,int ,struct tty_struct *);char *help_msg;char *action_msg;int enable_mask;