* [PATCH v5 1/4] smpboot: introduce SDTL_INIT() helper to tidy sched topology setup [not found] <20250710105715.66594-1-me@linux.beauty> @ 2025-07-10 10:57 ` Li Chen 2025-07-11 5:50 ` K Prateek Nayak 2025-07-11 12:25 ` Peter Zijlstra 0 siblings, 2 replies; 5+ messages in thread From: Li Chen @ 2025-07-10 10:57 UTC (permalink / raw) To: 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, Juri Lelli, Vincent Guittot, Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider, Thomas Weißschuh, Li Chen, Huacai Chen, Bibo Mao, Tobias Huschle, Mete Durlu, Joel Granados, Guo Weikang, K Prateek Nayak, Swapnil Sapkal, linuxppc-dev, linux-s390 From: Li Chen <chenl311@chinatelecom.cn> 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. Signed-off-by: Li Chen <chenl311@chinatelecom.cn> Suggested-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: K Prateek Nayak <kprateek.nayak@amd.com> --- arch/powerpc/kernel/smp.c | 34 +++++++++++++--------------------- arch/s390/kernel/topology.c | 10 +++++----- arch/x86/kernel/smpboot.c | 21 ++++++--------------- include/linux/sched/topology.h | 4 ++-- kernel/sched/topology.c | 24 ++++++++---------------- 5 files changed, 34 insertions(+), 59 deletions(-) diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 5ac7084eebc0b..0b7ab7d2eb142 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_INIT(smallcore_smt_mask, powerpc_smt_flags, SMT); + } else + powerpc_topology[i++] = SDTL_INIT(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_INIT(shared_cache_mask, powerpc_shared_cache_flags, CACHE); + + if (has_coregroup_support()) + powerpc_topology[i++] = + SDTL_INIT(cpu_mc_mask, powerpc_shared_proc_flags, MC); + + powerpc_topology[i++] = SDTL_INIT(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..46569b8e47dde 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_INIT(cpu_thread_mask, cpu_smt_flags, SMT), + SDTL_INIT(cpu_coregroup_mask, cpu_core_flags, MC), + SDTL_INIT(cpu_book_mask, NULL, BOOK), + SDTL_INIT(cpu_drawer_mask, NULL, DRAWER), + SDTL_INIT(cpu_cpu_mask, NULL, PKG), { NULL, }, }; diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 58ede3fa6a75b..445127df2cb19 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_INIT(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_INIT(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_INIT(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_INIT(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 e54e7fa76ba63..0d5daaa277b75 100644 --- a/include/linux/sched/topology.h +++ b/include/linux/sched/topology.h @@ -196,8 +196,8 @@ 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_INIT(maskfn, flagsfn, dname) ((struct sched_domain_topology_level) \ + { .mask = maskfn, .sd_flags = flagsfn, .name = #dname }) #if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) extern void rebuild_sched_domains_energy(void); diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c index 8e06b1d22e91e..d01f5a49f2e7a 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -1737,17 +1737,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_INIT(cpu_smt_mask, cpu_smt_flags, SMT), #endif #ifdef CONFIG_SCHED_CLUSTER - { cpu_clustergroup_mask, cpu_cluster_flags, SD_INIT_NAME(CLS) }, + SDTL_INIT(cpu_clustergroup_mask, cpu_cluster_flags, CLS), #endif #ifdef CONFIG_SCHED_MC - { cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) }, + SDTL_INIT(cpu_coregroup_mask, cpu_core_flags, MC), #endif - { cpu_cpu_mask, SD_INIT_NAME(PKG) }, + SDTL_INIT(cpu_cpu_mask, NULL, PKG), { NULL, }, }; @@ -2008,23 +2008,15 @@ 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_INIT(sd_numa_mask, NULL, NODE); /* * .. and append 'j' levels of NUMA goodness. */ for (j = 1; j < nr_levels; i++, j++) { - tl[i] = (struct sched_domain_topology_level){ - .mask = sd_numa_mask, - .sd_flags = cpu_numa_flags, - .flags = SDTL_OVERLAP, - .numa_level = j, - SD_INIT_NAME(NUMA) - }; + tl[i] = SDTL_INIT(sd_numa_mask, cpu_numa_flags, NUMA); + tl[i].numa_level = j; + tl[i].flags = SDTL_OVERLAP; } sched_domain_topology_saved = sched_domain_topology; -- 2.50.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v5 1/4] smpboot: introduce SDTL_INIT() helper to tidy sched topology setup 2025-07-10 10:57 ` [PATCH v5 1/4] smpboot: introduce SDTL_INIT() helper to tidy sched topology setup Li Chen @ 2025-07-11 5:50 ` K Prateek Nayak 2025-07-11 13:06 ` Peter Zijlstra 2025-07-11 16:16 ` Valentin Schneider 2025-07-11 12:25 ` Peter Zijlstra 1 sibling, 2 replies; 5+ messages in thread From: K Prateek Nayak @ 2025-07-11 5:50 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, Juri Lelli, Vincent Guittot, Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider, Thomas Weißschuh, Li Chen, Huacai Chen, Bibo Mao, Tobias Huschle, Mete Durlu, Joel Granados, Guo Weikang, Swapnil Sapkal, linuxppc-dev, linux-s390 On 7/10/2025 4:27 PM, Li Chen wrote: > /* > * .. and append 'j' levels of NUMA goodness. > */ > for (j = 1; j < nr_levels; i++, j++) { > - tl[i] = (struct sched_domain_topology_level){ > - .mask = sd_numa_mask, > - .sd_flags = cpu_numa_flags, > - .flags = SDTL_OVERLAP, > - .numa_level = j, > - SD_INIT_NAME(NUMA) > - }; > + tl[i] = SDTL_INIT(sd_numa_mask, cpu_numa_flags, NUMA); > + tl[i].numa_level = j; > + tl[i].flags = SDTL_OVERLAP; Tangential discussion: I was looking at this and was wondering why we need a "tl->flags" when there is already sd_flags() function and we can simply add SD_OVERLAP to sd_numa_flags(). I think "tl->flags" was needed when the idea of overlap domains was added in commit e3589f6c81e4 ("sched: Allow for overlapping sched_domain spans") when it depended on "FORCE_SD_OVERLAP" sched_feat() which allowed toggling this off but that was done away with in commit af85596c74de ("sched/topology: Remove FORCE_SD_OVERLAP") so perhaps we can get rid of it now? Relying on SD_NUMA should be enough currently. Peter, Valentin, what do you think of something like below? (Build and boot tested on top of this series on tip:sched/core) diff --git a/include/linux/sched/sd_flags.h b/include/linux/sched/sd_flags.h index b04a5d04dee9..42839cfa2778 100644 --- a/include/linux/sched/sd_flags.h +++ b/include/linux/sched/sd_flags.h @@ -153,14 +153,6 @@ SD_FLAG(SD_ASYM_PACKING, SDF_NEEDS_GROUPS) */ SD_FLAG(SD_PREFER_SIBLING, SDF_NEEDS_GROUPS) -/* - * sched_groups of this level overlap - * - * SHARED_PARENT: Set for all NUMA levels above NODE. - * NEEDS_GROUPS: Overlaps can only exist with more than one group. - */ -SD_FLAG(SD_OVERLAP, SDF_SHARED_PARENT | SDF_NEEDS_GROUPS) - /* * Cross-node balancing * diff --git a/include/linux/sched/topology.h b/include/linux/sched/topology.h index 0d5daaa277b7..5263746b63e8 100644 --- a/include/linux/sched/topology.h +++ b/include/linux/sched/topology.h @@ -175,8 +175,6 @@ bool cpus_share_resources(int this_cpu, int that_cpu); typedef const struct cpumask *(*sched_domain_mask_f)(int cpu); typedef int (*sched_domain_flags_f)(void); -#define SDTL_OVERLAP 0x01 - struct sd_data { struct sched_domain *__percpu *sd; struct sched_domain_shared *__percpu *sds; @@ -187,7 +185,6 @@ struct sd_data { struct sched_domain_topology_level { sched_domain_mask_f mask; sched_domain_flags_f sd_flags; - int flags; int numa_level; struct sd_data data; char *name; diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 20a845697c1d..b9b4bbbf0af6 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -9926,9 +9926,9 @@ void update_group_capacity(struct sched_domain *sd, int cpu) min_capacity = ULONG_MAX; max_capacity = 0; - if (child->flags & SD_OVERLAP) { + if (child->flags & SD_NUMA) { /* - * SD_OVERLAP domains cannot assume that child groups + * SD_NUMA domains cannot assume that child groups * span the current group. */ @@ -9941,7 +9941,7 @@ void update_group_capacity(struct sched_domain *sd, int cpu) } } else { /* - * !SD_OVERLAP domains can assume that child groups + * !SD_NUMA domains can assume that child groups * span the current group. */ diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c index d01f5a49f2e7..977e133bb8a4 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -89,7 +89,7 @@ static int sched_domain_debug_one(struct sched_domain *sd, int cpu, int level, break; } - if (!(sd->flags & SD_OVERLAP) && + if (!(sd->flags & SD_NUMA) && cpumask_intersects(groupmask, sched_group_span(group))) { printk(KERN_CONT "\n"); printk(KERN_ERR "ERROR: repeated CPUs\n"); @@ -102,7 +102,7 @@ static int sched_domain_debug_one(struct sched_domain *sd, int cpu, int level, group->sgc->id, cpumask_pr_args(sched_group_span(group))); - if ((sd->flags & SD_OVERLAP) && + if ((sd->flags & SD_NUMA) && !cpumask_equal(group_balance_mask(group), sched_group_span(group))) { printk(KERN_CONT " mask=%*pbl", cpumask_pr_args(group_balance_mask(group))); @@ -1344,7 +1344,7 @@ void sched_update_asym_prefer_cpu(int cpu, int old_prio, int new_prio) * "sg->asym_prefer_cpu" to "sg->sgc->asym_prefer_cpu" * which is shared by all the overlapping groups. */ - WARN_ON_ONCE(sd->flags & SD_OVERLAP); + WARN_ON_ONCE(sd->flags & SD_NUMA); sg = sd->groups; if (cpu != sg->asym_prefer_cpu) { @@ -2016,7 +2016,6 @@ void sched_init_numa(int offline_node) for (j = 1; j < nr_levels; i++, j++) { tl[i] = SDTL_INIT(sd_numa_mask, cpu_numa_flags, NUMA); tl[i].numa_level = j; - tl[i].flags = SDTL_OVERLAP; } sched_domain_topology_saved = sched_domain_topology; @@ -2327,7 +2326,7 @@ static void __sdt_free(const struct cpumask *cpu_map) if (sdd->sd) { sd = *per_cpu_ptr(sdd->sd, j); - if (sd && (sd->flags & SD_OVERLAP)) + if (sd && (sd->flags & SD_NUMA)) free_sched_groups(sd->groups, 0); kfree(*per_cpu_ptr(sdd->sd, j)); } @@ -2393,9 +2392,13 @@ static bool topology_span_sane(const struct cpumask *cpu_map) id_seen = sched_domains_tmpmask2; for_each_sd_topology(tl) { + int tl_common_flags = 0; + + if (tl->sd_flags) + tl_common_flags = (*tl->sd_flags)(); /* NUMA levels are allowed to overlap */ - if (tl->flags & SDTL_OVERLAP) + if (tl_common_flags & SD_NUMA) continue; cpumask_clear(covered); @@ -2466,8 +2469,6 @@ build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *att if (tl == sched_domain_topology) *per_cpu_ptr(d.sd, i) = sd; - if (tl->flags & SDTL_OVERLAP) - sd->flags |= SD_OVERLAP; if (cpumask_equal(cpu_map, sched_domain_span(sd))) break; } @@ -2480,7 +2481,7 @@ build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *att for_each_cpu(i, cpu_map) { for (sd = *per_cpu_ptr(d.sd, i); sd; sd = sd->parent) { sd->span_weight = cpumask_weight(sched_domain_span(sd)); - if (sd->flags & SD_OVERLAP) { + if (sd->flags & SD_NUMA) { if (build_overlap_sched_groups(sd, i)) goto error; } else { --- We can also keep SD_OVERLAP and only remove SDTL_OVERLAP, tl->flags if that is preferred or just have them both if you see a future !NUMA usecases for overlapping domains. > } > > sched_domain_topology_saved = sched_domain_topology; -- Thanks and Regards, Prateek ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v5 1/4] smpboot: introduce SDTL_INIT() helper to tidy sched topology setup 2025-07-11 5:50 ` K Prateek Nayak @ 2025-07-11 13:06 ` Peter Zijlstra 2025-07-11 16:16 ` Valentin Schneider 1 sibling, 0 replies; 5+ messages in thread From: Peter Zijlstra @ 2025-07-11 13:06 UTC (permalink / raw) To: K Prateek Nayak Cc: Li Chen, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H . Peter Anvin, Rafael J . Wysocki, 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, Juri Lelli, Vincent Guittot, Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider, Thomas Weißschuh, Li Chen, Huacai Chen, Bibo Mao, Tobias Huschle, Mete Durlu, Joel Granados, Guo Weikang, Swapnil Sapkal, linuxppc-dev, linux-s390 On Fri, Jul 11, 2025 at 11:20:30AM +0530, K Prateek Nayak wrote: > On 7/10/2025 4:27 PM, Li Chen wrote: > > /* > > * .. and append 'j' levels of NUMA goodness. > > */ > > for (j = 1; j < nr_levels; i++, j++) { > > - tl[i] = (struct sched_domain_topology_level){ > > - .mask = sd_numa_mask, > > - .sd_flags = cpu_numa_flags, > > - .flags = SDTL_OVERLAP, > > - .numa_level = j, > > - SD_INIT_NAME(NUMA) > > - }; > > + tl[i] = SDTL_INIT(sd_numa_mask, cpu_numa_flags, NUMA); > > + tl[i].numa_level = j; > > + tl[i].flags = SDTL_OVERLAP; > > Tangential discussion: I was looking at this and was wondering why we > need a "tl->flags" when there is already sd_flags() function and we can > simply add SD_OVERLAP to sd_numa_flags(). > > I think "tl->flags" was needed when the idea of overlap domains was > added in commit e3589f6c81e4 ("sched: Allow for overlapping sched_domain > spans") when it depended on "FORCE_SD_OVERLAP" sched_feat() which > allowed toggling this off but that was done away with in commit > af85596c74de ("sched/topology: Remove FORCE_SD_OVERLAP") so perhaps we > can get rid of it now? > > Relying on SD_NUMA should be enough currently. Peter, Valentin, what do > you think of something like below? I think you're right. SD_NUMA appears to be the one and only case that also has SDTL_OVERLAP which then results in setting SD_OVERLAP, making SD_NUMA and SD_OVERLAP equivalent and SDTL_OVERLAP redundant. I'll presume you're okay with me adding your SoB to things, and I'll push out all 5 patches to queue/sched/core to let the robots have a go at things. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v5 1/4] smpboot: introduce SDTL_INIT() helper to tidy sched topology setup 2025-07-11 5:50 ` K Prateek Nayak 2025-07-11 13:06 ` Peter Zijlstra @ 2025-07-11 16:16 ` Valentin Schneider 1 sibling, 0 replies; 5+ messages in thread From: Valentin Schneider @ 2025-07-11 16:16 UTC (permalink / raw) To: K Prateek Nayak, 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, Juri Lelli, Vincent Guittot, Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman, Thomas Weißschuh, Li Chen, Huacai Chen, Bibo Mao, Tobias Huschle, Mete Durlu, Joel Granados, Guo Weikang, Swapnil Sapkal, linuxppc-dev, linux-s390 On 11/07/25 11:20, K Prateek Nayak wrote: > Tangential discussion: I was looking at this and was wondering why we > need a "tl->flags" when there is already sd_flags() function and we can > simply add SD_OVERLAP to sd_numa_flags(). > > I think "tl->flags" was needed when the idea of overlap domains was > added in commit e3589f6c81e4 ("sched: Allow for overlapping sched_domain > spans") when it depended on "FORCE_SD_OVERLAP" sched_feat() which > allowed toggling this off but that was done away with in commit > af85596c74de ("sched/topology: Remove FORCE_SD_OVERLAP") so perhaps we > can get rid of it now? > > Relying on SD_NUMA should be enough currently. Peter, Valentin, what do > you think of something like below? > I remember asking myself the same question when I mucked about the SD flags; I ended up convincing myself to let it be but I couldn't find any note as to why. Looking at things in their current state, I agree with you, we could just bin it. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v5 1/4] smpboot: introduce SDTL_INIT() helper to tidy sched topology setup 2025-07-10 10:57 ` [PATCH v5 1/4] smpboot: introduce SDTL_INIT() helper to tidy sched topology setup Li Chen 2025-07-11 5:50 ` K Prateek Nayak @ 2025-07-11 12:25 ` Peter Zijlstra 1 sibling, 0 replies; 5+ messages in thread From: Peter Zijlstra @ 2025-07-11 12:25 UTC (permalink / raw) To: Li Chen Cc: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H . Peter Anvin, Rafael J . Wysocki, 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, Juri Lelli, Vincent Guittot, Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider, Thomas Wei??schuh, Li Chen, Huacai Chen, Bibo Mao, Tobias Huschle, Mete Durlu, Joel Granados, Guo Weikang, K Prateek Nayak, Swapnil Sapkal, linuxppc-dev, linux-s390 On Thu, Jul 10, 2025 at 06:57:07PM +0800, Li Chen wrote: > From: Li Chen <chenl311@chinatelecom.cn> > > 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. > > Signed-off-by: Li Chen <chenl311@chinatelecom.cn> > Suggested-by: Thomas Gleixner <tglx@linutronix.de> > Tested-by: K Prateek Nayak <kprateek.nayak@amd.com> > --- > arch/powerpc/kernel/smp.c | 34 +++++++++++++--------------------- > arch/s390/kernel/topology.c | 10 +++++----- > arch/x86/kernel/smpboot.c | 21 ++++++--------------- > include/linux/sched/topology.h | 4 ++-- > kernel/sched/topology.c | 24 ++++++++---------------- > 5 files changed, 34 insertions(+), 59 deletions(-) > > diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c > index 5ac7084eebc0b..0b7ab7d2eb142 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_INIT(smallcore_smt_mask, powerpc_smt_flags, SMT); > + } else > + powerpc_topology[i++] = SDTL_INIT(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_INIT(shared_cache_mask, powerpc_shared_cache_flags, CACHE); > + > + if (has_coregroup_support()) > + powerpc_topology[i++] = > + SDTL_INIT(cpu_mc_mask, powerpc_shared_proc_flags, MC); > + > + powerpc_topology[i++] = SDTL_INIT(cpu_cpu_mask, powerpc_shared_proc_flags, PKG); You wrecked coding-style here and lost a bunch of curlies. I've fixed that up for you. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-07-11 16:17 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20250710105715.66594-1-me@linux.beauty>
2025-07-10 10:57 ` [PATCH v5 1/4] smpboot: introduce SDTL_INIT() helper to tidy sched topology setup Li Chen
2025-07-11 5:50 ` K Prateek Nayak
2025-07-11 13:06 ` Peter Zijlstra
2025-07-11 16:16 ` Valentin Schneider
2025-07-11 12:25 ` Peter Zijlstra
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox