On (02/06/17 08:27), Steven Rostedt wrote: [..] > > > > just in case, the patch (which I prefer to be ignored) > > > > > > let's keep printk_safe_flush_line(). > > > > I do not have strong opinion but I would slightly prefer > > to keep the helper function. The use of printk_deferred() > > is a bit tricky and it is better to have only one copy. > > > > Steven, could you live with the original patch, please? > > Sure, but make it into a static inline.
well, I'll be surprised if gcc doesn't inline that simple one-liner. attached. no conflicts, the patch can replace 0004. ===8<===8<=== >From 69bbb0f436a2a89ec41a5831c03490e0a78ce12e Mon Sep 17 00:00:00 2001 From: Sergey Senozhatsky <sergey.senozhat...@gmail.com> Date: Tue, 27 Dec 2016 23:16:07 +0900 Subject: [PATCH] printk: always use deferred printk when flush printk_safe lines Always use printk_deferred() in printk_safe_flush_line(). Flushing can be done from NMI or printk_safe contexts (when we are in panic), so we can't call console drivers, yet still want to store the messages in the logbuf buffer. Therefore we use a deferred printk version. Signed-off-by: Sergey Senozhatsky <sergey.senozhat...@gmail.com> Suggested-by: Petr Mladek <pmla...@suse.com> Signed-off-by: Petr Mladek <pmla...@suse.com> --- kernel/printk/printk_safe.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/kernel/printk/printk_safe.c b/kernel/printk/printk_safe.c index efc89a4e9df5..5214d326d3ba 100644 --- a/kernel/printk/printk_safe.c +++ b/kernel/printk/printk_safe.c @@ -110,17 +110,15 @@ static int printk_safe_log_store(struct printk_safe_seq_buf *s, return add; } -static void printk_safe_flush_line(const char *text, int len) +static inline void printk_safe_flush_line(const char *text, int len) { /* - * The buffers are flushed in NMI only on panic. The messages must - * go only into the ring buffer at this stage. Consoles will get - * explicitly called later when a crashdump is not generated. + * Avoid any console drivers calls from here, because we may be + * in NMI or printk_safe context (when in panic). The messages + * must go only into the ring buffer at this stage. Consoles will + * get explicitly called later when a crashdump is not generated. */ - if (in_nmi()) - printk_deferred("%.*s", len, text); - else - printk("%.*s", len, text); + printk_deferred("%.*s", len, text); } /* printk part of the temporary buffer line by line */ -- 2.11.0