perf: Fix perf_init_event()
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Fri, 10 Sep 2010 15:38:06 +0000 (17:38 +0200)
committerIngo Molnar <mingo@elte.hu>
Fri, 10 Sep 2010 15:41:55 +0000 (17:41 +0200)
We ought to return -ENOENT when non of the registered PMUs
recognise the requested event.

This fixes a boot crash that occurs if no PMU is available
but the NMI watchdog tries to register an event.

Reported-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/perf_event.c

index f395fb4d9b741389635344a364761e9c190d99c7..f29b52576ec1c9291bf3245edefd98df60280997 100644 (file)
@@ -5236,12 +5236,15 @@ struct pmu *perf_init_event(struct perf_event *event)
        list_for_each_entry_rcu(pmu, &pmus, entry) {
                int ret = pmu->event_init(event);
                if (!ret)
-                       break;
+                       goto unlock;
+
                if (ret != -ENOENT) {
                        pmu = ERR_PTR(ret);
-                       break;
+                       goto unlock;
                }
        }
+       pmu = ERR_PTR(-ENOENT);
+unlock:
        srcu_read_unlock(&pmus_srcu, idx);
 
        return pmu;