On Sat, 14 Apr 2018 12:01:45 +0900 Sergey Senozhatsky <sergey.senozhat...@gmail.com> wrote:
> --- a/kernel/printk/printk.c > +++ b/kernel/printk/printk.c > @@ -1888,6 +1888,7 @@ asmlinkage int vprintk_emit(int facility, int level, > > printed_len = log_output(facility, level, lflags, dict, dictlen, text, > text_len); > > + wake_up_klogd(); > logbuf_unlock_irqrestore(flags); You can't do this, because the scheduler can call printk_deferred() with the rq lock held, and printk_deferred() will grab the logbuf lock. Calling wake_up_klogd() will grab the rq lock and give us a A-B<->B-A locking order. -- Steve