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) { |
