Re: [PATCH v1 1/6] perf pmu: Directly use evsel's PMU pointer

From: Leo Yan
Date: Mon Jul 22 2024 - 17:11:50 EST


On 7/22/2024 5:16 PM, Ian Rogers wrote:
> On Sun, Jul 21, 2024 at 1:21 PM Leo Yan <leo.yan@xxxxxxx> wrote:
>>
>> Rather than iterating the whole PMU list for finding the associated PMU
>> device for an evsel, this commit optimizes to directly use evsel's 'pmu'
>> pointer for accessing PMU device.
>
> The code doesn't do that:
> ```
> struct perf_pmu *evsel__find_pmu(const struct evsel *evsel)
> {
> struct perf_pmu *pmu = evsel->pmu;
>
> if (!pmu) {
> pmu = perf_pmus__find_by_type(evsel->core.attr.type);
> ((struct evsel *)evsel)->pmu = pmu;
> }
> return pmu;
> }
> ```
> That is, if the evsel->pmu is not NULL then just return it, otherwise
> find the pmu using the type from the attribute. Any linear such should
> happen at most once unless the pmu is NULL from event parsing or
> perf_pmus__find_by_type.

So evsel__find_pmu() is good enough.

> The PMU may be NULL for legacy events and if
> sysfs isn't mounted. If you are encountering that then maybe we need a
> flag to say don't find the PMU for this evsel as it is known NULL.

I don't see a case of the PMU pointer is NULL. So don't need this flag.

My bad for misreading the code :\ Thanks a lot for pointing out.

Leo