• Thomas Gleixner's avatar
    x86/topology: Ignore non-present APIC IDs in a present package · f0551af0
    Thomas Gleixner authored
    Borislav reported that one of his systems has a broken MADT table which
    advertises eight present APICs and 24 non-present APICs in the same
    package.
    
    The non-present ones are considered hot-pluggable by the topology
    evaluation code, which is obviously bogus as there is no way to hot-plug
    within the same package.
    
    As the topology evaluation code accounts for hot-pluggable CPUs in a
    package, the maximum number of cores per package is computed wrong, which
    in turn causes the uncore performance counter driver to access non-existing
    MSRs. It will probably confuse other entities which rely on the maximum
    number of cores and threads per package too.
    
    Cure this by ignoring hot-pluggable APIC IDs within a present package.
    
    In theory it would be reasonable to just do this unconditionally, but then
    there is this thing called reality^Wvirtualization which ruins
    everything. Virtualization is the only existing user of "physical" hotplug
    and the virtualization tools allow the above scenario. Whether that is
    actually in use or not is unknown.
    
    As it can be argued that the virtualization case is not affected by the
    issues which exposed the reported problem, allow the bogosity if the kernel
    determined that it is running in a VM for now.
    
    Fixes: 89b0f15f ("x86/cpu/topology: Get rid of cpuinfo::x86_max_cores")
    Reported-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Tested-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/87a5nbvccx.ffs@tglx
    f0551af0
topology.c 15 KB