Messages in this thread |  | | Date | Wed, 18 Apr 2018 17:02:14 +0200 | From | Petr Mladek <> | Subject | Re: [PATCH 2/2] printk: wake up klogd in vprintk_emit |
| |
On Wed 2018-04-18 10:29:43, Steven Rostedt wrote: > On Sat, 14 Apr 2018 12:01:45 +0900 > Sergey Senozhatsky <sergey.senozhatsky@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
|  |