kbd_bh() is entered during kbd_init()
kbd_bh() is entered during kbd_init().
#0 kbd_bh (dummy=0) at /mnt/b/2.5.32/linux-2.5.32/include/asm/processor.h:477
#1 0xc011f609 in tasklet_action (a=0xc032fd80) at softirq.c:197
#2 0xc011f3b2 in do_softirq () at softirq.c:89
#3 0xc0111c43 in smp_apic_timer_interrupt (regs=
{ebx = -1070383808, ecx = -1070479088, edx = -870318228, esi = -1070859956, edi = 582, ebp = -870318188, eax = 1, xds = -870383512, xes = -1072627608, ori g_eax = -17, eip = -1072564974, xcs = 96, eflags = 582, esp = -1070511136, xss =
-1070144220}) at apic.c:1091
#4 0xc01082a6 in apic_timer_interrupt () at process.c:982
#5 0xc02dce32 in kbd_init ()
at /mnt/b/2.5.32/linux-2.5.32/include/linux/interrupt.h:162 #6 0xc02dd185 in vty_init () at console.c:2527 #7 0xc02dc4a6 in tty_init () at tty_io.c:2315 #8 0xc02dc259 in chr_dev_init () at mem.c:671 #9 0xc02ce8e5 in do_initcalls () at main.c:491
#10 0xc02ce921 in do_basic_setup () at main.c:542
#11 0xc01050df in init (unused=0x0) at main.c:569
kbd_init() needs to disable interrupts.
Cheers,
Bill
drivers/char/keyboard.c +5 -0
@@ -1169,6 +1169,9 @@int __init kbd_init (void ) {int i; +unsigned long flags; + +local_irq_save (flags); kbd0.ledflagstate = kbd0.default_ledflagstate =KBD_DEFLEDS ; kbd0.ledmode =LED_SHOW_FLAGS ;
@@ -1183,5 +1186,7 @@tasklet_enable (&keyboard_tasklet);tasklet_schedule (&keyboard_tasklet);input_register_handler (&kbd_handler); + +local_irq_restore (flags);return 0 ; }
From: William Lee Irwin III <[email protected]>
Date: Tue, 27 Aug 2002 17:40:40 -0700
kbd_init() needs to disable interrupts.
That won't cure the problem on SMP.
From: William Lee Irwin III <[email protected]>
Date: Tue, 27 Aug 2002 17:40:40 -0700
Quoted 1 line
kbd_init()needs to disable interrupts.
Quoted 1 line · David S. Miller
That won't cure the problem on SMP.
Seemed to fix it on a 16x. I believe the kernel isn't running anything on the secondaries yet at that point. Working alternatives are, of course, welcome.
Cheers,
Bill