• James Clark's avatar
    perf pmu: Move pmu__find_core_pmu() to pmus.c · 3d0f5f45
    James Clark authored
    pmu__find_core_pmu() more logically belongs in pmus.c because it
    iterates over all PMUs, so move it to pmus.c
    
    At the same time rename it to perf_pmus__find_core_pmu() to match the
    naming convention in this file.
    
    list_prepare_entry() can't be used in perf_pmus__scan_core() anymore now
    that it's called from the same compilation unit. This is with -O2
    (specifically -O1 -ftree-vrp -finline-functions
    -finline-small-functions) which allow the bounds of the array
    access to be determined at compile time. list_prepare_entry() subtracts
    the offset of the 'list' member in struct perf_pmu from &core_pmus,
    which isn't a struct perf_pmu. The compiler sees that pmu results in
    &core_pmus - 8 and refuses to compile. At runtime this works because
    list_for_each_entry_continue() always adds the offset back again before
    dereferencing ->next, but it's technically undefined behavior. With
    -fsanitize=undefined an additional warning is generated.
    
    Using list_first_entry_or_null() to get the first entry here avoids
    doing &core_pmus - 8 but has the same result and fixes both the compile
    warning and the undefined behavior warning. There are other uses of
    list_prepare_entry() in pmus.c, but the compiler doesn't seem to be
    able to see that they can also be called with &core_pmus, so I won't
    change any at this time.
    Signed-off-by: default avatarJames Clark <james.clark@arm.com>
    Reviewed-by: default avatarIan Rogers <irogers@google.com>
    Reviewed-by: default avatarJohn Garry <john.g.garry@oracle.com>
    Cc: Ravi Bangoria <ravi.bangoria@amd.com>
    Cc: Eduard Zingerman <eddyz87@gmail.com>
    Cc: Will Deacon <will@kernel.org>
    Cc: Leo Yan <leo.yan@linaro.org>
    Cc: Mike Leach <mike.leach@linaro.org>
    Cc: Jing Zhang <renyu.zj@linux.alibaba.com>
    Cc: Haixin Yu <yuhaixin.yhx@linux.alibaba.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: linux-arm-kernel@lists.infradead.org
    Link: https://lore.kernel.org/r/20230913153355.138331-2-james.clark@arm.comSigned-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    3d0f5f45
pmus.c 14.6 KB