diff options
author | Mark Brown <broonie@kernel.org> | 2015-01-24 11:54:15 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-01-24 11:54:15 +0000 |
commit | 429421a879dd2d62ac3573ba23d9faac162f5621 (patch) | |
tree | 9eda98c6222bf72739b7b1a3a63a134296986235 /arch/arm64/kernel/debug-monitors.c | |
parent | 8df8c7d7220e4ea159ca57edbf7f2c6cbf6a7278 (diff) | |
parent | 15f82fce54b86e159fe5a1d41dcdc89e12b26459 (diff) |
Merge branch 'linux-linaro-lsk' into linux-linaro-lsk-androidlsk-v3.10-android-15.01
Diffstat (limited to 'arch/arm64/kernel/debug-monitors.c')
-rw-r--r-- | arch/arm64/kernel/debug-monitors.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c index b33051d501e6..e3b37ee9076a 100644 --- a/arch/arm64/kernel/debug-monitors.c +++ b/arch/arm64/kernel/debug-monitors.c @@ -303,20 +303,20 @@ static int brk_handler(unsigned long addr, unsigned int esr, { siginfo_t info; - if (call_break_hook(regs, esr) == DBG_HOOK_HANDLED) - return 0; + if (user_mode(regs)) { + info = (siginfo_t) { + .si_signo = SIGTRAP, + .si_errno = 0, + .si_code = TRAP_BRKPT, + .si_addr = (void __user *)instruction_pointer(regs), + }; - if (!user_mode(regs)) + force_sig_info(SIGTRAP, &info, current); + } else if (call_break_hook(regs, esr) != DBG_HOOK_HANDLED) { + pr_warning("Unexpected kernel BRK exception at EL1\n"); return -EFAULT; + } - info = (siginfo_t) { - .si_signo = SIGTRAP, - .si_errno = 0, - .si_code = TRAP_BRKPT, - .si_addr = (void __user *)instruction_pointer(regs), - }; - - force_sig_info(SIGTRAP, &info, current); return 0; } |