diff options
Diffstat (limited to 'kernel/trace/trace_event_perf.c')
-rw-r--r-- | kernel/trace/trace_event_perf.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c index 39d5ea7b0653..26b8607a0abc 100644 --- a/kernel/trace/trace_event_perf.c +++ b/kernel/trace/trace_event_perf.c | |||
@@ -56,7 +56,13 @@ static int perf_trace_event_init(struct ftrace_event_call *tp_event, | |||
56 | } | 56 | } |
57 | } | 57 | } |
58 | 58 | ||
59 | ret = tp_event->perf_event_enable(tp_event); | 59 | if (tp_event->class->reg) |
60 | ret = tp_event->class->reg(tp_event, TRACE_REG_PERF_REGISTER); | ||
61 | else | ||
62 | ret = tracepoint_probe_register(tp_event->name, | ||
63 | tp_event->class->perf_probe, | ||
64 | tp_event); | ||
65 | |||
60 | if (ret) | 66 | if (ret) |
61 | goto fail; | 67 | goto fail; |
62 | 68 | ||
@@ -89,7 +95,8 @@ int perf_trace_init(struct perf_event *p_event) | |||
89 | 95 | ||
90 | mutex_lock(&event_mutex); | 96 | mutex_lock(&event_mutex); |
91 | list_for_each_entry(tp_event, &ftrace_events, list) { | 97 | list_for_each_entry(tp_event, &ftrace_events, list) { |
92 | if (tp_event->id == event_id && tp_event->perf_event_enable && | 98 | if (tp_event->event.type == event_id && |
99 | tp_event->class && tp_event->class->perf_probe && | ||
93 | try_module_get(tp_event->mod)) { | 100 | try_module_get(tp_event->mod)) { |
94 | ret = perf_trace_event_init(tp_event, p_event); | 101 | ret = perf_trace_event_init(tp_event, p_event); |
95 | break; | 102 | break; |
@@ -128,7 +135,12 @@ void perf_trace_destroy(struct perf_event *p_event) | |||
128 | if (--tp_event->perf_refcount > 0) | 135 | if (--tp_event->perf_refcount > 0) |
129 | return; | 136 | return; |
130 | 137 | ||
131 | tp_event->perf_event_disable(tp_event); | 138 | if (tp_event->class->reg) |
139 | tp_event->class->reg(tp_event, TRACE_REG_PERF_UNREGISTER); | ||
140 | else | ||
141 | tracepoint_probe_unregister(tp_event->name, | ||
142 | tp_event->class->perf_probe, | ||
143 | tp_event); | ||
132 | 144 | ||
133 | free_percpu(tp_event->perf_events); | 145 | free_percpu(tp_event->perf_events); |
134 | tp_event->perf_events = NULL; | 146 | tp_event->perf_events = NULL; |