Coregroup topology is currently disabled for shared LPARs even when coregroup information is available through the associativity hierarchy.
The associativity hierarchy differs between shared and dedicated LPARs. For dedicated LPARs, a coregroup level is present when the hierarchy extends beyond primary_domain_index + 1. For shared LPARs, the hierarchy has one fewer level and coregroup information is available when it extends beyond primary_domain_index. The processor sharing mode is not known when NUMA properties are initially parsed. It is determined later in pSeries_setup_arch(). CPU associativity therefore initially uses the dedicated-LPAR interpretation. Once shared processor mode is known, reprocess CPU associativity to detect the coregroup level using the shared-LPAR hierarchy. The series also separates coregroup discovery from NUMA enablement. CPU associativity is processed even with numa=disabled, while NUMA node, memory and PCI processing remain disabled. Patches 1-3 prepare the coregroup detection code by removing redundant coregroup detection, consolidating the VPHN associativity lookup, and factoring out the coregroup-level check. Patches 4-6 allow coregroup discovery with NUMA disabled and restructure CPU associativity processing so that it can be reused after processor sharing mode is known. Patch 7 accounts for the shared-LPAR associativity hierarchy and reprocesses CPU associativity after shared processor mode has been identified. Testing ------- Tested on: - Dedicated LPAR - Shared LPAR - numa=disabled - CPU hotplug - Memory hotplug On a shared LPAR, /proc/schedstat did not contain an MC domain before the series: domain0 SMT 00000000,00000000,00000055 ... domain1 PKG 000000ff,000000ff,000000ff ... domain2 NUMA ffffffff,ffffffff,ffffffff ... After the series, an MC domain is present between SMT and PKG: domain0 SMT 00000000,00000000,00000055 ... domain1 MC 00000000,00000000,000000ff ... domain2 PKG 000000ff,000000ff,000000ff ... domain3 NUMA ffffffff,ffffffff,ffffffff ... Srikar Dronamraju (7): powerpc/numa: Remove redundant coregroup enablement powerpc/numa: Consolidate VPHN associativity lookup powerpc/numa: Factor out coregroup availability check powerpc/numa: Allow coregroup detection when NUMA is disabled powerpc/numa: Consolidate associativity lookup in parse_numa_properties powerpc/numa: Extract CPU associativity processing into separate function powerpc/numa: Enable coregroup support for shared LPARs arch/powerpc/include/asm/topology.h | 2 + arch/powerpc/kernel/smp.c | 4 - arch/powerpc/mm/numa.c | 176 +++++++++++-------------- arch/powerpc/platforms/pseries/setup.c | 6 + 4 files changed, 83 insertions(+), 105 deletions(-) -- 2.47.1
