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.
Unified · Split
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | Linux Magic System Request Key Hacks |
| 2 | −Documentation for sysrq.c version 1.15 | |
| 3 | −Last update: $Date: 2001/01/28 10:15:59 $ | |
| 2 | +Documentation for sysrq.c | |
| 3 | +Last update: 2007-JAN-06 | |
| 4 | 4 | |
| 5 | 5 | * What is the magic SysRq key? |
| 6 | 6 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| @@ -35,7 +35,7 @@ You can set the value in the file by the following command: · 28 unmodified lines | ||
| 35 | 35 | |
| 36 | 36 | Note that the value of /proc/sys/kernel/sysrq influences only the invocation |
| 37 | 37 | via a keyboard. Invocation of any operation via /proc/sysrq-trigger is always |
| 38 | −allowed. | |
| 38 | +allowed (by a user with admin privileges). | |
| 39 | 39 | |
| 40 | 40 | * How do I use the magic SysRq key? |
| 41 | 41 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| @@ -58,7 +58,7 @@ On PowerPC - Press 'ALT - Print Screen (or F13) - <command key>, · 16 unmodified lines | ||
| 58 | 58 | On other - If you know of the key combos for other architectures, please |
| 59 | 59 | let me know so I can add them to this section. |
| 60 | 60 | |
| 61 | −On all - write a character to /proc/sysrq-trigger. eg: | |
| 61 | +On all - write a character to /proc/sysrq-trigger. e.g.: | |
| 62 | 62 | |
| 63 | 63 | echo t > /proc/sysrq-trigger |
| 64 | 64 | |
| @@ -74,6 +74,8 @@ On all - write a character to /proc/sysrq-trigger. eg: · 9 unmodified lines | ||
| 74 | 74 | |
| 75 | 75 | 'c' - Will perform a kexec reboot in order to take a crashdump. |
| 76 | 76 | |
| 77 | +'d' - Shows all locks that are held. | |
| 78 | + | |
| 77 | 79 | 'o' - Will shut your system off (if configured and supported). |
| 78 | 80 | |
| 79 | 81 | 's' - Will attempt to sync all mounted filesystems. |
| @@ -87,38 +89,43 @@ On all - write a character to /proc/sysrq-trigger. eg: · 7 unmodified lines | ||
| 87 | 89 | |
| 88 | 90 | 'm' - Will dump current memory info to your console. |
| 89 | 91 | |
| 92 | +'n' - Used to make RT tasks nice-able | |
| 93 | + | |
| 90 | 94 | 'v' - Dumps Voyager SMP processor info to your console. |
| 91 | 95 | |
| 96 | +'w' - Dumps tasks that are in uninterruptable (blocked) state. | |
| 97 | + | |
| 98 | +'x' - Used by xmon interface on ppc/powerpc platforms. | |
| 99 | + | |
| 92 | 100 | '0'-'9' - Sets the console log level, controlling which kernel messages |
| 93 | 101 | will be printed to your console. ('0', for example would make |
| 94 | 102 | it so that only emergency messages like PANICs or OOPSes would |
| 95 | 103 | make it to your console.) |
| 96 | 104 | |
| 97 | −'f' - Will call oom_kill to kill a memory hog process | |
| 105 | +'f' - Will call oom_kill to kill a memory hog process. | |
| 98 | 106 | |
| 99 | 107 | 'e' - Send a SIGTERM to all processes, except for init. |
| 100 | 108 | |
| 101 | −'i' - Send a SIGKILL to all processes, except for init. | |
| 109 | +'g' - Used by kgdb on ppc platforms. | |
| 102 | 110 | |
| 103 | −'l' - Send a SIGKILL to all processes, INCLUDING init. (Your system | |
| 104 | − will be non-functional after this.) | |
| 111 | +'i' - Send a SIGKILL to all processes, except for init. | |
| 105 | 112 | |
| 106 | −'h' - Will display help ( actually any other key than those listed | |
| 113 | +'h' - Will display help (actually any other key than those listed | |
| 107 | 114 | above will display help. but 'h' is easy to remember :-) |
| 108 | 115 | |
| 109 | 116 | * Okay, so what can I use them for? |
| 110 | 117 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 111 | 118 | Well, un'R'aw is very handy when your X server or a svgalib program crashes. |
| 112 | 119 | |
| 113 | −sa'K' (Secure Access Key) is useful when you want to be sure there are no | |
| 114 | −trojan program is running at console and which could grab your password | |
| 115 | −when you would try to login. It will kill all programs on given console | |
| 116 | −and thus letting you make sure that the login prompt you see is actually | |
| 120 | +sa'K' (Secure Access Key) is useful when you want to be sure there is no | |
| 121 | +trojan program running at console which could grab your password | |
| 122 | +when you would try to login. It will kill all programs on given console, | |
| 123 | +thus letting you make sure that the login prompt you see is actually | |
| 117 | 124 | the one from init, not some trojan program. |
| 118 | 125 | IMPORTANT: In its true form it is not a true SAK like the one in a :IMPORTANT |
| 119 | 126 | IMPORTANT: c2 compliant system, and it should not be mistaken as :IMPORTANT |
| 120 | 127 | IMPORTANT: such. :IMPORTANT |
| 121 | − It seems other find it useful as (System Attention Key) which is | |
| 128 | + It seems others find it useful as (System Attention Key) which is | |
| 122 | 129 | useful when you want to exit a program that will not let you switch consoles. |
| 123 | 130 | (For example, X or a svgalib program.) |
| 124 | 131 | |
| @@ -139,8 +146,8 @@ OK or Done message...) · 14 unmodified lines | ||
| 139 | 146 | Again, the unmount (remount read-only) hasn't taken place until you see the |
| 140 | 147 | "OK" and "Done" message appear on the screen. |
| 141 | 148 | |
| 142 | −The loglevel'0'-'9' is useful when your console is being flooded with | |
| 143 | −kernel messages you do not want to see. Setting '0' will prevent all but | |
| 149 | +The loglevels '0'-'9' are useful when your console is being flooded with | |
| 150 | +kernel messages you do not want to see. Selecting '0' will prevent all but | |
| 144 | 151 | the most urgent kernel messages from reaching your console. (They will |
| 145 | 152 | still be logged if syslogd/klogd are alive, though.) |
| 146 | 153 | |
| @@ -152,7 +159,7 @@ processes. · 5 unmodified lines | ||
| 152 | 159 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 153 | 160 | That happens to me, also. I've found that tapping shift, alt, and control |
| 154 | 161 | on both sides of the keyboard, and hitting an invalid sysrq sequence again |
| 155 | −will fix the problem. (ie, something like alt-sysrq-z). Switching to another | |
| 162 | +will fix the problem. (i.e., something like alt-sysrq-z). Switching to another | |
| 156 | 163 | virtual console (ALT+Fn) and then back again should also help. |
| 157 | 164 | |
| 158 | 165 | * 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 · 15 unmodified lines | ||
| 174 | 181 | prints help, and C) an action_msg string, that will print right before your |
| 175 | 182 | handler is called. Your handler must conform to the prototype in 'sysrq.h'. |
| 176 | 183 | |
| 177 | −After the sysrq_key_op is created, you can call the macro | |
| 178 | −register_sysrq_key(int key, struct sysrq_key_op *op_p) that is defined in | |
| 179 | −sysrq.h, this will register the operation pointed to by 'op_p' at table | |
| 180 | −key 'key', if that slot in the table is blank. At module unload time, you must | |
| 181 | −call the macro unregister_sysrq_key(int key, struct sysrq_key_op *op_p), which | |
| 184 | +After the sysrq_key_op is created, you can call the kernel function | |
| 185 | +register_sysrq_key(int key, struct sysrq_key_op *op_p); this will | |
| 186 | +register the operation pointed to by 'op_p' at table key 'key', | |
| 187 | +if that slot in the table is blank. At module unload time, you must call | |
| 188 | +the function unregister_sysrq_key(int key, struct sysrq_key_op *op_p), which | |
| 182 | 189 | will remove the key op pointed to by 'op_p' from the key 'key', if and only if |
| 183 | 190 | it is currently registered in that slot. This is in case the slot has been |
| 184 | 191 | overwritten since you registered it. |
| @@ -186,15 +193,12 @@ overwritten since you registered it. · 1 unmodified line | ||
| 186 | 193 | The Magic SysRQ system works by registering key operations against a key op |
| 187 | 194 | lookup table, which is defined in 'drivers/char/sysrq.c'. This key table has |
| 188 | 195 | a number of operations registered into it at compile time, but is mutable, |
| 189 | −and 4 functions are exported for interface to it: __sysrq_lock_table, | |
| 190 | −__sysrq_unlock_table, __sysrq_get_key_op, and __sysrq_put_key_op. The | |
| 191 | −functions __sysrq_swap_key_ops and __sysrq_swap_key_ops_nolock are defined | |
| 192 | −in the header itself, and the REGISTER and UNREGISTER macros are built from | |
| 193 | −these. More complex (and dangerous!) manipulations of the table are possible | |
| 194 | −using these functions, but you must be careful to always lock the table before | |
| 195 | −you read or write from it, and to unlock it again when you are done. (And of | |
| 196 | −course, to never ever leave an invalid pointer in the table). Null pointers in | |
| 197 | −the table are always safe :) | |
| 196 | +and 2 functions are exported for interface to it: | |
| 197 | + register_sysrq_key and unregister_sysrq_key. | |
| 198 | +Of course, never ever leave an invalid pointer in the table. I.e., when | |
| 199 | +your module that called register_sysrq_key() exits, it must call | |
| 200 | +unregister_sysrq_key() to clean up the sysrq key table entry that it used. | |
| 201 | +Null pointers in the table are always safe. :) | |
| 198 | 202 | |
| 199 | 203 | If for some reason you feel the need to call the handle_sysrq function from |
| 200 | 204 | 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) · 214 unmodified lines | ||
| 215 | 215 | } |
| 216 | 216 | static struct sysrq_key_op sysrq_showstate_blocked_op = { |
| 217 | 217 | .handler = sysrq_handle_showstate_blocked, |
| 218 | − .help_msg = "showBlockedTasks", | |
| 218 | + .help_msg = "shoW-blocked-tasks", | |
| 219 | 219 | .action_msg = "Show Blocked State", |
| 220 | 220 | .enable_mask = SYSRQ_ENABLE_DUMP, |
| 221 | 221 | }; |
| @@ -315,15 +315,16 @@ static struct sysrq_key_op *sysrq_key_table[36] = { · 93 unmodified lines | ||
| 315 | 315 | &sysrq_loglevel_op, /* 9 */ |
| 316 | 316 | |
| 317 | 317 | /* |
| 318 | − * Don't use for system provided sysrqs, it is handled specially on | |
| 319 | − * sparc and will never arrive | |
| 318 | + * a: Don't use for system provided sysrqs, it is handled specially on | |
| 319 | + * sparc and will never arrive. | |
| 320 | 320 | */ |
| 321 | 321 | NULL, /* a */ |
| 322 | 322 | &sysrq_reboot_op, /* b */ |
| 323 | − &sysrq_crashdump_op, /* c */ | |
| 323 | + &sysrq_crashdump_op, /* c & ibm_emac driver debug */ | |
| 324 | 324 | &sysrq_showlocks_op, /* d */ |
| 325 | 325 | &sysrq_term_op, /* e */ |
| 326 | 326 | &sysrq_moom_op, /* f */ |
| 327 | + /* g: May be registered by ppc for kgdb */ | |
| 327 | 328 | NULL, /* g */ |
| 328 | 329 | NULL, /* h */ |
| 329 | 330 | &sysrq_kill_op, /* i */ |
| @@ -332,18 +333,19 @@ static struct sysrq_key_op *sysrq_key_table[36] = { · 2 unmodified lines | ||
| 332 | 333 | NULL, /* l */ |
| 333 | 334 | &sysrq_showmem_op, /* m */ |
| 334 | 335 | &sysrq_unrt_op, /* n */ |
| 335 | − /* This will often be registered as 'Off' at init time */ | |
| 336 | + /* o: This will often be registered as 'Off' at init time */ | |
| 336 | 337 | NULL, /* o */ |
| 337 | 338 | &sysrq_showregs_op, /* p */ |
| 338 | 339 | NULL, /* q */ |
| 339 | − &sysrq_unraw_op, /* r */ | |
| 340 | + &sysrq_unraw_op, /* r */ | |
| 340 | 341 | &sysrq_sync_op, /* s */ |
| 341 | 342 | &sysrq_showstate_op, /* t */ |
| 342 | 343 | &sysrq_mountro_op, /* u */ |
| 343 | − /* May be assigned at init time by SMP VOYAGER */ | |
| 344 | + /* v: May be registered at init time by SMP VOYAGER */ | |
| 344 | 345 | NULL, /* v */ |
| 345 | − NULL, /* w */ | |
| 346 | − &sysrq_showstate_blocked_op, /* x */ | |
| 346 | + &sysrq_showstate_blocked_op, /* w */ | |
| 347 | + /* x: May be registered on ppc/powerpc for xmon */ | |
| 348 | + NULL, /* x */ | |
| 347 | 349 | NULL, /* y */ |
| 348 | 350 | NULL /* z */ |
| 349 | 351 | }; |