[RFC PATCH v2 06/23] sched/topology: Add sd_node for the NODE sched domain
From: Jianyong Wu <hidden>
Date: 2026-08-27 12:33:43
Also in:
lkml
Subsystem:
scheduler, the rest · Maintainers:
Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot, Linus Torvalds
There is no straightforward way to retrieve the NODE-level sched domain, which will be used in subsequent patches. To simplify this, add a per-CPU variable `sd_node` for convenience. Signed-off-by: Jianyong Wu <redacted> --- kernel/sched/sched.h | 1 + kernel/sched/topology.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+)
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 38453a78c885..3d3f1d40a672 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h@@ -2197,6 +2197,7 @@ DECLARE_PER_CPU(int, sd_llc_id); DECLARE_PER_CPU(int, sd_share_id); DECLARE_PER_CPU(struct sched_domain_shared __rcu *, sd_llc_shared); DECLARE_PER_CPU(struct sched_domain_shared __rcu *, sd_balance_shared); +DECLARE_PER_CPU(struct sched_domain __rcu *, sd_node); DECLARE_PER_CPU(struct sched_domain __rcu *, sd_numa); DECLARE_PER_CPU(struct sched_domain __rcu *, sd_asym_packing); DECLARE_PER_CPU(struct sched_domain __rcu *, sd_asym_cpucapacity);
diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
index eaaca6c9a805..46ae1f94e9f5 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c@@ -679,6 +679,7 @@ DEFINE_PER_CPU(int, sd_llc_id) = -1; DEFINE_PER_CPU(int, sd_share_id); DEFINE_PER_CPU(struct sched_domain_shared __rcu *, sd_llc_shared); DEFINE_PER_CPU(struct sched_domain_shared __rcu *, sd_balance_shared); +DEFINE_PER_CPU(struct sched_domain __rcu *, sd_node); DEFINE_PER_CPU(struct sched_domain __rcu *, sd_numa); DEFINE_PER_CPU(struct sched_domain __rcu *, sd_asym_packing); DEFINE_PER_CPU(struct sched_domain __rcu *, sd_asym_cpucapacity);
@@ -721,6 +722,19 @@ static struct llc_local_rank_topology __rcu *llc_local_rank_topo; static void rebuild_llc_local_rank(int size); #endif +/* Get sched domain by its name */ +static struct sched_domain *get_sched_domain_by_name(int cpu, char *name) +{ + struct sched_domain *sd = NULL; + + for_each_domain(cpu, sd) { + if (!strcmp(sd->name, name)) + break; + } + + return sd; +} + static void update_top_cache_domain(int cpu) { struct sched_domain_shared *sds = NULL;
@@ -753,6 +767,9 @@ static void update_top_cache_domain(int cpu) */ per_cpu(sd_share_id, cpu) = id; + sd = get_sched_domain_by_name(cpu, "NODE"); + rcu_assign_pointer(per_cpu(sd_node, cpu), sd); + sd = lowest_flag_domain(cpu, SD_NUMA); rcu_assign_pointer(per_cpu(sd_numa, cpu), sd);
--
2.34.1