• Lorenzo Pieralisi's avatar
    arm64: numa: rework ACPI NUMA initialization · e1896249
    Lorenzo Pieralisi authored
    Current ACPI ARM64 NUMA initialization code in
    
    acpi_numa_gicc_affinity_init()
    
    carries out NUMA nodes creation and cpu<->node mappings at the same time
    in the arch backend so that a single SRAT walk is needed to parse both
    pieces of information.  This implies that the cpu<->node mappings must
    be stashed in an array (sized NR_CPUS) so that SMP code can later use
    the stashed values to avoid another SRAT table walk to set-up the early
    cpu<->node mappings.
    
    If the kernel is configured with a NR_CPUS value less than the actual
    processor entries in the SRAT (and MADT), the logic in
    acpi_numa_gicc_affinity_init() is broken in that the cpu<->node mapping
    is only carried out (and stashed for future use) only for a number of
    SRAT entries up to NR_CPUS, which do not necessarily correspond to the
    possible cpus detected at SMP initialization in
    acpi_map_gic_cpu_interface() (ie MADT and SRAT processor entries order
    is not enforced), which leaves the kernel with broken cpu<->node
    mappings.
    
    Furthermore, given the current ACPI NUMA code parsing logic in
    acpi_numa_gicc_affinity_init(), PXM domains for CPUs that are not parsed
    because they exceed NR_CPUS entries are not mapped to NUMA nodes (ie the
    PXM corresponding node is not created in the kernel) leaving the system
    with a broken NUMA topology.
    
    Rework the ACPI ARM64 NUMA initialization process so that the NUMA
    nodes creation and cpu<->node mappings are decoupled. cpu<->node
    mappings are moved to SMP initialization code (where they are needed),
    at the cost of an extra SRAT walk so that ACPI NUMA mappings can be
    batched before being applied, fixing current parsing pitfalls.
    Acked-by: default avatarHanjun Guo <hanjun.guo@linaro.org>
    Tested-by: default avatarJohn Garry <john.garry@huawei.com>
    Fixes: d8b47fca ("arm64, ACPI, NUMA: NUMA support based on SRAT and
    SLIT")
    Link: http://lkml.kernel.org/r/1527768879-88161-2-git-send-email-xiexiuqi@huawei.comReported-by: default avatarXie XiuQi <xiexiuqi@huawei.com>
    Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Cc: Punit Agrawal <punit.agrawal@arm.com>
    Cc: Jonathan Cameron <jonathan.cameron@huawei.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Hanjun Guo <guohanjun@huawei.com>
    Cc: Ganapatrao Kulkarni <gkulkarni@caviumnetworks.com>
    Cc: Jeremy Linton <jeremy.linton@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Xie XiuQi <xiexiuqi@huawei.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    e1896249
smp.c 22.9 KB