[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <197be36341f.121c2d667978523.290703926590546064@linux.beauty>
Date: Mon, 30 Jun 2025 08:21:52 +0800
From: Li Chen <me@...ux.beauty>
To: "Peter Zijlstra" <peterz@...radead.org>
Cc: "Thomas Gleixner" <tglx@...utronix.de>, "Ingo Molnar" <mingo@...hat.com>,
"Borislav Petkov" <bp@...en8.de>,
"Dave Hansen" <dave.hansen@...ux.intel.com>, "x86" <x86@...nel.org>,
"H . Peter Anvin" <hpa@...or.com>,
"Rafael J . Wysocki" <rafael.j.wysocki@...el.com>,
"K Prateek Nayak" <kprateek.nayak@....com>,
"Sohil Mehta" <sohil.mehta@...el.com>,
"Brian Gerst" <brgerst@...il.com>,
"Patryk Wlazlyn" <patryk.wlazlyn@...ux.intel.com>,
"linux-kernel" <linux-kernel@...r.kernel.org>,
"Li Chen" <chenl311@...natelecom.cn>
Subject: Re: [PATCH v3 1/2] x86/smpboot: Decrapify build_sched_topology()
Hi Peter,
---- On Wed, 25 Jun 2025 16:28:19 +0800 Peter Zijlstra <peterz@...radead.org> wrote ---
> On Wed, Jun 25, 2025 at 11:45:49AM +0800, Li Chen wrote:
> > From: Thomas Gleixner <tglx@...utronix.de>
> >
> > The #ifdeffery and the initializers in build_sched_topology() are just
> > disgusting. The SCHED_SMT #ifdef is also pointless because SCHED_SMT is
> > unconditionally enabled when SMP is enabled.
>
> On x86, but not across all archs. Yes this is x86 code, but how is one
> supposed to keep all that nonsense straight in their head ;-)
>
> > Statically initialize the domain levels in the topology array and let
> > build_sched_topology() invalidate the package domain level when NUMA in
> > package is available.
> >
> > Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
> > ---
> > arch/x86/kernel/smpboot.c | 45 +++++++++++++++------------------------
> > 1 file changed, 17 insertions(+), 28 deletions(-)
> >
> > diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
> > index fc78c2325fd29..7d202f9785362 100644
> > --- a/arch/x86/kernel/smpboot.c
> > +++ b/arch/x86/kernel/smpboot.c
> > @@ -478,43 +478,32 @@ static int x86_cluster_flags(void)
> > */
> > static bool x86_has_numa_in_package;
> >
> > -static struct sched_domain_topology_level x86_topology[6];
> > +#define DOMAIN(maskfn, flagsfn, dname) { .mask = maskfn, .sd_flags = flagsfn, .name = #dname }
> >
> > -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)
> > - };
> > -#endif
> > +static struct sched_domain_topology_level x86_topology[] = {
> > + DOMAIN(cpu_smt_mask, cpu_smt_flags, SMT),
> > #ifdef CONFIG_SCHED_CLUSTER
> > - x86_topology[i++] = (struct sched_domain_topology_level){
> > - cpu_clustergroup_mask, x86_cluster_flags, SD_INIT_NAME(CLS)
> > - };
> > + DOMAIN(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)
> > - };
> > + DOMAIN(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)
> > - };
> > - }
> > + DOMAIN(cpu_cpu_mask, x86_sched_itmt_flags, PKG),
> > + { NULL },
> > +};
> >
> > +static void __init build_sched_topology(void)
> > +{
> > /*
> > - * There must be one trailing NULL entry left.
> > + * When there is NUMA topology inside the package invalidate the
> > + * PKG domain since the NUMA domains will auto-magically create the
> > + * right spanning domains based on the SLIT.
> > */
> > - BUG_ON(i >= ARRAY_SIZE(x86_topology)-1);
> > + if (x86_has_numa_in_package) {
> > + unsigned int pkgdom = ARRAY_SIZE(x86_topology) - 2;
> >
> > + memset(&x86_topology[pkgdom], 0, sizeof(x86_topology[pkgdom]));
> > + }
> > set_sched_topology(x86_topology);
> > }
>
> Urgh, this patch is doing at least 4 things and nigh on unreadable
> because of that.
>
> - introduces DOMAIN() helper
> - drops (the now pointless) SD_INIT_NAME() helper
> - drops CONFIG_SCHED_SMT (x86 special)
> - moves to static initialize and truncate
Thanks for your review, I would split this Thomas's patch to 4 different patches
and preserve his signoff
Powered by blists - more mailing lists