OSDN Git Service

ARM: 8439/1: Fix backtrace generation when IPI is masked
authorDaniel Thompson <daniel.thompson@linaro.org>
Tue, 22 Sep 2015 16:12:10 +0000 (17:12 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 3 Oct 2015 15:40:51 +0000 (16:40 +0100)
commit0768330d46435f324a0b4860c889057524af17c2
tree1a7edb29ee41d640e92c67ea7a7ae910e902dd3e
parent001bf455d20645190beb98ff4ee450dfea1b7eb2
ARM: 8439/1: Fix backtrace generation when IPI is masked

Currently on ARM when <SysRq-L> is triggered from an interrupt handler
(e.g. a SysRq issued using UART or kbd) the main CPU will wedge for ten
seconds with interrupts masked before issuing a backtrace for every CPU
except itself.

The new backtrace code introduced by commit 96f0e00378d4 ("ARM: add
basic support for on-demand backtrace of other CPUs") does not work
correctly when run from an interrupt handler because IPI_CPU_BACKTRACE
is used to generate the backtrace on all CPUs but cannot preempt the
current calling context.

This can be fixed by detecting that the calling context cannot be
preempted and issuing the backtrace directly in this case. Issuing
directly leaves us without any pt_regs to pass to nmi_cpu_backtrace()
so we also modify the generic code to call dump_stack() when its
argument is NULL.

Acked-by: Hillf Danton <hillf.zj@alibaba-inc.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/kernel/smp.c
lib/nmi_backtrace.c