From: Jim Collette <jim@hamachi.net>
There's an exit path in i8042_interrupt() which forgets to rearm the timer.
It can make the mouse die when X is started.
unsigned long flags;
unsigned char str, data;
unsigned int dfl;
+ int ret;
spin_lock_irqsave(&i8042_lock, flags);
str = i8042_read_status();
if (~str & I8042_STR_OBF) {
if (irq) dbg("Interrupt %d, without any data", irq);
- return IRQ_RETVAL(0);
+ ret = 0;
+ goto out;
}
dfl = ((str & I8042_STR_PARITY) ? SERIO_PARITY : 0) |
serio_interrupt(&i8042_kbd_port, data, dfl, regs);
irq_ret:
-
+ ret = 1;
+out:
mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD);
- return IRQ_RETVAL(1);
+ return IRQ_RETVAL(ret);
}
/*