Messages in this thread |  | | Date | Mon, 10 Oct 2016 13:02:49 +0200 | From | Petr Mladek <> | Subject | Re: [RFC][PATCHv2 6/7] printk: report printk recursion from alt_printk flush |
| |
On Sat 2016-10-08 03:59:20, Sergey Senozhatsky wrote: > On (10/06/16 17:41), Petr Mladek wrote: > [..] > > > + if (this_cpu_read(alt_printk_ctx) & ALT_PRINTK_RECURSION_MASK) { > > > + const char *msg = "BUG: recent printk recursion!\n"; > > > + > > > + this_cpu_and(alt_printk_ctx, ~ALT_PRINTK_RECURSION_MASK); > > > + alt_printk_flush_line(msg, strlen(msg)); > > > + } > > > + > > > /* > > > * This is just a paranoid check that nobody has manipulated > > > * the buffer an unexpected way. If we printed something then > > > @@ -290,6 +297,8 @@ static int vprintk_alt(const char *fmt, va_list args) > > > { > > > struct alt_printk_seq_buf *s = this_cpu_ptr(&alt_print_seq); > > > > > > + /* There is only one way to get here -- a printk recursion. */ > > > + this_cpu_or(alt_printk_ctx, ALT_PRINTK_RECURSION_MASK); > > > > Is it really a bug? In most cases, the message that is being printed > > describes a bug. We just allow to print it this alternative way to > > avoid a possible deadlock. IMHO, this might cause a confusion. > > just wanted to preserve the existing behavior, but can drop it.
I see. Well, the current code drops the original message if there is a recursion and there is no oops_in_progress. Therefore the warning is the only way to know that a message was lost. But we store the original message in the alternative buffer now. Therefore it is not longer lost.
Best Regards, Petr
|  |