log_buf_len_setup() is called on the start_kernel->parse_args() path.  It
must not enable interrupts.



 kernel/printk.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff -puN kernel/printk.c~log_buf_len_setup-irq-fix kernel/printk.c
--- 25/kernel/printk.c~log_buf_len_setup-irq-fix	2003-12-24 04:17:33.000000000 -0800
+++ 25-akpm/kernel/printk.c	2003-12-24 04:17:33.000000000 -0800
@@ -150,6 +150,7 @@ __setup("console=", console_setup);
 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;
@@ -161,7 +162,7 @@ static int __init log_buf_len_setup(char
 			goto out;
 		}
 
-		spin_lock_irq(&logbuf_lock);
+		spin_lock_irqsave(&logbuf_lock, flags);
 		log_buf_len = size;
 		log_buf = new_log_buf;
 
@@ -175,7 +176,7 @@ static int __init log_buf_len_setup(char
 		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);
 	}

_