Re: [RESEND PATCH v9 tip/sched/core 1/6] sched: Annotate rq->rd with __rcu and update lockless readers
From: Aaron Tomlin
Date: Thu Oct 29 2026 - 20:24:24 EST
On Thu, Oct 29, 2026 at 09:25:06AM -0400, Aaron Tomlin wrote:
> diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
> index 919d0fb00bd9..98a65d127e46 100644
> --- a/kernel/sched/topology.c
> +++ b/kernel/sched/topology.c
> @@ -427,7 +427,7 @@ static bool build_perf_domains(const struct cpumask *cpu_map)
> int i;
> struct perf_domain *pd = NULL, *tmp;
> int cpu = cpumask_first(cpu_map);
> - struct root_domain *rd = cpu_rq(cpu)->rd;
> + struct root_domain *rd = rcu_dereference_root_domain(cpu_rq(cpu)->rd);
>
> if (!sysctl_sched_energy_aware)
> goto free;
> @@ -492,9 +492,8 @@ void rq_attach_root(struct rq *rq, struct root_domain *rd)
>
> rq_lock_irqsave(rq, &rf);
>
> - if (rq->rd) {
> - old_rd = rq->rd;
> -
> + old_rd = rcu_dereference_root_domain(rq->rd);
> + if (old_rd) {
> if (cpumask_test_cpu(rq->cpu, old_rd->online))
> set_rq_offline(rq);
CHECK kernel/sched/topology.c
[ ... ]
kernel/sched/topology.c:512:16: warning: incorrect type in assignment (different address spaces)
kernel/sched/topology.c:512:16: expected struct root_domain [noderef] __rcu *rd
kernel/sched/topology.c:512:16: got struct root_domain *rd
512 rq->rd = rd;
We should use rcu_assign_pointer(rq->rd, rd) to resolve the Sparse
address-space warning. I will incorporate this change.
--
Aaron Tomlin