diff options
Diffstat (limited to 'kernel/printk.c')
| -rw-r--r-- | kernel/printk.c | 11 | 
1 files changed, 5 insertions, 6 deletions
diff --git a/kernel/printk.c b/kernel/printk.c index 7982a0a841e..989e4a52da7 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -199,7 +199,7 @@ void __init setup_log_buf(int early)  		unsigned long mem;  		mem = memblock_alloc(new_log_buf_len, PAGE_SIZE); -		if (mem == MEMBLOCK_ERROR) +		if (!mem)  			return;  		new_log_buf = __va(mem);  	} else { @@ -688,6 +688,7 @@ static void zap_locks(void)  	oops_timestamp = jiffies; +	debug_locks_off();  	/* If a crash is occurring, make sure we can't deadlock */  	raw_spin_lock_init(&logbuf_lock);  	/* And make sure that we print immediately */ @@ -840,9 +841,8 @@ asmlinkage int vprintk(const char *fmt, va_list args)  	boot_delay_msec();  	printk_delay(); -	preempt_disable();  	/* This stops the holder of console_sem just where we want him */ -	raw_local_irq_save(flags); +	local_irq_save(flags);  	this_cpu = smp_processor_id();  	/* @@ -856,7 +856,7 @@ asmlinkage int vprintk(const char *fmt, va_list args)  		 * recursion and return - but flag the recursion so that  		 * it can be printed at the next appropriate moment:  		 */ -		if (!oops_in_progress) { +		if (!oops_in_progress && !lockdep_recursing(current)) {  			recursion_bug = 1;  			goto out_restore_irqs;  		} @@ -962,9 +962,8 @@ asmlinkage int vprintk(const char *fmt, va_list args)  	lockdep_on();  out_restore_irqs: -	raw_local_irq_restore(flags); +	local_irq_restore(flags); -	preempt_enable();  	return printed_len;  }  EXPORT_SYMBOL(printk);  |