Messages in this thread | | | Date | Wed, 18 Apr 2018 10:29:43 -0400 | From | Steven Rostedt <> | Subject | Re: [PATCH 2/2] printk: wake up klogd in vprintk_emit |
| |
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.
-- Steve
| |