aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/traps.c
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2016-11-08 07:14:44 -0500
committerMichael Ellerman <mpe@ellerman.id.au>2016-11-18 06:40:42 -0500
commit6f44b20ee9b4130345c189c0c90ef6604bcd8005 (patch)
treece6427611a8af1e7c99f297933c7d09b18140bac /arch/powerpc/kernel/traps.c
parent43c9127d94d62a232ed33ed2eab8a08657ce5472 (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/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)
122 int cpu; 122 int cpu;
123 unsigned long flags; 123 unsigned long flags;
124 124
125 if (debugger(regs))
126 return 1;
127
128 oops_enter(); 125 oops_enter();
129 126
130 /* racy, but better than risking deadlock. */ 127 /* racy, but better than risking deadlock. */
@@ -227,8 +224,12 @@ NOKPROBE_SYMBOL(__die);
227 224
228void die(const char *str, struct pt_regs *regs, long err) 225void die(const char *str, struct pt_regs *regs, long err)
229{ 226{
230 unsigned long flags = oops_begin(regs); 227 unsigned long flags;
228
229 if (debugger(regs))
230 return;
231 231
232 flags = oops_begin(regs);
232 if (__die(str, regs, err)) 233 if (__die(str, regs, err))
233 err = 0; 234 err = 0;
234 oops_end(flags, regs, err); 235 oops_end(flags, regs, err);