Re: linux-next: build warning after merge of the tip tree

Liang, Kan
2024-09-11T15:32:56Z

Hi Stephen,

On 2024-09-11 1:38 a.m., Stephen Rothwell wrote:
> Hi all,
>
> After merging the tip tree, today's linux-next build (arm
> multi_v7_defconfig) produced this warning:
>
> kernel/events/core.c: In function 'perf_event_setup_cpumask':
> kernel/events/core.c:14012:13: warning: the comparison will always evaluate as 'true' for the address of 'thread_sibling' will never be NULL [-Waddress]
> 14012 | if (!topology_sibling_cpumask(cpu)) {

The perf_event_init_cpu() may be invoked at the early boot stage, while
the topology_*_cpumask hasn't been initialized yet. The check is to
specially handle the case.

X86 uses a per-cpu cpumask pointer, which could be NULL at the early
boot stage. However, it looks like ARM uses a global variable, which
never be NULL. If so, I think we should check whether it's empty.

The below patch should fix it (Only test on X86).

diff --git a/kernel/events/core.c b/kernel/events/core.c
index 2766090de84e..fc0c17e57c86 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -14000,7 +14000,8 @@ static void perf_event_setup_cpumask(unsigned
int cpu)
* The perf_online_<domain>_masks includes the first CPU of each domain.
* Always uncondifionally set the boot CPU for the
perf_online_<domain>_masks.
*/
- if (!topology_sibling_cpumask(cpu)) {
+ if (cpu == get_boot_cpu_id() &&
+ (!topology_sibling_cpumask(cpu) ||
cpumask_empty(topology_sibling_cpumask(cpu)))) {
for (scope = PERF_PMU_SCOPE_NONE + 1; scope < PERF_PMU_MAX_SCOPE;
scope++) {
pmu_cpumask = perf_scope_cpumask(scope);
if (WARN_ON_ONCE(!pmu_cpumask))

Should I send the above as a separate patch to fix it?

Thanks,
Kan

> | ^
> In file included from include/linux/topology.h:30,
> from include/linux/gfp.h:8,
> from include/linux/xarray.h:16,
> from include/linux/list_lru.h:14,
> from include/linux/fs.h:13,
> from kernel/events/core.c:11:
> include/linux/arch_topology.h:78:19: note: 'thread_sibling' declared here
> 78 | cpumask_t thread_sibling;
> | ^~~~~~~~~~~~~~
>
> Introduced by commit
>
> 4ba4f1afb6a9 ("perf: Generic hotplug support for a PMU with a scope")
>