PATCH 2.4.0.10.4: keyboard cleanup try 2

From: Jeff Garzik (jgarzik@mandrakesoft.com)
Date: Thu Oct 19 2000 - 17:23:40 EST


Updated per Andrea's suggestions...

-- 
Jeff Garzik                    | The difference between laziness and
Building 1024                  | prioritization is the end result.
MandrakeSoft                   |

diff -urN vanilla/linux-2.4.0-test10-pre4/drivers/char/pc_keyb.c linux_2_3/drivers/char/pc_keyb.c --- vanilla/linux-2.4.0-test10-pre4/drivers/char/pc_keyb.c Wed Oct 18 19:03:57 2000 +++ linux_2_3/drivers/char/pc_keyb.c Wed Oct 18 20:20:14 2000 @@ -65,7 +65,7 @@ static void __aux_write_ack(int val); #endif -spinlock_t kbd_controller_lock = SPIN_LOCK_UNLOCKED; +static spinlock_t kbd_controller_lock = SPIN_LOCK_UNLOCKED; static unsigned char handle_kbd_event(void); /* used only by send_data - set by keyboard_interrupt */ @@ -448,7 +448,7 @@ unsigned char status = kbd_read_status(); unsigned int work = 10000; - while (status & KBD_STAT_OBF) { + while ((--work > 0) && (status & KBD_STAT_OBF)) { unsigned char scancode; scancode = kbd_read_input(); @@ -467,13 +467,10 @@ } status = kbd_read_status(); - - if (!--work) { - printk(KERN_ERR "pc_keyb: controller jammed (0x%02X).\n", - status); - break; - } } + + if (!work) + printk(KERN_ERR "pc_keyb: controller jammed (0x%02X).\n", status); return status; } @@ -481,14 +478,13 @@ static void keyboard_interrupt(int irq, void *dev_id, struct pt_regs *regs) { - unsigned long flags; - #ifdef CONFIG_VT kbd_pt_regs = regs; #endif - spin_lock_irqsave(&kbd_controller_lock, flags); + + spin_lock_irq(&kbd_controller_lock); handle_kbd_event(); - spin_unlock_irqrestore(&kbd_controller_lock, flags); + spin_unlock_irq(&kbd_controller_lock); } /* diff -urN vanilla/linux-2.4.0-test10-pre4/drivers/char/q40_keyb.c linux_2_3/drivers/char/q40_keyb.c --- vanilla/linux-2.4.0-test10-pre4/drivers/char/q40_keyb.c Wed Sep 8 14:51:22 1999 +++ linux_2_3/drivers/char/q40_keyb.c Wed Oct 18 20:20:14 2000 @@ -94,7 +94,7 @@ }; -spinlock_t kbd_controller_lock = SPIN_LOCK_UNLOCKED; +static spinlock_t kbd_controller_lock = SPIN_LOCK_UNLOCKED; /* @@ -340,11 +340,10 @@ static void keyboard_interrupt(int irq, void *dev_id, struct pt_regs *regs) { - unsigned long flags; unsigned char status; disable_keyboard(); - spin_lock_irqsave(&kbd_controller_lock, flags); + spin_lock(&kbd_controller_lock); kbd_pt_regs = regs; status = IRQ_KEYB_MASK & master_inb(INTERRUPT_REG); @@ -386,7 +385,7 @@ keyup=1; } exit: - spin_unlock_irqrestore(&kbd_controller_lock, flags); + spin_unlock(&kbd_controller_lock); master_outb(-1,KEYBOARD_UNLOCK_REG); /* keyb ints reenabled herewith */ enable_keyboard(); }

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Oct 23 2000 - 21:00:16 EST