aboutsummaryrefslogtreecommitdiff
path: root/arch/arm64/kernel/debug-monitors.c
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2015-01-24 11:54:15 +0000
committerMark Brown <broonie@kernel.org>2015-01-24 11:54:15 +0000
commit429421a879dd2d62ac3573ba23d9faac162f5621 (patch)
tree9eda98c6222bf72739b7b1a3a63a134296986235 /arch/arm64/kernel/debug-monitors.c
parent8df8c7d7220e4ea159ca57edbf7f2c6cbf6a7278 (diff)
parent15f82fce54b86e159fe5a1d41dcdc89e12b26459 (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.c22
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;
}