diff options
Diffstat (limited to 'arch/powerpc/kernel/traps.c')
-rw-r--r-- | arch/powerpc/kernel/traps.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 29d128eb6c43..b6859aade9c2 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -815,12 +815,15 @@ void __kprobes program_check_exception(struct pt_regs *regs) | |||
815 | return; | 815 | return; |
816 | } | 816 | } |
817 | if (reason & REASON_TRAP) { | 817 | if (reason & REASON_TRAP) { |
818 | /* Debugger is first in line to stop recursive faults in | ||
819 | * rcu_lock, notify_die, or atomic_notifier_call_chain */ | ||
820 | if (debugger_bpt(regs)) | ||
821 | return; | ||
822 | |||
818 | /* trap exception */ | 823 | /* trap exception */ |
819 | if (notify_die(DIE_BPT, "breakpoint", regs, 5, 5, SIGTRAP) | 824 | if (notify_die(DIE_BPT, "breakpoint", regs, 5, 5, SIGTRAP) |
820 | == NOTIFY_STOP) | 825 | == NOTIFY_STOP) |
821 | return; | 826 | return; |
822 | if (debugger_bpt(regs)) | ||
823 | return; | ||
824 | 827 | ||
825 | if (!(regs->msr & MSR_PR) && /* not user-mode */ | 828 | if (!(regs->msr & MSR_PR) && /* not user-mode */ |
826 | report_bug(regs->nip, regs) == BUG_TRAP_TYPE_WARN) { | 829 | report_bug(regs->nip, regs) == BUG_TRAP_TYPE_WARN) { |