]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] log_buf_len_setup() irq fix
authorAndrew Morton <akpm@osdl.org>
Tue, 30 Dec 2003 07:48:35 +0000 (23:48 -0800)
committerLinus Torvalds <torvalds@home.osdl.org>
Tue, 30 Dec 2003 07:48:35 +0000 (23:48 -0800)
log_buf_len_setup() is called on the start_kernel->parse_args() path.  It
must not enable interrupts.

kernel/printk.c

index 1ad37691f56d255fe47b6f0e0c03be8ae709181e..10978fa9a476b0a513f4e8f674d185d379ebefcd 100644 (file)
@@ -181,6 +181,7 @@ int __init add_preferred_console(char *name, int idx, char *options)
 static int __init log_buf_len_setup(char *str)
 {
        unsigned long size = memparse(str, &str);
+       unsigned long flags;
 
        if (size > log_buf_len) {
                unsigned long start, dest_idx, offset;
@@ -192,7 +193,7 @@ static int __init log_buf_len_setup(char *str)
                        goto out;
                }
 
-               spin_lock_irq(&logbuf_lock);
+               spin_lock_irqsave(&logbuf_lock, flags);
                log_buf_len = size;
                log_buf = new_log_buf;
 
@@ -206,7 +207,7 @@ static int __init log_buf_len_setup(char *str)
                log_start -= offset;
                con_start -= offset;
                log_end -= offset;
-               spin_unlock_irq(&logbuf_lock);
+               spin_unlock_irqrestore(&logbuf_lock, flags);
 
                printk("log_buf_len: %d\n", log_buf_len);
        }