Skip to content

Commit 73b4e28

Browse files
committed
smpboot: introduce SDTL_INIT() helper to tidy sched topology setup
JIRA: https://issues.redhat.com/browse/RHEL-118964 Conflicts: Context difference in topology.h. commit e075f43 Author: Li Chen <chenl311@chinatelecom.cn> Date: Thu Jul 10 18:57:07 2025 +0800 smpboot: introduce SDTL_INIT() helper to tidy sched topology setup Define a small SDTL_INIT(maskfn, flagsfn, name) macro and use it to build the sched_domain_topology_level array. Purely a cleanup; behaviour is unchanged. Suggested-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Li Chen <chenl311@chinatelecom.cn> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: K Prateek Nayak <kprateek.nayak@amd.com> Tested-by: K Prateek Nayak <kprateek.nayak@amd.com> Link: https://lore.kernel.org/r/20250710105715.66594-2-me@linux.beauty Signed-off-by: Phil Auld <pauld@redhat.com>
1 parent c9258d3 commit 73b4e28

File tree

5 files changed

+31
-53
lines changed

5 files changed

+31
-53
lines changed

arch/powerpc/kernel/smp.c

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1713,28 +1713,23 @@ static void __init build_sched_topology(void)
17131713
#ifdef CONFIG_SCHED_SMT
17141714
if (has_big_cores) {
17151715
pr_info("Big cores detected but using small core scheduling\n");
1716-
powerpc_topology[i++] = (struct sched_domain_topology_level){
1717-
smallcore_smt_mask, powerpc_smt_flags, SD_INIT_NAME(SMT)
1718-
};
1716+
powerpc_topology[i++] =
1717+
SDTL_INIT(smallcore_smt_mask, powerpc_smt_flags, SMT);
17191718
} else {
1720-
powerpc_topology[i++] = (struct sched_domain_topology_level){
1721-
cpu_smt_mask, powerpc_smt_flags, SD_INIT_NAME(SMT)
1722-
};
1719+
powerpc_topology[i++] = SDTL_INIT(cpu_smt_mask, powerpc_smt_flags, SMT);
17231720
}
17241721
#endif
17251722
if (shared_caches) {
1726-
powerpc_topology[i++] = (struct sched_domain_topology_level){
1727-
shared_cache_mask, powerpc_shared_cache_flags, SD_INIT_NAME(CACHE)
1728-
};
1723+
powerpc_topology[i++] =
1724+
SDTL_INIT(shared_cache_mask, powerpc_shared_cache_flags, CACHE);
17291725
}
1726+
17301727
if (has_coregroup_support()) {
1731-
powerpc_topology[i++] = (struct sched_domain_topology_level){
1732-
cpu_mc_mask, powerpc_shared_proc_flags, SD_INIT_NAME(MC)
1733-
};
1728+
powerpc_topology[i++] =
1729+
SDTL_INIT(cpu_mc_mask, powerpc_shared_proc_flags, MC);
17341730
}
1735-
powerpc_topology[i++] = (struct sched_domain_topology_level){
1736-
cpu_cpu_mask, powerpc_shared_proc_flags, SD_INIT_NAME(PKG)
1737-
};
1731+
1732+
powerpc_topology[i++] = SDTL_INIT(cpu_cpu_mask, powerpc_shared_proc_flags, PKG);
17381733

17391734
/* There must be one trailing NULL entry left. */
17401735
BUG_ON(i >= ARRAY_SIZE(powerpc_topology) - 1);

arch/s390/kernel/topology.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -535,11 +535,11 @@ static const struct cpumask *cpu_drawer_mask(int cpu)
535535
}
536536

537537
static struct sched_domain_topology_level s390_topology[] = {
538-
{ cpu_thread_mask, cpu_smt_flags, SD_INIT_NAME(SMT) },
539-
{ cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) },
540-
{ cpu_book_mask, SD_INIT_NAME(BOOK) },
541-
{ cpu_drawer_mask, SD_INIT_NAME(DRAWER) },
542-
{ cpu_cpu_mask, SD_INIT_NAME(PKG) },
538+
SDTL_INIT(cpu_thread_mask, cpu_smt_flags, SMT),
539+
SDTL_INIT(cpu_coregroup_mask, cpu_core_flags, MC),
540+
SDTL_INIT(cpu_book_mask, NULL, BOOK),
541+
SDTL_INIT(cpu_drawer_mask, NULL, DRAWER),
542+
SDTL_INIT(cpu_cpu_mask, NULL, PKG),
543543
{ NULL, },
544544
};
545545

arch/x86/kernel/smpboot.c

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -511,35 +511,26 @@ static void __init build_sched_topology(void)
511511
int i = 0;
512512

