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

Reply via email to