]> rtime.felk.cvut.cz Git - linux-imx.git/commitdiff
perf: Fix the missing event initialization when pmu is found in idr
authorLin Ming <ming.m.lin@intel.com>
Sun, 27 Feb 2011 13:13:31 +0000 (21:13 +0800)
committerIngo Molnar <mingo@elte.hu>
Fri, 4 Mar 2011 10:32:50 +0000 (11:32 +0100)
Currently, the event is not initialized if pmu is found in idr. This
never causes bug just because now no pmu is associated with the idr
id.

Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <1298812411.2699.9.camel@localhost>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/perf_event.c

index 64a018e94fcac8a80f644c9d37761b7bcdb76872..821ce8221974e71bb06ece0cbfb231e6431a8061 100644 (file)
@@ -6098,17 +6098,22 @@ struct pmu *perf_init_event(struct perf_event *event)
 {
        struct pmu *pmu = NULL;
        int idx;
+       int ret;
 
        idx = srcu_read_lock(&pmus_srcu);
 
        rcu_read_lock();
        pmu = idr_find(&pmu_idr, event->attr.type);
        rcu_read_unlock();
-       if (pmu)
+       if (pmu) {
+               ret = pmu->event_init(event);
+               if (ret)
+                       pmu = ERR_PTR(ret);
                goto unlock;
+       }
 
        list_for_each_entry_rcu(pmu, &pmus, entry) {
-               int ret = pmu->event_init(event);
+               ret = pmu->event_init(event);
                if (!ret)
                        goto unlock;