513513
#ifdef CONFIG_SCHED_SMT
514-
x86_topology[i++] = (struct sched_domain_topology_level){
515-
cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT)
516-
};
514+
x86_topology[i++] = SDTL_INIT(cpu_smt_mask, cpu_smt_flags, SMT);
517515
#endif
518516
#ifdef CONFIG_SCHED_CLUSTER
519-
x86_topology[i++] = (struct sched_domain_topology_level){
520-
cpu_clustergroup_mask, x86_cluster_flags, SD_INIT_NAME(CLS)
521-
};
517+
x86_topology[i++] = SDTL_INIT(cpu_clustergroup_mask, x86_cluster_flags, CLS);
522518
#endif
523519
#ifdef CONFIG_SCHED_MC
524-
x86_topology[i++] = (struct sched_domain_topology_level){
525-
cpu_coregroup_mask, x86_core_flags, SD_INIT_NAME(MC)
526-
};
520+
x86_topology[i++] = SDTL_INIT(cpu_coregroup_mask, x86_core_flags, MC);
527521
#endif
528522
/*
529523
* When there is NUMA topology inside the package skip the PKG domain
530524
* since the NUMA domains will auto-magically create the right spanning
531525
* domains based on the SLIT.
532526
*/
533-
if (!x86_has_numa_in_package) {
534-
x86_topology[i++] = (struct sched_domain_topology_level){
535-
cpu_cpu_mask, x86_sched_itmt_flags, SD_INIT_NAME(PKG)
536-
};
537-
}
527+
if (!x86_has_numa_in_package)
528+
x86_topology[i++] = SDTL_INIT(cpu_cpu_mask, x86_sched_itmt_flags, PKG);
538529

539530
/*
540531
* There must be one trailing NULL entry left.
541532
*/
542-
BUG_ON(i >= ARRAY_SIZE(x86_topology)-1);
533+
BUG_ON(i >= ARRAY_SIZE(x86_topology) - 1);
543534

544535
set_sched_topology(x86_topology);
545536
}

include/linux/sched/topology.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,8 @@ struct sched_domain_topology_level {
209209
extern void __init set_sched_topology(struct sched_domain_topology_level *tl);
210210
extern void sched_update_asym_prefer_cpu(int cpu, int old_prio, int new_prio);
211211

212-
213-
# define SD_INIT_NAME(type) .name = #type
212+
#define SDTL_INIT(maskfn, flagsfn, dname) ((struct sched_domain_topology_level) \
213+
{ .mask = maskfn, .sd_flags = flagsfn, .name = #dname })
214214

215215
#else /* CONFIG_SMP */
216216

kernel/sched/topology.c

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1750,17 +1750,17 @@ sd_init(struct sched_domain_topology_level *tl,
17501750
*/
17511751
static struct sched_domain_topology_level default_topology[] = {
17521752
#ifdef CONFIG_SCHED_SMT
1753-
{ cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT) },
1753+
SDTL_INIT(cpu_smt_mask, cpu_smt_flags, SMT),
17541754
#endif
17551755

17561756
#ifdef CONFIG_SCHED_CLUSTER
1757-
{ cpu_clustergroup_mask, cpu_cluster_flags, SD_INIT_NAME(CLS) },
1757+
SDTL_INIT(cpu_clustergroup_mask, cpu_cluster_flags, CLS),
17581758
#endif
17591759

17601760
#ifdef CONFIG_SCHED_MC
1761-
{ cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) },
1761+
SDTL_INIT(cpu_coregroup_mask, cpu_core_flags, MC),
17621762
#endif
1763-
{ cpu_cpu_mask, SD_INIT_NAME(PKG) },
1763+
SDTL_INIT(cpu_cpu_mask, NULL, PKG),
17641764
{ NULL, },
17651765
};
17661766

@@ -2021,23 +2021,15 @@ void sched_init_numa(int offline_node)
20212021
/*
20222022
* Add the NUMA identity distance, aka single NODE.
20232023
*/
2024-
tl[i++] = (struct sched_domain_topology_level){
2025-
.mask = sd_numa_mask,
2026-
.numa_level = 0,
2027-
SD_INIT_NAME(NODE)
2028-
};
2024+
tl[i++] = SDTL_INIT(sd_numa_mask, NULL, NODE);
20292025

20302026
/*
20312027
* .. and append 'j' levels of NUMA goodness.
20322028
*/
20332029
for (j = 1; j < nr_levels; i++, j++) {
2034-
tl[i] = (struct sched_domain_topology_level){
2035-
.mask = sd_numa_mask,
2036-
.sd_flags = cpu_numa_flags,
2037-
.flags = SDTL_OVERLAP,
2038-
.numa_level = j,
2039-
SD_INIT_NAME(NUMA)
2040-
};
2030+
tl[i] = SDTL_INIT(sd_numa_mask, cpu_numa_flags, NUMA);
2031+
tl[i].numa_level = j;
2032+
tl[i].flags = SDTL_OVERLAP;
20412033
}
20422034

20432035
sched_domain_topology_saved = sched_domain_topology;

0 commit comments

Comments
 (0)