On Wed 2018-04-18 10:29:43, Steven Rostedt wrote: > 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.
wake_up_klogd() uses the lockless irq_work_queue(). So it is actually safe. But the name is confusing. We should rename it. Best Regards, Petr