diff options
author | Nicholas Piggin <npiggin@gmail.com> | 2016-11-08 23:14:44 +1100 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2016-11-18 22:40:42 +1100 |
commit | 6f44b20ee9b4130345c189c0c90ef6604bcd8005 (patch) | |
tree | ce6427611a8af1e7c99f297933c7d09b18140bac /arch | |
parent | 43c9127d94d62a232ed33ed2eab8a08657ce5472 (diff) |
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')
-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); |