Re: [RFC][PATCHv2 1/4] panic: avoid deadlocks in re-entrant console drivers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On (10/23/18 21:04), Sergey Senozhatsky wrote:
> 
> Seems that s390 is the only arch which defines its own bust_spinlocks().
> Not sure why... Just to play games with console_loglevel?
> 
> ---
> 
> void bust_spinlocks(int yes)
> {
> 	if (yes) {
> 		oops_in_progress = 1;
> 	} else {
> 		int loglevel_save = console_loglevel;
> 		console_unblank();
> 		oops_in_progress = 0;
> 		/*
> 		 * OK, the message is on the console.  Now we call printk()
> 		 * without oops_in_progress set so that printk will give klogd
> 		 * a poke.  Hold onto your hats...
> 		 */
> 		console_loglevel = 15;
> 		printk(" ");
> 		console_loglevel = loglevel_save;
> 	}
> }
> 
> ---
> 
> The "printk(" "); without oops_in_progress" part is a bit worrisome.
> This thing technically can deadlock. Unless s390 has no NMI panic().

And console_unblank() is not guaranteed to print anything (unlike
console_flush_on_panic(), but oops is not panic() yet, so we can't
replace it with flush_on_panic()) - console_sem can be locked, so
console_unblank() would do nothing.

That printk(" ") probably wants to be printk_deferred(" ").

	-ss



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux