Messages in this thread | | | From | Thomas Gleixner <> | Subject | Re: [patch V3 23/40] x86/cpu: Provide cpu_init/parse_topology() | Date | Sun, 13 Aug 2023 16:36:48 +0200 |
| |
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
| |