提交 e5f4d339 编写于 作者: P Peter Zijlstra 提交者: Ingo Molnar

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: NIngo Molnar <mingo@elte.hu>
Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: NIngo Molnar <mingo@elte.hu>
上级 cee010ec
...@@ -5236,12 +5236,15 @@ struct pmu *perf_init_event(struct perf_event *event) ...@@ -5236,12 +5236,15 @@ struct pmu *perf_init_event(struct perf_event *event)
list_for_each_entry_rcu(pmu, &pmus, entry) { list_for_each_entry_rcu(pmu, &pmus, entry) {
int ret = pmu->event_init(event); int ret = pmu->event_init(event);
if (!ret) if (!ret)
break; goto unlock;
if (ret != -ENOENT) { if (ret != -ENOENT) {
pmu = ERR_PTR(ret); pmu = ERR_PTR(ret);
break; goto unlock;
} }
} }
pmu = ERR_PTR(-ENOENT);
unlock:
srcu_read_unlock(&pmus_srcu, idx); srcu_read_unlock(&pmus_srcu, idx);
return pmu; return pmu;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册