]> git.baikalelectronics.ru Git - kernel.git/commit
printk/nmi: avoid direct printk()-s from __printk_nmi_flush()
authorSergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Thu, 1 Sep 2016 23:15:04 +0000 (16:15 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 2 Sep 2016 00:52:01 +0000 (17:52 -0700)
commitdcbcfd74221d6ea80b37ae49af240c21ad086545
tree46d008dc821260a189a47d541287f02331550831
parent0c08cb5c7d884e3b8211004af36e95c7a81c10ff
printk/nmi: avoid direct printk()-s from __printk_nmi_flush()

__printk_nmi_flush() can be called from nmi_panic(), therefore it has to
test whether it's executed in NMI context and thus must route the
messages through deferred printk() or via direct printk().

This is to avoid potential deadlocks, as described in commit
bf3fe90d45ce ("printk/nmi: flush NMI messages on the system panic").

However there remain two places where __printk_nmi_flush() does
unconditional direct printk() calls:

 - pr_err("printk_nmi_flush: internal error ...")
 - pr_cont("\n")

Factor out print_nmi_seq_line() parts into a new printk_nmi_flush_line()
function, which takes care of in_nmi(), and use it in
__printk_nmi_flush() for printing and error-reporting.

Link: http://lkml.kernel.org/r/20160830161354.581-1-sergey.senozhatsky@gmail.com
Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Petr Mladek <pmladek@suse.com>
Cc: Jan Kara <jack@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
kernel/printk/nmi.c