public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Paulo Marques <pmarques@grupopie.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Roman Zippel <zippel@linux-m68k.org>,
	Andrew Morton <akpm@osdl.org>,
	pavel@ucw.cz, roubert@df.lth.se, stern@rowland.harvard.edu,
	linux-input@atrey.karlin.mff.cuni.cz,
	linux-kernel@vger.kernel.org
Subject: Re: [patch] Re: Magic Alt-SysRq change in 2.6.18-rc1
Date: Wed, 12 Jul 2006 23:21:35 +0100	[thread overview]
Message-ID: <44B575EF.1080409@grupopie.com> (raw)
In-Reply-To: <d120d5000607121305g5fa5bda2v2038ecac893f4c83@mail.gmail.com>

Dmitry Torokhov wrote:
> Hi,
> 
> On 7/12/06, Paulo Marques <pmarques@grupopie.com> wrote:
> 
>> Ok, I've tested it this time and this new one works as expected. I can
>> use any of the sequences discussed and I can produce a SysRq every time.
>> Still, just pressing SysRq or any sequence that doesn't start with
>> "press Alt -> press SysRq" seems unaffected.
> 
> I like this, however:
> 
>> +       if (keycode == KEY_SYSRQ) {
>> +               if (down) {
>> +                       if(sysrq_alt)
>> +                               sysrq_down = down;
>> +               } else {
>> +                       sysrq_down = 0;
> 
> Are you sure? This will set sysrq_down only if ALT has already been
> pressed. If SysRq does not autorepeat and it is pressed first we won't
> ever see sysrq_down. Am I missing something?

This was done on purpose, yes. My first thought was to allow any order, 
but this could cause strange complications like: if I just press 
PrintScreen when is it ok to forward that keypress before I press Alt? 
The Alt afterwards arrives to late to not have messed the user space 
application already.

Anyway, none of the sequences posted required this, and it is more 
intuitive to press Alt first anyway.

>> +
>> +       if (sysrq_down && sysrq_alt)
>> +               sysrq_active = 1;
>> +       else if (!sysrq_down && !sysrq_alt)
>> +               sysrq_active = 0;
>> +
>> +       if (keycode == KEY_SYSRQ && sysrq_active)
>> +               return;
> 
> What about alt? I think that "if (...) sysrq_active = 1;" statement
> should go down, below handle_sysrq block.

It can not go down, or when you press Alt and then SysRq, the first 
SysRq down event will get through without returning.

alt is handled a little higher in that function outside the #IFDEF. This 
is because emulate_raw should work even if we don't support magic sysrq.

The logic here is pretty simple: if we press Alt and then SysRq we enter 
sysrq_active mode. We only come out of that mode when we release both 
keys. Releasing any one of them individually is fine.

Any KEY_SYSRQ repetitions or releases while on this mode are not 
processed any further.

Oops, I just realised that if I release Alt first and then SysRq, the 
SysRq release will get through because at that point we're already out 
of sysrq_active mode. This should be easy to fix, though. If this is a 
problem, I can send a new patch tomorrow (with some more comments in 
there, too).

>> +
>> +       if (sysrq_active && down && !rep) {
>>                handle_sysrq(kbd_sysrq_xlate[keycode], regs, tty);
>>                return;
>>        }
> 
> We also need to check if emulate_raw() needs to be adjusted...

I looked at that very quickly, to be honest, but couldn't understand it 
entirely. This code:

1087 if (keycode == KEY_SYSRQ && sysrq_alt) {
1088   put_queue(vc, 0x54 | up_flag);
1089   return 0;
1090 }

seems to be supposed to cancel the Alt "press" by sending a Alt 
"release" to handle the sequence press alt -> press sysrq without 
affecting the application. However, this is just a guess. I couldn't 
find out what that magic 0x54 meant or why this would be enough wether 
we pressed the left or the right alt...

Then there are other things that I don't understand there: I don't see 
any code to filter out the keys we press ('T','P', etc.) while using 
SysRq magic if we are in raw mode. emulate_raw will happily call 
put_queue on them before we have a chance to bail out.

Maybe we should just stop calling emulate_raw while sysrq_active is 
active. This way, after we press Alt + SysRq, every keypress would be 
processed as a magic sysrq and not handled by any other code until we 
release both keys.

Does this sound reasonable?

-- 
Paulo Marques - www.grupopie.com

  reply	other threads:[~2006-07-12 22:21 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-09 21:06 Magic Alt-SysRq change in 2.6.18-rc1 Alan Stern
2006-07-10  0:22 ` Andrew Morton
2006-07-10  1:12 ` H. Peter Anvin
2006-07-10  3:08   ` Joshua Hudson
2006-07-10  9:44 ` Fredrik Roubert
2006-07-10  9:59   ` Michael Buesch
2006-07-10 21:59   ` Roman Zippel
2006-07-11 12:41     ` Pavel Machek
2006-07-11 22:21       ` Roman Zippel
2006-07-11 22:42         ` [patch] " Pavel Machek
2006-07-11 23:33           ` Roman Zippel
2006-07-11 23:50             ` Andrew Morton
2006-07-12  0:16               ` Roman Zippel
2006-07-12  0:37                 ` Andrew Morton
2006-07-12  0:52                   ` Roman Zippel
2006-07-12  1:36                     ` Andrew Morton
2006-07-12  8:08                       ` Pavel Machek
2006-07-12  9:07                       ` Roman Zippel
2006-07-12 13:26                         ` Paulo Marques
2006-07-12 19:42                           ` Paulo Marques
2006-07-12 20:05                             ` Dmitry Torokhov
2006-07-12 22:21                               ` Paulo Marques [this message]
2006-07-12 22:44                                 ` Pavel Machek
2006-07-13 18:48                                 ` Dmitry Torokhov
2006-07-12  7:26                 ` Fredrik Roubert
2006-07-12  9:09                   ` Roman Zippel
2006-07-12 15:12                   ` Randy.Dunlap
2006-07-11 12:42     ` Pavel Machek
2006-07-11 13:54     ` Alan Stern
     [not found] <6wOHw-5gl-23@gated-at.bofh.it>
     [not found] ` <6x0yX-5An-17@gated-at.bofh.it>
     [not found]   ` <6xc78-6gi-15@gated-at.bofh.it>
     [not found]     ` <6xyhf-5Fq-1@gated-at.bofh.it>
     [not found]       ` <6xyU6-6Hn-63@gated-at.bofh.it>
     [not found]         ` <6xzdl-75B-13@gated-at.bofh.it>
     [not found]           ` <6xzZO-8gU-23@gated-at.bofh.it>
     [not found]             ` <6xA9p-8ti-7@gated-at.bofh.it>
     [not found]               ` <6xACo-Op-1@gated-at.bofh.it>
     [not found]                 ` <6xAVM-1b9-5@gated-at.bofh.it>
     [not found]                   ` <6xBfh-1yd-29@gated-at.bofh.it>
     [not found]                     ` <6xBRQ-2v4-3@gated-at.bofh.it>
     [not found]                       ` <6xITm-4td-17@gated-at.bofh.it>
     [not found]                         ` <6xMX0-2bX-21@gated-at.bofh.it>
2006-07-12 22:06                           ` [patch] " Bodo Eggert
2006-07-12 22:35                             ` Paulo Marques

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=44B575EF.1080409@grupopie.com \
    --to=pmarques@grupopie.com \
    --cc=akpm@osdl.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=linux-input@atrey.karlin.mff.cuni.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pavel@ucw.cz \
    --cc=roubert@df.lth.se \
    --cc=stern@rowland.harvard.edu \
    --cc=zippel@linux-m68k.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox