[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87wmxzf1q7.ffs@tglx>
Date: Sun, 13 Aug 2023 16:36:48 +0200
From: Thomas Gleixner <tglx@...utronix.de>
To: "Zhang, Rui" <rui.zhang@...el.com>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Cc: "Gross, Jurgen" <jgross@...e.com>,
"mikelley@...rosoft.com" <mikelley@...rosoft.com>,
"arjan@...ux.intel.com" <arjan@...ux.intel.com>,
"x86@...nel.org" <x86@...nel.org>,
"thomas.lendacky@....com" <thomas.lendacky@....com>,
"ray.huang@....com" <ray.huang@....com>,
"andrew.cooper3@...rix.com" <andrew.cooper3@...rix.com>,
"Sivanich, Dimitri" <dimitri.sivanich@....com>,
"wei.liu@...nel.org" <wei.liu@...nel.org>
Subject: Re: [patch V3 23/40] x86/cpu: Provide cpu_init/parse_topology()
On Sun, Aug 13 2023 at 13:30, Rui Zhang wrote:
> On Sat, 2023-08-12 at 06:41 +0000, Zhang, Rui wrote:
>> > +static inline u32 topo_relative_domain_id(u32 apicid, enum
>> > x86_topology_domains dom)
>> > +{
>> > + if (dom != TOPO_SMT_DOMAIN)
>> > + apicid >>= x86_topo_system.dom_shifts[dom - 1];
>> > + return apicid & (x86_topo_system.dom_size[dom] - 1);
>> > +}
>>
>> relative_domain_id() is used to get a unique id value within its next
>> higher level.
Correct.
>> > +static void topo_set_ids(struct topo_scan *tscan)
>> > +{
>> > + struct cpuinfo_x86 *c = tscan->c;
>> > + u32 apicid = c->topo.apicid;
>> > +
>> > + c->topo.pkg_id = topo_shift_apicid(apicid,
>> > TOPO_PKG_DOMAIN);
>> > + c->topo.die_id = topo_shift_apicid(apicid,
>> > TOPO_DIE_DOMAIN);
>> > +
>> > + /* Relative core ID */
>> > + c->topo.core_id = topo_relative_domain_id(apicid,
>> > TOPO_CORE_DOMAIN);
>>
>> My understanding is that, to ensure a package scope unique core_id,
>> rather than Module/Tile scope unique, what is really needed here is
>> something like,
>> apicid >>= x86_topo_system.dom_shifts[SMT];
>> c->topo.core_id = apicid & (x86_topo_system.dom_size[PACKAGE]
>> - 1);
Indeed.
> This is all good, however,
>
> # grep . /sys/devices/system/cpu/cpu*/topology/c*_id
> /sys/devices/system/cpu/cpu0/topology/cluster_id:0
> /sys/devices/system/cpu/cpu0/topology/core_id:0
> /sys/devices/system/cpu/cpu1/topology/cluster_id:0
> /sys/devices/system/cpu/cpu1/topology/core_id:1
> /sys/devices/system/cpu/cpu2/topology/cluster_id:0
> /sys/devices/system/cpu/cpu2/topology/core_id:2
> /sys/devices/system/cpu/cpu3/topology/cluster_id:0
> /sys/devices/system/cpu/cpu3/topology/core_id:3
> /sys/devices/system/cpu/cpu4/topology/cluster_id:8
> /sys/devices/system/cpu/cpu4/topology/core_id:0
> /sys/devices/system/cpu/cpu5/topology/cluster_id:8
> /sys/devices/system/cpu/cpu5/topology/core_id:1
> /sys/devices/system/cpu/cpu6/topology/cluster_id:8
> /sys/devices/system/cpu/cpu6/topology/core_id:2
> /sys/devices/system/cpu/cpu7/topology/cluster_id:8
> /sys/devices/system/cpu/cpu7/topology/core_id:3
>
> The core_id is broken as it is Module scope unique only. To get package
> scope unique core id, it should contain all bits up to package id bits.
Right. Let me correct that.
But aside of that we need to have a discussion urgently how we look at
these things. If relative, then relative to what.
Right now its how it happened to be, but there is not really a plan
behind all that.
Thanks,
tglx
Powered by blists - more mailing lists