]> err.no Git - linux-2.6/commitdiff
[PATCH] drivers/char/esp.c spinlock fix
authorIngo Molnar <mingo@elte.hu>
Tue, 17 Jan 2006 06:14:00 +0000 (22:14 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 17 Jan 2006 07:15:26 +0000 (23:15 -0800)
There's incorrect spinlock usage in espserial_init(): autoconfig() uses
info->lock before it's initialized.  The fix is to initialize the spinlock
earlier.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/char/esp.c

index dd5dc8fa490de04820743c9c15435b1cc4da1224..3f3ac039f4d9a43eb5146b30b4731019ce697ff6 100644 (file)
@@ -2492,6 +2492,7 @@ static int __init espserial_init(void)
        }
 
        memset((void *)info, 0, sizeof(struct esp_struct));
+       spin_lock_init(&info->lock);
        /* rx_trigger, tx_trigger are needed by autoconfig */
        info->config.rx_trigger = rx_trigger;
        info->config.tx_trigger = tx_trigger;
@@ -2528,7 +2529,6 @@ static int __init espserial_init(void)
                init_waitqueue_head(&info->close_wait);
                init_waitqueue_head(&info->delta_msr_wait);
                init_waitqueue_head(&info->break_wait);
-               spin_lock_init(&info->lock);
                ports = info;
                printk(KERN_INFO "ttyP%d at 0x%04x (irq = %d) is an ESP ",
                        info->line, info->port, info->irq);