| From: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com> |
| Date: Tue, 22 Nov 2016 14:55:59 +0530 |
| Subject: powerpc/xmon: Fix data-breakpoint |
| |
| commit c21a493a2b44650707d06741601894329486f2ad upstream. |
| |
| Currently xmon data-breakpoint feature is broken. |
| |
| Whenever there is a watchpoint match occurs, hw_breakpoint_handler will |
| be called by do_break via notifier chains mechanism. If watchpoint is |
| registered by xmon, hw_breakpoint_handler won't find any associated |
| perf_event and returns immediately with NOTIFY_STOP. Similarly, do_break |
| also returns without notifying to xmon. |
| |
| Solve this by returning NOTIFY_DONE when hw_breakpoint_handler does not |
| find any perf_event associated with matched watchpoint, rather than |
| NOTIFY_STOP, which tells the core code to continue calling the other |
| breakpoint handlers including the xmon one. |
| |
| Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| [bwh: Backported to 3.16: adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| arch/powerpc/kernel/hw_breakpoint.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/arch/powerpc/kernel/hw_breakpoint.c |
| +++ b/arch/powerpc/kernel/hw_breakpoint.c |
| @@ -227,8 +227,10 @@ int __kprobes hw_breakpoint_handler(stru |
| rcu_read_lock(); |
| |
| bp = __get_cpu_var(bp_per_reg); |
| - if (!bp) |
| + if (!bp) { |
| + rc = NOTIFY_DONE; |
| goto out; |
| + } |
| info = counter_arch_bp(bp); |
| |
| /* |