[PATCH] sysrq: showBlockedTasks is sysrq-W
Change SysRq showBlockedTasks from sysrq-X to sysrq-W and show that in the Help message. It was previously done via X, but X is already used for Xmon on ppc & powerpc platforms and this collision needs to be avoided. All callers of register_sysrq_key() are now marked in the sysrq op/key table. I didn't mark 'h' as Help because Help is just printed for any unknown key, such as '?'. Added some omitted sysrq key entries in the sysrq.txt file. Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
7d8952440f
commit
d346cce308
@ -1,6 +1,6 @@
|
|||||||
Linux Magic System Request Key Hacks
|
Linux Magic System Request Key Hacks
|
||||||
Documentation for sysrq.c version 1.15
|
Documentation for sysrq.c
|
||||||
Last update: $Date: 2001/01/28 10:15:59 $
|
Last update: 2007-JAN-06
|
||||||
|
|
||||||
* What is the magic SysRq key?
|
* What is the magic SysRq key?
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -35,7 +35,7 @@ You can set the value in the file by the following command:
|
|||||||
|
|
||||||
Note that the value of /proc/sys/kernel/sysrq influences only the invocation
|
Note that the value of /proc/sys/kernel/sysrq influences only the invocation
|
||||||
via a keyboard. Invocation of any operation via /proc/sysrq-trigger is always
|
via a keyboard. Invocation of any operation via /proc/sysrq-trigger is always
|
||||||
allowed.
|
allowed (by a user with admin privileges).
|
||||||
|
|
||||||
* How do I use the magic SysRq key?
|
* How do I use the magic SysRq key?
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -58,7 +58,7 @@ On PowerPC - Press 'ALT - Print Screen (or F13) - <command key>,
|
|||||||
On other - If you know of the key combos for other architectures, please
|
On other - If you know of the key combos for other architectures, please
|
||||||
let me know so I can add them to this section.
|
let me know so I can add them to this section.
|
||||||
|
|
||||||
On all - write a character to /proc/sysrq-trigger. eg:
|
On all - write a character to /proc/sysrq-trigger. e.g.:
|
||||||
|
|
||||||
echo t > /proc/sysrq-trigger
|
echo t > /proc/sysrq-trigger
|
||||||
|
|
||||||
@ -74,6 +74,8 @@ On all - write a character to /proc/sysrq-trigger. eg:
|
|||||||
|
|
||||||
'c' - Will perform a kexec reboot in order to take a crashdump.
|
'c' - Will perform a kexec reboot in order to take a crashdump.
|
||||||
|
|
||||||
|
'd' - Shows all locks that are held.
|
||||||
|
|
||||||
'o' - Will shut your system off (if configured and supported).
|
'o' - Will shut your system off (if configured and supported).
|
||||||
|
|
||||||
's' - Will attempt to sync all mounted filesystems.
|
's' - Will attempt to sync all mounted filesystems.
|
||||||
@ -87,38 +89,43 @@ On all - write a character to /proc/sysrq-trigger. eg:
|
|||||||
|
|
||||||
'm' - Will dump current memory info to your console.
|
'm' - Will dump current memory info to your console.
|
||||||
|
|
||||||
|
'n' - Used to make RT tasks nice-able
|
||||||
|
|
||||||
'v' - Dumps Voyager SMP processor info to your console.
|
'v' - Dumps Voyager SMP processor info to your console.
|
||||||
|
|
||||||
|
'w' - Dumps tasks that are in uninterruptable (blocked) state.
|
||||||
|
|
||||||
|
'x' - Used by xmon interface on ppc/powerpc platforms.
|
||||||
|
|
||||||
'0'-'9' - Sets the console log level, controlling which kernel messages
|
'0'-'9' - Sets the console log level, controlling which kernel messages
|
||||||
will be printed to your console. ('0', for example would make
|
will be printed to your console. ('0', for example would make
|
||||||
it so that only emergency messages like PANICs or OOPSes would
|
it so that only emergency messages like PANICs or OOPSes would
|
||||||
make it to your console.)
|
make it to your console.)
|
||||||
|
|
||||||
'f' - Will call oom_kill to kill a memory hog process
|
'f' - Will call oom_kill to kill a memory hog process.
|
||||||
|
|
||||||
'e' - Send a SIGTERM to all processes, except for init.
|
'e' - Send a SIGTERM to all processes, except for init.
|
||||||
|
|
||||||
|
'g' - Used by kgdb on ppc platforms.
|
||||||
|
|
||||||
'i' - Send a SIGKILL to all processes, except for init.
|
'i' - Send a SIGKILL to all processes, except for init.
|
||||||
|
|
||||||
'l' - Send a SIGKILL to all processes, INCLUDING init. (Your system
|
'h' - Will display help (actually any other key than those listed
|
||||||
will be non-functional after this.)
|
|
||||||
|
|
||||||
'h' - Will display help ( actually any other key than those listed
|
|
||||||
above will display help. but 'h' is easy to remember :-)
|
above will display help. but 'h' is easy to remember :-)
|
||||||
|
|
||||||
* Okay, so what can I use them for?
|
* Okay, so what can I use them for?
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Well, un'R'aw is very handy when your X server or a svgalib program crashes.
|
Well, un'R'aw is very handy when your X server or a svgalib program crashes.
|
||||||
|
|
||||||
sa'K' (Secure Access Key) is useful when you want to be sure there are no
|
sa'K' (Secure Access Key) is useful when you want to be sure there is no
|
||||||
trojan program is running at console and which could grab your password
|
trojan program running at console which could grab your password
|
||||||
when you would try to login. It will kill all programs on given console
|
when you would try to login. It will kill all programs on given console,
|
||||||
and thus letting you make sure that the login prompt you see is actually
|
thus letting you make sure that the login prompt you see is actually
|
||||||
the one from init, not some trojan program.
|
the one from init, not some trojan program.
|
||||||
IMPORTANT: In its true form it is not a true SAK like the one in a :IMPORTANT
|
IMPORTANT: In its true form it is not a true SAK like the one in a :IMPORTANT
|
||||||
IMPORTANT: c2 compliant system, and it should not be mistaken as :IMPORTANT
|
IMPORTANT: c2 compliant system, and it should not be mistaken as :IMPORTANT
|
||||||
IMPORTANT: such. :IMPORTANT
|
IMPORTANT: such. :IMPORTANT
|
||||||
It seems other find it useful as (System Attention Key) which is
|
It seems others find it useful as (System Attention Key) which is
|
||||||
useful when you want to exit a program that will not let you switch consoles.
|
useful when you want to exit a program that will not let you switch consoles.
|
||||||
(For example, X or a svgalib program.)
|
(For example, X or a svgalib program.)
|
||||||
|
|
||||||
@ -139,8 +146,8 @@ OK or Done message...)
|
|||||||
Again, the unmount (remount read-only) hasn't taken place until you see the
|
Again, the unmount (remount read-only) hasn't taken place until you see the
|
||||||
"OK" and "Done" message appear on the screen.
|
"OK" and "Done" message appear on the screen.
|
||||||
|
|
||||||
The loglevel'0'-'9' is useful when your console is being flooded with
|
The loglevels '0'-'9' are useful when your console is being flooded with
|
||||||
kernel messages you do not want to see. Setting '0' will prevent all but
|
kernel messages you do not want to see. Selecting '0' will prevent all but
|
||||||
the most urgent kernel messages from reaching your console. (They will
|
the most urgent kernel messages from reaching your console. (They will
|
||||||
still be logged if syslogd/klogd are alive, though.)
|
still be logged if syslogd/klogd are alive, though.)
|
||||||
|
|
||||||
@ -152,7 +159,7 @@ processes.
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
That happens to me, also. I've found that tapping shift, alt, and control
|
That happens to me, also. I've found that tapping shift, alt, and control
|
||||||
on both sides of the keyboard, and hitting an invalid sysrq sequence again
|
on both sides of the keyboard, and hitting an invalid sysrq sequence again
|
||||||
will fix the problem. (ie, something like alt-sysrq-z). Switching to another
|
will fix the problem. (i.e., something like alt-sysrq-z). Switching to another
|
||||||
virtual console (ALT+Fn) and then back again should also help.
|
virtual console (ALT+Fn) and then back again should also help.
|
||||||
|
|
||||||
* I hit SysRq, but nothing seems to happen, what's wrong?
|
* I hit SysRq, but nothing seems to happen, what's wrong?
|
||||||
@ -174,11 +181,11 @@ handler function you will use, B) a help_msg string, that will print when SysRQ
|
|||||||
prints help, and C) an action_msg string, that will print right before your
|
prints help, and C) an action_msg string, that will print right before your
|
||||||
handler is called. Your handler must conform to the prototype in 'sysrq.h'.
|
handler is called. Your handler must conform to the prototype in 'sysrq.h'.
|
||||||
|
|
||||||
After the sysrq_key_op is created, you can call the macro
|
After the sysrq_key_op is created, you can call the kernel function
|
||||||
register_sysrq_key(int key, struct sysrq_key_op *op_p) that is defined in
|
register_sysrq_key(int key, struct sysrq_key_op *op_p); this will
|
||||||
sysrq.h, this will register the operation pointed to by 'op_p' at table
|
register the operation pointed to by 'op_p' at table key 'key',
|
||||||
key 'key', if that slot in the table is blank. At module unload time, you must
|
if that slot in the table is blank. At module unload time, you must call
|
||||||
call the macro unregister_sysrq_key(int key, struct sysrq_key_op *op_p), which
|
the function unregister_sysrq_key(int key, struct sysrq_key_op *op_p), which
|
||||||
will remove the key op pointed to by 'op_p' from the key 'key', if and only if
|
will remove the key op pointed to by 'op_p' from the key 'key', if and only if
|
||||||
it is currently registered in that slot. This is in case the slot has been
|
it is currently registered in that slot. This is in case the slot has been
|
||||||
overwritten since you registered it.
|
overwritten since you registered it.
|
||||||
@ -186,15 +193,12 @@ overwritten since you registered it.
|
|||||||
The Magic SysRQ system works by registering key operations against a key op
|
The Magic SysRQ system works by registering key operations against a key op
|
||||||
lookup table, which is defined in 'drivers/char/sysrq.c'. This key table has
|
lookup table, which is defined in 'drivers/char/sysrq.c'. This key table has
|
||||||
a number of operations registered into it at compile time, but is mutable,
|
a number of operations registered into it at compile time, but is mutable,
|
||||||
and 4 functions are exported for interface to it: __sysrq_lock_table,
|
and 2 functions are exported for interface to it:
|
||||||
__sysrq_unlock_table, __sysrq_get_key_op, and __sysrq_put_key_op. The
|
register_sysrq_key and unregister_sysrq_key.
|
||||||
functions __sysrq_swap_key_ops and __sysrq_swap_key_ops_nolock are defined
|
Of course, never ever leave an invalid pointer in the table. I.e., when
|
||||||
in the header itself, and the REGISTER and UNREGISTER macros are built from
|
your module that called register_sysrq_key() exits, it must call
|
||||||
these. More complex (and dangerous!) manipulations of the table are possible
|
unregister_sysrq_key() to clean up the sysrq key table entry that it used.
|
||||||
using these functions, but you must be careful to always lock the table before
|
Null pointers in the table are always safe. :)
|
||||||
you read or write from it, and to unlock it again when you are done. (And of
|
|
||||||
course, to never ever leave an invalid pointer in the table). Null pointers in
|
|
||||||
the table are always safe :)
|
|
||||||
|
|
||||||
If for some reason you feel the need to call the handle_sysrq function from
|
If for some reason you feel the need to call the handle_sysrq function from
|
||||||
within a function called by handle_sysrq, you must be aware that you are in
|
within a function called by handle_sysrq, you must be aware that you are in
|
||||||
|
@ -215,7 +215,7 @@ static void sysrq_handle_showstate_blocked(int key, struct tty_struct *tty)
|
|||||||
}
|
}
|
||||||
static struct sysrq_key_op sysrq_showstate_blocked_op = {
|
static struct sysrq_key_op sysrq_showstate_blocked_op = {
|
||||||
.handler = sysrq_handle_showstate_blocked,
|
.handler = sysrq_handle_showstate_blocked,
|
||||||
.help_msg = "showBlockedTasks",
|
.help_msg = "shoW-blocked-tasks",
|
||||||
.action_msg = "Show Blocked State",
|
.action_msg = "Show Blocked State",
|
||||||
.enable_mask = SYSRQ_ENABLE_DUMP,
|
.enable_mask = SYSRQ_ENABLE_DUMP,
|
||||||
};
|
};
|
||||||
@ -315,15 +315,16 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
|
|||||||
&sysrq_loglevel_op, /* 9 */
|
&sysrq_loglevel_op, /* 9 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Don't use for system provided sysrqs, it is handled specially on
|
* a: Don't use for system provided sysrqs, it is handled specially on
|
||||||
* sparc and will never arrive
|
* sparc and will never arrive.
|
||||||
*/
|
*/
|
||||||
NULL, /* a */
|
NULL, /* a */
|
||||||
&sysrq_reboot_op, /* b */
|
&sysrq_reboot_op, /* b */
|
||||||
&sysrq_crashdump_op, /* c */
|
&sysrq_crashdump_op, /* c & ibm_emac driver debug */
|
||||||
&sysrq_showlocks_op, /* d */
|
&sysrq_showlocks_op, /* d */
|
||||||
&sysrq_term_op, /* e */
|
&sysrq_term_op, /* e */
|
||||||
&sysrq_moom_op, /* f */
|
&sysrq_moom_op, /* f */
|
||||||
|
/* g: May be registered by ppc for kgdb */
|
||||||
NULL, /* g */
|
NULL, /* g */
|
||||||
NULL, /* h */
|
NULL, /* h */
|
||||||
&sysrq_kill_op, /* i */
|
&sysrq_kill_op, /* i */
|
||||||
@ -332,18 +333,19 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
|
|||||||
NULL, /* l */
|
NULL, /* l */
|
||||||
&sysrq_showmem_op, /* m */
|
&sysrq_showmem_op, /* m */
|
||||||
&sysrq_unrt_op, /* n */
|
&sysrq_unrt_op, /* n */
|
||||||
/* This will often be registered as 'Off' at init time */
|
/* o: This will often be registered as 'Off' at init time */
|
||||||
NULL, /* o */
|
NULL, /* o */
|
||||||
&sysrq_showregs_op, /* p */
|
&sysrq_showregs_op, /* p */
|
||||||
NULL, /* q */
|
NULL, /* q */
|
||||||
&sysrq_unraw_op, /* r */
|
&sysrq_unraw_op, /* r */
|
||||||
&sysrq_sync_op, /* s */
|
&sysrq_sync_op, /* s */
|
||||||
&sysrq_showstate_op, /* t */
|
&sysrq_showstate_op, /* t */
|
||||||
&sysrq_mountro_op, /* u */
|
&sysrq_mountro_op, /* u */
|
||||||
/* May be assigned at init time by SMP VOYAGER */
|
/* v: May be registered at init time by SMP VOYAGER */
|
||||||
NULL, /* v */
|
NULL, /* v */
|
||||||
NULL, /* w */
|
&sysrq_showstate_blocked_op, /* w */
|
||||||
&sysrq_showstate_blocked_op, /* x */
|
/* x: May be registered on ppc/powerpc for xmon */
|
||||||
|
NULL, /* x */
|
||||||
NULL, /* y */
|
NULL, /* y */
|
||||||
NULL /* z */
|
NULL /* z */
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user