diff options
author | Nicholas Piggin | 2016-11-08 13:14:44 +0100 |
---|---|---|
committer | Michael Ellerman | 2016-11-18 12:40:42 +0100 |
commit | 6f44b20ee9b4130345c189c0c90ef6604bcd8005 (patch) | |
tree | ce6427611a8af1e7c99f297933c7d09b18140bac /arch/powerpc/kernel/traps.c | |
parent | powerpc: Add option to use thin archives (diff) | |
download | kernel-qcow2-linux-6f44b20ee9b4130345c189c0c90ef6604bcd8005.tar.gz kernel-qcow2-linux-6f44b20ee9b4130345c189c0c90ef6604bcd8005.tar.xz kernel-qcow2-linux-6f44b20ee9b4130345c189c0c90ef6604bcd8005.zip |
powerpc: Fix graceful debugger recovery
When exiting xmon with 'x' (exit and recover), oops_begin bails
out immediately, but die then calls __die() and oops_end(), which
cause a lot of bad things to happen.
If the debugger was attached then went to graceful recovery, exit
from die() immediately.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/kernel/traps.c')
-rw-r--r-- | arch/powerpc/kernel/traps.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 91d278c9ab28..13ca8b687e88 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c @@ -122,9 +122,6 @@ static unsigned long oops_begin(struct pt_regs *regs) int cpu; unsigned long flags; - if (debugger(regs)) - return 1; - oops_enter(); /* racy, but better than risking deadlock. */ @@ -227,8 +224,12 @@ NOKPROBE_SYMBOL(__die); void die(const char *str, struct pt_regs *regs, long err) { - unsigned long flags = oops_begin(regs); + unsigned long flags; + + if (debugger(regs)) + return; + flags = oops_begin(regs); if (__die(str, regs, err)) err = 0; oops_end(flags, regs, err); |