Re: 2.6.5: keyboard lockup on a Toshiba laptop

From: Grzegorz Kulewski
Date: Fri Apr 09 2004 - 11:32:38 EST


On Fri, 9 Apr 2004, R. J. Wysocki wrote:

> On Wednesday 07 of April 2004 13:31, Grzegorz Kulewski wrote:
> > Ok, that should be easy to debug... I hope :-)
> >
> > Try to apply this patch to check what kernel part call connect function
> > too many times. (Maybe it is some power management stuff?)
>
> I've applied this and I've got something like this in the log after a (recent)
> lockup:
>
> Apr 9 10:47:03 albercik kernel: Uniform CD-ROM driver Revision: 3.20
> Apr 9 10:47:03 albercik kernel: inserting floppy driver for 2.6.5
> Apr 9 10:47:03 albercik kernel: Floppy drive(s): fd0 is 1.44M
> Apr 9 10:47:03 albercik kernel: FDC 0 is a post-1991 82077
> Apr 9 10:47:03 albercik kernel: SCSI subsystem initialized
> Apr 9 10:51:11 albercik kernel: spurious 8259A interrupt: IRQ7.
> Apr 9 15:00:24 albercik kernel: Call Trace:
> Apr 9 15:00:24 albercik kernel: [<c0277b29>] atkbd_connect+0x19/0x420
> Apr 9 15:00:24 albercik kernel: [<c027adca>] serio_find_dev+0x6a/0x70
> Apr 9 15:00:24 albercik kernel: [<c027aee9>] serio_handle_events+0xc9/0x120
> Apr 9 15:00:24 albercik kernel: [<c027af85>] serio_thread+0x45/0x140
> Apr 9 15:00:24 albercik kernel: [<c0117a40>] default_wake_function+0x0/0x20
> Apr 9 15:00:24 albercik kernel: [<c027af40>] serio_thread+0x0/0x140
> Apr 9 15:00:24 albercik kernel: [<c0105285>] kernel_thread_helper+0x5/0x10
> Apr 9 15:00:24 albercik kernel:
> Apr 9 15:00:24 albercik kernel: input: AT Translated Set 2 keyboard on
> isa0060/serio0
> Apr 9 15:42:19 albercik kernel: Call Trace:
> Apr 9 15:42:19 albercik kernel: [<c0277b29>] atkbd_connect+0x19/0x420
> Apr 9 15:42:19 albercik kernel: [<c027adca>] serio_find_dev+0x6a/0x70
> Apr 9 15:42:19 albercik kernel: [<c027aee9>] serio_handle_events+0xc9/0x120
> Apr 9 15:42:19 albercik kernel: [<c027af85>] serio_thread+0x45/0x140
> Apr 9 15:42:19 albercik kernel: [<c0117a40>] default_wake_function+0x0/0x20
> Apr 9 15:42:19 albercik kernel: [<c027af40>] serio_thread+0x0/0x140
> Apr 9 15:42:19 albercik kernel: [<c0105285>] kernel_thread_helper+0x5/0x10
> Apr 9 15:42:19 albercik kernel:
> Apr 9 15:42:19 albercik kernel: input: AT Translated Set 2 keyboard on
> isa0060/serio0
> Apr 9 15:58:36 albercik kernel: Call Trace:
> Apr 9 15:58:36 albercik kernel: [<c0277b29>] atkbd_connect+0x19/0x420
> Apr 9 15:58:36 albercik kernel: [<c027adca>] serio_find_dev+0x6a/0x70
> Apr 9 15:58:36 albercik kernel: [<c027aee9>] serio_handle_events+0xc9/0x120
> Apr 9 15:58:36 albercik kernel: [<c027af85>] serio_thread+0x45/0x140
> Apr 9 15:58:36 albercik kernel: [<c0117a40>] default_wake_function+0x0/0x20
> Apr 9 15:58:36 albercik kernel: [<c027af40>] serio_thread+0x0/0x140
> Apr 9 15:58:36 albercik kernel: [<c0105285>] kernel_thread_helper+0x5/0x10
> Apr 9 15:58:36 albercik kernel:
>
> Here I had to reboot the machine.

So we can see that atkbd_connect is called several times (and it probably
should not... - somebody correct me if I am wrong).

Apply attached patch to see what causes reconnection.

Grzegorz Kulewski
--- /usr/src/linux-2.6.5/drivers/input/serio/serio.c.orig 2004-04-04 05:36:15.000000000 +0200
+++ /usr/src/linux-2.6.5/drivers/input/serio/serio.c 2004-04-09 18:28:50.268521936 +0200
@@ -166,6 +166,11 @@ static int serio_thread(void *nothing)
static void serio_queue_event(struct serio *serio, int event_type)
{
struct serio_event *event;
+
+ if (event_type == SERIO_RESCAN || event_type == SERIO_RECONNECT) {
+ printk(KERN_WARNING "serio: RESCAN || RECONNECT requested: %d!\n", event_type);
+ dump_stack();
+ }

if ((event = kmalloc(sizeof(struct serio_event), GFP_ATOMIC))) {
event->type = event_type;