summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2017-12-24 02:49:22 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2018-01-18 00:38:59 +1100
commit4552d128c26e0f0f27a5bd2fadc24092b8f6c1d7 (patch)
tree97c94bbe4f7f5b2e1e5e611897704415d3034bd8
parent2271db20e4b362405bacc0e4095df4177d38129e (diff)
downloadlinux-4552d128c26e0f0f27a5bd2fadc24092b8f6c1d7.tar.gz
linux-4552d128c26e0f0f27a5bd2fadc24092b8f6c1d7.tar.bz2
linux-4552d128c26e0f0f27a5bd2fadc24092b8f6c1d7.zip
powerpc: System reset avoid interleaving oops using die synchronisation
The die() oops path contains a serializing lock to prevent oops messages from being interleaved. In the case of a system reset initiated oops (e.g., qemu nmi command), __die was being called which lacks that synchronisation and oops reports could be interleaved across CPUs. A recent patch 4388c9b3a6ee7 ("powerpc: Do not send system reset request through the oops path") changed this to __die to avoid the debugger() call, but there is no real harm to calling it twice if the first time fell through. So go back to using die() here. This was observed to fix the problem. Fixes: 4388c9b3a6ee7 ("powerpc: Do not send system reset request through the oops path") Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r--arch/powerpc/kernel/traps.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index d61989be28e1..d139117d3339 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -337,7 +337,7 @@ void system_reset_exception(struct pt_regs *regs)
* No debugger or crash dump registered, print logs then
* panic.
*/
- __die("System Reset", regs, SIGABRT);
+ die("System Reset", regs, SIGABRT);
mdelay(2*MSEC_PER_SEC); /* Wait a little while for others to print */
add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);