Messages in this thread Patch in this message | | | Date | Tue, 14 Oct 2008 12:22:53 +0200 | From | Ingo Molnar <> | Subject | [PATCH] serial: fix serial port lock init |
| |
> [ 31.099528] BUG: spinlock bad magic on CPU#1, agetty/2608
the patch below fixes this. There's another incarnation of the bug that i bisected today, a spontaneous reboot crash with certain configs:
| b70ac7718579b5cbf3bdd74fd01132d1c91596f4 is first bad commit | commit b70ac7718579b5cbf3bdd74fd01132d1c91596f4 | Author: David Miller <davem@davemloft.net> | Date: Mon Oct 13 10:36:31 2008 +0100 | | serial: allow 8250 to be used on sparc
# bad: [e7f2f991] Merge phase #5 (misc) of git://git.kernel.org/pub/ # good: [3fa8749e] Linux 2.6.27 # good: [4dd9ec49] Merge git://git.kernel.org/pub/scm/linux/kernel/gi # good: [5c3c4d9b] Merge git://git.kernel.org/pub/scm/linux/kernel/gi # good: [1a2217a9] Merge git://git.kernel.org/pub/scm/linux/kernel/gi # good: [cf81978d] i386: convert hardware exception 15 to an interrup # good: [c00193f9] Merge branches 'oprofile-v2' and 'timers/hpet' int # bad: [8f520021] tty: Termios locking - sort out real_tty confusion # good: [f1ddfd95] ip2: init/deinit cleanup # bad: [b70ac771] serial: allow 8250 to be used on sparc # good: [9bde10a4] serial-make-uart_ports-ioport-unsigned-long-fix # good: [43b11d33] ftdi: A few errors are err() that should be debug # good: [b5d674ab] 8250: remove a few inlines of dubious value
( but it's the same basic problem: we lost the lock init sequence when a patch was removed from the middle. )
Ingo
-----------------> From b15be1e63d0df3a1b4a25e7a28cfca9f93690884 Mon Sep 17 00:00:00 2001 From: Ingo Molnar <mingo@elte.hu> Date: Tue, 14 Oct 2008 12:14:17 +0200 Subject: [PATCH] serial: fix serial port lock init
Signed-off-by: Ingo Molnar <mingo@elte.hu> --- drivers/serial/8250.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index d4104a3..d3ca7d3 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c @@ -2969,6 +2969,9 @@ static int __init serial8250_init(void) "%d ports, IRQ sharing %sabled\n", nr_uarts, share_irqs ? "en" : "dis"); + for (i = 0; i < NR_IRQS; i++) + spin_lock_init(&irq_lists[i].lock); + #ifdef CONFIG_SPARC ret = sunserial_register_minors(&serial8250_reg, UART_NR); #else
| |