perf: Fix perf_init_event()
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>
This commit is contained in:
parent
cee010ec52
commit
e5f4d3394a
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue