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 --- 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