lkml.org 
[lkml]   [2006]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [patch] Re: Magic Alt-SysRq change in 2.6.18-rc1
Roman Zippel wrote:
> On Tue, 11 Jul 2006, Andrew Morton wrote:
> [...]
>> What, actually, is the problem?
>
> It changes the behaviour, it will annoy the hell out of people like me who
> have to deal with different kernels and expect this to just work. :-(
> Since then has it been acceptable to just go ahead and break stuff? This
> problem doesn't really look unsolvable, so why is my request to fix the
> damn thing so unreasonable?

Ok, what about this one?

I don't have time to test it (it compiles, at least), but it seems the
logic is pretty clear: once you have pressed both "Alt" and "SysRq"
sysrq mode becomes active until you release *both* keys. In this mode
any regular key press triggers handle_sysrq.
This allows for all the combinations mentioned before in this thread and
makes the logic simpler, IMHO.

--
Paulo Marques - www.grupopie.com

Pointy-Haired Boss: I don't see anything that could stand in our way.
Dilbert: Sanity? Reality? The laws of physics?
Subject: allow the old behavior of Alt+SysRq+<key>

This should allow any order of Alt + SysRq press followed by any key
while still holding one of SysRq or Alt.

Signed-off-by: Paulo Marques <pmarques@grupopie.com>

--- ./drivers/char/keyboard.c.orig 2006-07-12 13:03:32.000000000 +0100
+++ ./drivers/char/keyboard.c 2006-07-12 14:18:52.000000000 +0100
@@ -150,7 +150,7 @@ unsigned char kbd_sysrq_xlate[KEY_MAX +
"230\177\000\000\213\214\000\000\000\000\000\000\000\000\000\000" /* 0x50 - 0x5f */
"\r\000/"; /* 0x60 - 0x6f */
static int sysrq_down;
-static int sysrq_alt_use;
+static int sysrq_active;
#endif
static int sysrq_alt;

@@ -1164,16 +1164,17 @@ static void kbd_keycode(unsigned int key
printk(KERN_WARNING "keyboard.c: can't emulate rawmode for keycode %d\n", keycode);

#ifdef CONFIG_MAGIC_SYSRQ /* Handle the SysRq Hack */
- if (keycode == KEY_SYSRQ && (sysrq_down || (down == 1 && sysrq_alt))) {
- if (!sysrq_down) {
- sysrq_down = down;
- sysrq_alt_use = sysrq_alt;
- }
+ if (keycode == KEY_SYSRQ) {
+ sysrq_down = down;
return;
}
- if (sysrq_down && !down && keycode == sysrq_alt_use)
- sysrq_down = 0;
- if (sysrq_down && down && !rep) {
+
+ if (sysrq_down && sysrq_alt)
+ sysrq_active = 1;
+ else if (!sysrq_down && !sysrq_alt)
+ sysrq_active = 0;
+
+ if (sysrq_active && down && !rep) {
handle_sysrq(kbd_sysrq_xlate[keycode], regs, tty);
return;
}
\
 
 \ /
  Last update: 2006-07-12 15:29    [W:0.090 / U:0.404 seconds]
©2003-2014 Jasper Spaans. Advertise on this site