| From f67b15037a7a50c57f72e69a6d59941ad90a0f0f Mon Sep 17 00:00:00 2001 |
| From: Linus Torvalds <torvalds@linux-foundation.org> |
| Date: Mon, 26 Mar 2018 15:39:07 -1000 |
| Subject: perf/hwbp: Simplify the perf-hwbp code, fix documentation |
| |
| From: Linus Torvalds <torvalds@linux-foundation.org> |
| |
| commit f67b15037a7a50c57f72e69a6d59941ad90a0f0f upstream. |
| |
| Annoyingly, modify_user_hw_breakpoint() unnecessarily complicates the |
| modification of a breakpoint - simplify it and remove the pointless |
| local variables. |
| |
| Also update the stale Docbook while at it. |
| |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Acked-by: Thomas Gleixner <tglx@linutronix.de> |
| Cc: <stable@vger.kernel.org> |
| Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> |
| Cc: Andy Lutomirski <luto@kernel.org> |
| Cc: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Cc: Frederic Weisbecker <fweisbec@gmail.com> |
| Cc: Jiri Olsa <jolsa@redhat.com> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Stephane Eranian <eranian@google.com> |
| Cc: Vince Weaver <vincent.weaver@maine.edu> |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/events/hw_breakpoint.c | 30 +++++++----------------------- |
| 1 file changed, 7 insertions(+), 23 deletions(-) |
| |
| --- a/kernel/events/hw_breakpoint.c |
| +++ b/kernel/events/hw_breakpoint.c |
| @@ -427,16 +427,9 @@ EXPORT_SYMBOL_GPL(register_user_hw_break |
| * modify_user_hw_breakpoint - modify a user-space hardware breakpoint |
| * @bp: the breakpoint structure to modify |
| * @attr: new breakpoint attributes |
| - * @triggered: callback to trigger when we hit the breakpoint |
| - * @tsk: pointer to 'task_struct' of the process to which the address belongs |
| */ |
| int modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *attr) |
| { |
| - u64 old_addr = bp->attr.bp_addr; |
| - u64 old_len = bp->attr.bp_len; |
| - int old_type = bp->attr.bp_type; |
| - int err = 0; |
| - |
| /* |
| * modify_user_hw_breakpoint can be invoked with IRQs disabled and hence it |
| * will not be possible to raise IPIs that invoke __perf_event_disable. |
| @@ -451,27 +444,18 @@ int modify_user_hw_breakpoint(struct per |
| bp->attr.bp_addr = attr->bp_addr; |
| bp->attr.bp_type = attr->bp_type; |
| bp->attr.bp_len = attr->bp_len; |
| + bp->attr.disabled = 1; |
| |
| - if (attr->disabled) |
| - goto end; |
| - |
| - err = validate_hw_breakpoint(bp); |
| - if (!err) |
| - perf_event_enable(bp); |
| + if (!attr->disabled) { |
| + int err = validate_hw_breakpoint(bp); |
| |
| - if (err) { |
| - bp->attr.bp_addr = old_addr; |
| - bp->attr.bp_type = old_type; |
| - bp->attr.bp_len = old_len; |
| - if (!bp->attr.disabled) |
| - perf_event_enable(bp); |
| + if (err) |
| + return err; |
| |
| - return err; |
| + perf_event_enable(bp); |
| + bp->attr.disabled = 0; |
| } |
| |
| -end: |
| - bp->attr.disabled = attr->disabled; |
| - |
| return 0; |
| } |
| EXPORT_SYMBOL_GPL(modify_user_hw_breakpoint); |