Messages in this thread | | | From | Valentin Schneider <> | Subject | Re: [PATCH v2 1/3] sched/topology: Annotate RCU pointers properly | Date | Fri, 02 Feb 2024 18:35:35 +0100 |
| |
On 16/01/24 09:23, Huang, Ying wrote: > Pierre Gondois <pierre.gondois@arm.com> writes: > >> Cleanup RCU-related spare errors by annotating RCU pointers. >> >> sched_domains_numa_distance: >> error: incompatible types in comparison expression >> (different address spaces): >> int [noderef] __rcu * >> int * >> >> sched_domains_numa_masks: >> error: incompatible types in comparison expression >> (different address spaces): >> struct cpumask **[noderef] __rcu * >> struct cpumask *** >> >> The cast to (void *) adds the following sparse warning: >> warning: cast removes address space '__rcu' of expression >> but this should be normal. >> >> Fixes: 0fb3978b0aac ("sched/numa: Fix NUMA topology for systems with CPU-less nodes") >> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com> >> --- >> kernel/sched/topology.c | 12 ++++++------ >> 1 file changed, 6 insertions(+), 6 deletions(-) >> >> diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c >> index 10d1391e7416..2a2da9b33e31 100644 >> --- a/kernel/sched/topology.c >> +++ b/kernel/sched/topology.c >> @@ -1542,8 +1542,8 @@ static int sched_domains_numa_levels; >> static int sched_domains_curr_level; >> >> int sched_max_numa_distance; >> -static int *sched_domains_numa_distance; >> -static struct cpumask ***sched_domains_numa_masks; >> +static int __rcu *sched_domains_numa_distance; >> +static struct cpumask ** __rcu *sched_domains_numa_masks; >> #endif >> >> /* >> @@ -1988,8 +1988,8 @@ void sched_init_numa(int offline_node) >> >> static void sched_reset_numa(void) >> { >> - int nr_levels, *distances; >> - struct cpumask ***masks; >> + int nr_levels, __rcu *distances; >> + struct cpumask ** __rcu *masks; > > No. distances and masks are not accessed via RCU in the function. > Instead, they should be assigned like below, > > distances = rcu_dereference_raw(sched_domains_numa_distance); > > Because sched_domains_numa_distance is protected by cpu_hotplug_lock, > but the lock is static. Some comments are deserved. > > Anyway, please read RCU document before making the change. >
IIUC, something like so could also do?
distances = rcu_dereference_check(sched_domains_numa_distance, lockdep_is_cpus_held());
| |