Skip to contentSkip to conversation

kbd_bh() is entered during kbd_init()

PATCH William Lee Irwin III 2 participants 3 messages Aug 28, 2002 Char and misc drivers

lore
Share & tools
lore
#0 lore raw

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;
 }
#1 lore raw

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.

#2 lore raw

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