]> git.baikalelectronics.ru Git - kernel.git/commit
printk: drop in_nmi check from printk_safe_flush_on_panic()
authorSergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Wed, 30 May 2018 07:03:50 +0000 (16:03 +0900)
committerPetr Mladek <pmladek@suse.com>
Tue, 5 Jun 2018 11:38:15 +0000 (13:38 +0200)
commitb66ff1d8f115e2d1dd56936d82d6df2edb5f675b
treeee752cf843b10a809f16ecd366895795c9faac55
parent907299a32230ac13e07e38ce59e951e1513d162c
printk: drop in_nmi check from printk_safe_flush_on_panic()

Drop the in_nmi() check from printk_safe_flush_on_panic()
and attempt to re-init (IOW unlock) locked logbuf spinlock
from panic CPU regardless of its context.

Otherwise, theoretically, we can deadlock on logbuf trying to flush
per-CPU buffers:

  a) Panic CPU is running in non-NMI context
  b) Panic CPU sends out shutdown IPI via reboot vector
  c) Panic CPU fails to stop all remote CPUs
  d) Panic CPU sends out shutdown IPI via NMI vector
     One of the CPUs that we bring down via NMI vector can hold
     logbuf spin lock (theoretically).

Link: http://lkml.kernel.org/r/20180530070350.10131-1-sergey.senozhatsky@gmail.com
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
kernel/printk/printk_safe.c