x86/nmi: Perform a safe NMI stack trace on all CPUs
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>
Thu, 19 Jun 2014 21:33:32 +0000 (17:33 -0400)
committerSteven Rostedt <rostedt@goodmis.org>
Thu, 20 Nov 2014 03:01:21 +0000 (22:01 -0500)
commita9edc88093287183ac934be44f295f183b2c62dd
tree41e34afb4b458d73e0e374479c780d861cd10f7b
parentafdc34a3d3b823a12a93b822ee1efb566f884032
x86/nmi: Perform a safe NMI stack trace on all CPUs

When trigger_all_cpu_backtrace() is called on x86, it will trigger an
NMI on each CPU and call show_regs(). But this can lead to a hard lock
up if the NMI comes in on another printk().

In order to avoid this, when the NMI triggers, it switches the printk
routine for that CPU to call a NMI safe printk function that records the
printk in a per_cpu seq_buf descriptor. After all NMIs have finished
recording its data, the seq_bufs are printed in a safe context.

Link: http://lkml.kernel.org/p/20140619213952.360076309@goodmis.org
Link: http://lkml.kernel.org/r/20141115050605.055232587@goodmis.org
Tested-by: Jiri Kosina <jkosina@suse.cz>
Acked-by: Jiri Kosina <jkosina@suse.cz>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Petr Mladek <pmladek@suse.cz>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
arch/x86/kernel/apic/hw_nmi.c