I'm looking real close at this right now, and there are a couple of
problems, and a simple, but ugly solution.
The entire reason that console_loglevel is touched _after_ the call to
the second level handler is actually for the loglevel handler's
printout. I was trying to minimize change in the display, but horked it.
Here is the problem.
SysRq events use action messages which get printed by the top level
handler before calling the second level handler, the call line is:
orig_log_level = console_loglevel;
console_loglevel = 7;
printk(KERN_INFO "SysRq : ");
op_p = __sysrq_get_key_op(key);
...
printk ("%s", op_p->action_msg);
op_p->handler(key, pt_regs, kbd, tty);
...
console_loglevel = orig_log_level;
The killer here is the fact that the action message format string does
not carry a newline, allowing people to register strings which leave the
printk state open. The loglevel handler then fills in the loglevel, and
closes the printk state.
There was a time when I thought that was a good idea.
Go ahead, laugh.
Anyway, that sort of unresolved state is bad, and is the source of all
of this song and dance. I think the right answer is to force handlers to
open their own calls to printk, and to keep whats going on with the
console_loglevel and printk buffer nice and clean.
The cost is that messages like this:
SysRq : Loglevel switched to X
will have to become more like this:
SysRq : Loglevel
Loglevel switched to X
Again, appologies, and a patch is forthcoming.
-- Crutcher <crutcher@datastacks.com> GCS d--- s+:>+:- a-- C++++$ UL++++$ L+++$>++++ !E PS+++ PE Y+ PGP+>++++ R-(+++) !tv(+++) b+(++++) G+ e>++++ h+>++ r* y+>*$ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/