diff options
Diffstat (limited to 'kernel/trace/trace_event_perf.c')
-rw-r--r-- | kernel/trace/trace_event_perf.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c index 0565bb42566f..196fe9d26773 100644 --- a/kernel/trace/trace_event_perf.c +++ b/kernel/trace/trace_event_perf.c | |||
@@ -49,7 +49,12 @@ static int perf_trace_event_enable(struct ftrace_event_call *event) | |||
49 | rcu_assign_pointer(perf_trace_buf_nmi, buf); | 49 | rcu_assign_pointer(perf_trace_buf_nmi, buf); |
50 | } | 50 | } |
51 | 51 | ||
52 | ret = event->perf_event_enable(event); | 52 | if (event->class->reg) |
53 | ret = event->class->reg(event, TRACE_REG_PERF_REGISTER); | ||
54 | else | ||
55 | ret = tracepoint_probe_register(event->name, | ||
56 | event->class->perf_probe, | ||
57 | event); | ||
53 | if (!ret) { | 58 | if (!ret) { |
54 | total_ref_count++; | 59 | total_ref_count++; |
55 | return 0; | 60 | return 0; |
@@ -75,7 +80,8 @@ int perf_trace_enable(int event_id) | |||
75 | 80 | ||
76 | mutex_lock(&event_mutex); | 81 | mutex_lock(&event_mutex); |
77 | list_for_each_entry(event, &ftrace_events, list) { | 82 | list_for_each_entry(event, &ftrace_events, list) { |
78 | if (event->id == event_id && event->perf_event_enable && | 83 | if (event->id == event_id && |
84 | event->class && event->class->perf_probe && | ||
79 | try_module_get(event->mod)) { | 85 | try_module_get(event->mod)) { |
80 | ret = perf_trace_event_enable(event); | 86 | ret = perf_trace_event_enable(event); |
81 | break; | 87 | break; |
@@ -93,7 +99,10 @@ static void perf_trace_event_disable(struct ftrace_event_call *event) | |||
93 | if (--event->perf_refcount > 0) | 99 | if (--event->perf_refcount > 0) |
94 | return; | 100 | return; |
95 | 101 | ||
96 | event->perf_event_disable(event); | 102 | if (event->class->reg) |
103 | event->class->reg(event, TRACE_REG_PERF_UNREGISTER); | ||
104 | else | ||
105 | tracepoint_probe_unregister(event->name, event->class->perf_probe, event); | ||
97 | 106 | ||
98 | if (!--total_ref_count) { | 107 | if (!--total_ref_count) { |
99 | buf = perf_trace_buf; | 108 | buf = perf_trace_buf; |