diff options
author | Steven Rostedt <srostedt@redhat.com> | 2010-06-08 11:22:06 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-06-28 21:13:14 -0400 |
commit | a1d0ce8213e9ddf4046ef5ba95c55762d075f541 (patch) | |
tree | c72fb18588de555c8fa0c61452ae14ffe37dbf8a /kernel/trace/trace_event_perf.c | |
parent | d62f85d1e22e537192ce494c89540e1ac0d8bfc7 (diff) |
tracing: Use class->reg() for all registering of events
Because kprobes and syscalls need special processing to register
events, the class->reg() method was created to handle the differences.
But instead of creating a default ->reg for perf and ftrace events,
the code was scattered with:
if (class->reg)
class->reg();
else
default_reg();
This is messy and can also lead to bugs.
This patch cleans up this code and creates a default reg() entry for
the events allowing for the code to directly call the class->reg()
without the condition.
Reported-by: Peter Zijlstra <peterz@infradead.org>
Acked-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/trace_event_perf.c')
-rw-r--r-- | kernel/trace/trace_event_perf.c | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c index 6053982dc302..23751659582e 100644 --- a/kernel/trace/trace_event_perf.c +++ b/kernel/trace/trace_event_perf.c | |||
@@ -54,13 +54,7 @@ static int perf_trace_event_init(struct ftrace_event_call *tp_event, | |||
54 | } | 54 | } |
55 | } | 55 | } |
56 | 56 | ||
57 | if (tp_event->class->reg) | 57 | ret = tp_event->class->reg(tp_event, TRACE_REG_PERF_REGISTER); |
58 | ret = tp_event->class->reg(tp_event, TRACE_REG_PERF_REGISTER); | ||
59 | else | ||
60 | ret = tracepoint_probe_register(tp_event->name, | ||
61 | tp_event->class->perf_probe, | ||
62 | tp_event); | ||
63 | |||
64 | if (ret) | 58 | if (ret) |
65 | goto fail; | 59 | goto fail; |
66 | 60 | ||
@@ -94,9 +88,7 @@ int perf_trace_init(struct perf_event *p_event) | |||
94 | mutex_lock(&event_mutex); | 88 | mutex_lock(&event_mutex); |
95 | list_for_each_entry(tp_event, &ftrace_events, list) { | 89 | list_for_each_entry(tp_event, &ftrace_events, list) { |
96 | if (tp_event->event.type == event_id && | 90 | if (tp_event->event.type == event_id && |
97 | tp_event->class && | 91 | tp_event->class && tp_event->class->reg && |
98 | (tp_event->class->perf_probe || | ||
99 | tp_event->class->reg) && | ||
100 | try_module_get(tp_event->mod)) { | 92 | try_module_get(tp_event->mod)) { |
101 | ret = perf_trace_event_init(tp_event, p_event); | 93 | ret = perf_trace_event_init(tp_event, p_event); |
102 | break; | 94 | break; |
@@ -136,12 +128,7 @@ void perf_trace_destroy(struct perf_event *p_event) | |||
136 | if (--tp_event->perf_refcount > 0) | 128 | if (--tp_event->perf_refcount > 0) |
137 | goto out; | 129 | goto out; |
138 | 130 | ||
139 | if (tp_event->class->reg) | 131 | tp_event->class->reg(tp_event, TRACE_REG_PERF_UNREGISTER); |
140 | tp_event->class->reg(tp_event, TRACE_REG_PERF_UNREGISTER); | ||
141 | else | ||
142 | tracepoint_probe_unregister(tp_event->name, | ||
143 | tp_event->class->perf_probe, | ||
144 | tp_event); | ||
145 | 132 | ||
146 | /* | 133 | /* |
147 | * Ensure our callback won't be called anymore. See | 134 | * Ensure our callback won't be called anymore. See |