* [PATCH v4 1/4] smpboot: introduce SDTL() helper to tidy sched topology setup
[not found] <20250706030636.397197-1-me@linux.beauty>
@ 2025-07-06 3:06 ` Li Chen
2025-07-07 5:33 ` K Prateek Nayak
0 siblings, 1 reply; 3+ messages in thread
From: Li Chen @ 2025-07-06 3:06 UTC (permalink / raw)
To: Li Chen, Thomas Gleixner , Ingo Molnar , Borislav Petkov ,
Dave Hansen , x86, H . Peter Anvin , Rafael J . Wysocki ,
Peter Zijlstra , Sohil Mehta , Brian Gerst , Patryk Wlazlyn ,
linux-kernel, Madhavan Srinivasan, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Heiko Carstens, Vasily Gorbik,
Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin, Peter Zijlstra, Juri Lelli, Vincent Guittot,
Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
Valentin Schneider, Thomas Weißschuh, Bibo Mao, Li Chen,
Huacai Chen, Tobias Huschle, Mete Durlu, Joel Granados,
Guo Weikang, Rafael J. Wysocki, Sohil Mehta, K Prateek Nayak,
Brian Gerst, Patryk Wlazlyn, Swapnil Sapkal, linuxppc-dev,
linux-s390
From: Li Chen <chenl311@chinatelecom.cn>
Define a small SDTL(maskfn, flagsfn, name) macro and use it to build the
sched_domain_topology_level. Purely a cleanup; behaviour is unchanged.
Signed-off-by: Li Chen <chenl311@chinatelecom.cn>
Suggested-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/powerpc/kernel/smp.c | 34 +++++++++++++---------------------
arch/s390/kernel/topology.c | 10 +++++-----
arch/x86/kernel/smpboot.c | 21 ++++++---------------
include/linux/sched/topology.h | 6 +++---
kernel/sched/topology.c | 16 ++++++----------
5 files changed, 33 insertions(+), 54 deletions(-)
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 5ac7084eebc0b..b05995e272134 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -1700,28 +1700,20 @@ static void __init build_sched_topology(void)
#ifdef CONFIG_SCHED_SMT
if (has_big_cores) {
pr_info("Big cores detected but using small core scheduling\n");
- powerpc_topology[i++] = (struct sched_domain_topology_level){
- smallcore_smt_mask, powerpc_smt_flags, SD_INIT_NAME(SMT)
- };
- } else {
- powerpc_topology[i++] = (struct sched_domain_topology_level){
- cpu_smt_mask, powerpc_smt_flags, SD_INIT_NAME(SMT)
- };
- }
+ powerpc_topology[i++] =
+ SDTL(smallcore_smt_mask, powerpc_smt_flags, SMT);
+ } else
+ powerpc_topology[i++] = SDTL(cpu_smt_mask, powerpc_smt_flags, SMT);
#endif
- if (shared_caches) {
- powerpc_topology[i++] = (struct sched_domain_topology_level){
- shared_cache_mask, powerpc_shared_cache_flags, SD_INIT_NAME(CACHE)
- };
- }
- if (has_coregroup_support()) {
- powerpc_topology[i++] = (struct sched_domain_topology_level){
- cpu_mc_mask, powerpc_shared_proc_flags, SD_INIT_NAME(MC)
- };
- }
- powerpc_topology[i++] = (struct sched_domain_topology_level){
- cpu_cpu_mask, powerpc_shared_proc_flags, SD_INIT_NAME(PKG)
- };
+ if (shared_caches)
+ powerpc_topology[i++] =
+ SDTL(shared_cache_mask, powerpc_shared_cache_flags, CACHE);
+
+ if (has_coregroup_support())
+ powerpc_topology[i++] =
+ SDTL(cpu_mc_mask, powerpc_shared_proc_flags, MC);
+
+ powerpc_topology[i++] = SDTL(cpu_cpu_mask, powerpc_shared_proc_flags, PKG);
/* There must be one trailing NULL entry left. */
BUG_ON(i >= ARRAY_SIZE(powerpc_topology) - 1);
diff --git a/arch/s390/kernel/topology.c b/arch/s390/kernel/topology.c
index 3df048e190b11..ccf5dcc56f86d 100644
--- a/arch/s390/kernel/topology.c
+++ b/arch/s390/kernel/topology.c
@@ -531,11 +531,11 @@ static const struct cpumask *cpu_drawer_mask(int cpu)
}
static struct sched_domain_topology_level s390_topology[] = {
- { cpu_thread_mask, cpu_smt_flags, SD_INIT_NAME(SMT) },
- { cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) },
- { cpu_book_mask, SD_INIT_NAME(BOOK) },
- { cpu_drawer_mask, SD_INIT_NAME(DRAWER) },
- { cpu_cpu_mask, SD_INIT_NAME(PKG) },
+ SDTL(cpu_thread_mask, cpu_smt_flags, SMT),
+ SDTL(cpu_coregroup_mask, cpu_core_flags, MC),
+ SDTL(cpu_book_mask, NULL, BOOK),
+ SDTL(cpu_drawer_mask, NULL, DRAWER),
+ SDTL(cpu_cpu_mask, NULL, PKG),
{ NULL, },
};
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index 58ede3fa6a75b..55f09946c791b 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -485,35 +485,26 @@ static void __init build_sched_topology(void)
int i = 0;
#ifdef CONFIG_SCHED_SMT
- x86_topology[i++] = (struct sched_domain_topology_level){
- cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT)
- };
+ x86_topology[i++] = SDTL(cpu_smt_mask, cpu_smt_flags, SMT);
#endif
#ifdef CONFIG_SCHED_CLUSTER
- x86_topology[i++] = (struct sched_domain_topology_level){
- cpu_clustergroup_mask, x86_cluster_flags, SD_INIT_NAME(CLS)
- };
+ x86_topology[i++] = SDTL(cpu_clustergroup_mask, x86_cluster_flags, CLS);
#endif
#ifdef CONFIG_SCHED_MC
- x86_topology[i++] = (struct sched_domain_topology_level){
- cpu_coregroup_mask, x86_core_flags, SD_INIT_NAME(MC)
- };
+ x86_topology[i++] = SDTL(cpu_coregroup_mask, x86_core_flags, MC);
#endif
/*
* When there is NUMA topology inside the package skip the PKG domain
* since the NUMA domains will auto-magically create the right spanning
* domains based on the SLIT.
*/
- if (!x86_has_numa_in_package) {
- x86_topology[i++] = (struct sched_domain_topology_level){
- cpu_cpu_mask, x86_sched_itmt_flags, SD_INIT_NAME(PKG)
- };
- }
+ if (!x86_has_numa_in_package)
+ x86_topology[i++] = SDTL(cpu_cpu_mask, x86_sched_itmt_flags, PKG);
/*
* There must be one trailing NULL entry left.
*/
- BUG_ON(i >= ARRAY_SIZE(x86_topology)-1);
+ BUG_ON(i >= ARRAY_SIZE(x86_topology) - 1);
set_sched_topology(x86_topology);
}
diff --git a/include/linux/sched/topology.h b/include/linux/sched/topology.h
index 198bb5cc1774b..0b53e372c445c 100644
--- a/include/linux/sched/topology.h
+++ b/include/linux/sched/topology.h
@@ -197,9 +197,9 @@ struct sched_domain_topology_level {
extern void __init set_sched_topology(struct sched_domain_topology_level *tl);
extern void sched_update_asym_prefer_cpu(int cpu, int old_prio, int new_prio);
-
-# define SD_INIT_NAME(type) .name = #type
-
+#define SDTL(maskfn, flagsfn, dname) \
+ ((struct sched_domain_topology_level) \
+ { .mask = maskfn, .sd_flags = flagsfn, .name = #dname, .numa_level = 0 })
#else /* CONFIG_SMP */
struct sched_domain_attr;
diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
index b958fe48e0205..e6ec65ae4b75d 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c
@@ -1739,17 +1739,17 @@ sd_init(struct sched_domain_topology_level *tl,
*/
static struct sched_domain_topology_level default_topology[] = {
#ifdef CONFIG_SCHED_SMT
- { cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT) },
+ SDTL(cpu_smt_mask, cpu_smt_flags, SMT),
#endif
#ifdef CONFIG_SCHED_CLUSTER
- { cpu_clustergroup_mask, cpu_cluster_flags, SD_INIT_NAME(CLS) },
+ SDTL(cpu_clustergroup_mask, cpu_cluster_flags, CLS),
#endif
#ifdef CONFIG_SCHED_MC
- { cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) },
+ SDTL(cpu_coregroup_mask, cpu_core_flags, MC),
#endif
- { cpu_cpu_mask, SD_INIT_NAME(PKG) },
+ SDTL(cpu_cpu_mask, NULL, PKG),
{ NULL, },
};
@@ -2010,11 +2010,7 @@ void sched_init_numa(int offline_node)
/*
* Add the NUMA identity distance, aka single NODE.
*/
- tl[i++] = (struct sched_domain_topology_level){
- .mask = sd_numa_mask,
- .numa_level = 0,
- SD_INIT_NAME(NODE)
- };
+ tl[i++] = SDTL(sd_numa_mask, NULL, NODE);
/*
* .. and append 'j' levels of NUMA goodness.
@@ -2025,7 +2021,7 @@ void sched_init_numa(int offline_node)
.sd_flags = cpu_numa_flags,
.flags = SDTL_OVERLAP,
.numa_level = j,
- SD_INIT_NAME(NUMA)
+ .name = "NUMA",
};
}
--
2.49.0
^ permalink raw reply related [flat|nested] 3+ messages in thread