vt:tackle kbd_table
Keyboard struct lifetime is easy, but the locking is not and is completely ignored by the existing code. Tackle this one head on - Make the kbd_table private so we can run down all direct users - Hoick the relevant ioctl handlers into the keyboard layer - Lock them with the keyboard lock so they don't change mid keypress - Add helpers for things like console stop/start so we isolate the poking around properly - Tweak the braille console so it still builds There are a couple of FIXME locking cases left for ioctls that are so hideous they should be addressed in a later patch. After this patch the kbd_table is private and all the keyboard jiggery pokery is in one place. This update fixes speakup and also a memory leak in the original. Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Šī revīzija ir iekļauta:

revīziju iesūtīja
Greg Kroah-Hartman

vecāks
0fb8379dab
revīzija
079c9534a9
@@ -244,16 +244,13 @@ static int keyboard_notifier_call(struct notifier_block *blk,
|
||||
|
||||
switch (val) {
|
||||
case KVAL(K_CAPS):
|
||||
on_off = vc_kbd_led(kbd_table + fg_console,
|
||||
VC_CAPSLOCK);
|
||||
on_off = vt_get_leds(fg_console, VC_CAPSLOCK);
|
||||
break;
|
||||
case KVAL(K_NUM):
|
||||
on_off = vc_kbd_led(kbd_table + fg_console,
|
||||
VC_NUMLOCK);
|
||||
on_off = vt_get_leds(fg_console, VC_NUMLOCK);
|
||||
break;
|
||||
case KVAL(K_HOLD):
|
||||
on_off = vc_kbd_led(kbd_table + fg_console,
|
||||
VC_SCROLLOCK);
|
||||
on_off = vt_get_leds(fg_console, VC_SCROLLOCK);
|
||||
break;
|
||||
}
|
||||
if (on_off == 1)
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user