summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/traps.c
diff options
context:
space:
mode:
authorNicholas Piggin2016-11-08 13:14:44 +0100
committerMichael Ellerman2016-11-18 12:40:42 +0100
commit6f44b20ee9b4130345c189c0c90ef6604bcd8005 (patch)
treece6427611a8af1e7c99f297933c7d09b18140bac /arch/powerpc/kernel/traps.c
parentpowerpc: Add option to use thin archives (diff)
downloadkernel-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.c9
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);