x86/topology: Fix duplicated core ID within a package
authorZhang Rui <rui.zhang@intel.com>
Fri, 14 Oct 2022 09:01:47 +0000 (17:01 +0800)
committerDave Hansen <dave.hansen@linux.intel.com>
Mon, 17 Oct 2022 18:58:52 +0000 (11:58 -0700)
commit71eac7063698b7d7b8fafb1683ac24a034541141
tree0687f2222519f4578f0df80a2096271edcb43fb3
parent2b12a7a126d62bdbd81f4923c21bf6e9a7fbd069
x86/topology: Fix duplicated core ID within a package

Today, core ID is assumed to be unique within each package.

But an AlderLake-N platform adds a Module level between core and package,
Linux excludes the unknown modules bits from the core ID, resulting in
duplicate core ID's.

To keep core ID unique within a package, Linux must include all APIC-ID
bits for known or unknown levels above the core and below the package
in the core ID.

It is important to understand that core ID's have always come directly
from the APIC-ID encoding, which comes from the BIOS. Thus there is no
guarantee that they start at 0, or that they are contiguous.
As such, naively using them for array indexes can be problematic.

[ dhansen: un-known -> unknown ]

Fixes: 7745f03eb395 ("x86/topology: Add CPUID.1F multi-die/package support")
Suggested-by: Len Brown <len.brown@intel.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: Len Brown <len.brown@intel.com>
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/20221014090147.1836-5-rui.zhang@intel.com
arch/x86/kernel/cpu/topology.c