@@ -88,10 +88,11 @@ int perf_trace_init(struct perf_event *p_event)
mutex_lock(&event_mutex);
list_for_each_entry(tp_event, &ftrace_events, list) {
if (tp_event->event.type == event_id &&
- tp_event->class && tp_event->class->reg &&
- try_module_get(tp_event->mod)) {
- ret = perf_trace_event_init(tp_event, p_event);
- break;
+ tp_event->class && tp_event->class->reg) {
+ if (try_module_get(tp_event->mod)) {
+ ret = perf_trace_event_init(tp_event, p_event);
+ break;
+ }
}
}
mutex_unlock(&event_mutex);
@@ -138,6 +139,7 @@ void perf_trace_destroy(struct perf_event *p_event)
free_percpu(tp_event->perf_events);
tp_event->perf_events = NULL;
+ module_put(tp_event->mod);
if (!--total_ref_count) {
for (i = 0; i < 4; i++) {