path: root/drivers/staging/speakup
diff options
authorAlan Cox <alan@linux.intel.com>2012-02-28 14:49:23 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-03-08 10:50:35 -0800
commit079c9534a96da9a85a2a2f9715851050fbfbf749 (patch)
tree0e3782ff6d341f38c6f0b3840cb3c8f2bc922df8 /drivers/staging/speakup
parent0fb8379dab9f97e4c56de8f9ea772c10eda27561 (diff)
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>
Diffstat (limited to 'drivers/staging/speakup')
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/staging/speakup/main.c b/drivers/staging/speakup/main.c
index c7b03f0ef2d..92b34e29ad0 100644
--- a/drivers/staging/speakup/main.c
+++ b/drivers/staging/speakup/main.c
@@ -1731,15 +1731,15 @@ static void do_handle_spec(struct vc_data *vc, u_char value, char up_flag)
switch (value) {
case KVAL(K_CAPS):
label = msg_get(MSG_KEYNAME_CAPSLOCK);
- on_off = (vc_kbd_led(kbd_table + vc->vc_num, VC_CAPSLOCK));
+ on_off = vt_get_leds(fg_console, VC_CAPSLOCK);
case KVAL(K_NUM):
label = msg_get(MSG_KEYNAME_NUMLOCK);
- on_off = (vc_kbd_led(kbd_table + vc->vc_num, VC_NUMLOCK));
+ on_off = vt_get_leds(fg_console, VC_NUMLOCK);
case KVAL(K_HOLD):
label = msg_get(MSG_KEYNAME_SCROLLLOCK);
- on_off = (vc_kbd_led(kbd_table + vc->vc_num, VC_SCROLLOCK));
+ on_off = vt_get_leds(fg_console, VC_SCROLLOCK);
if (speakup_console[vc->vc_num])
speakup_console[vc->vc_num]->tty_stopped = on_off;
@@ -2020,7 +2020,7 @@ speakup_key(struct vc_data *vc, int shift_state, int keycode, u_short keysym,
if (type >= 0xf0)
type -= 0xf0;
if (type == KT_PAD
- && (vc_kbd_led(kbd_table + fg_console, VC_NUMLOCK))) {
+ && (vt_get_leds(fg_console, VC_NUMLOCK))) {
if (up_flag) {
spk_keydown = 0;
goto out;