1
0
Fork 0
mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-01-26 02:25:00 -05:00
linux/arch/arm64/kernel
Lorenzo Pieralisi e189624916 arm64: numa: rework ACPI NUMA initialization
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: Hanjun Guo <hanjun.guo@linaro.org>
Tested-by: John Garry <john.garry@huawei.com>
Fixes: d8b47fca8c ("arm64, ACPI, NUMA: NUMA support based on SRAT and
SLIT")
Link: http://lkml.kernel.org/r/1527768879-88161-2-git-send-email-xiexiuqi@huawei.com
Reported-by: Xie XiuQi <xiexiuqi@huawei.com>
Signed-off-by: Lorenzo 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: Will Deacon <will.deacon@arm.com>
2018-07-09 18:21:40 +01:00
..
probes
vdso
.gitignore
acpi.c
acpi_numa.c arm64: numa: rework ACPI NUMA initialization 2018-07-09 18:21:40 +01:00
acpi_parking_protocol.c
alternative.c arm64: Avoid flush_icache_range() in alternatives patching code 2018-06-27 18:21:53 +01:00
arm64ksyms.c arm64: export tishift functions to modules 2018-05-21 19:00:48 +01:00
armv8_deprecated.c arm64: use PSR_AA32 definitions 2018-07-05 17:24:14 +01:00
asm-offsets.c arm64: KVM: Handle guest's ARCH_WORKAROUND_2 requests 2018-05-31 18:00:57 +01:00
cacheinfo.c arm64: Add support for ACPI based firmware tables 2018-05-17 17:28:09 +01:00
cpu-reset.h arm64: kexec: always reset to EL2 if present 2018-07-04 18:34:24 +01:00
cpu-reset.S
cpu_errata.c arm64: errata: Don't define type field twice for arm64_errata[] entries 2018-07-06 13:17:25 +01:00
cpu_ops.c
cpufeature.c arm64: use PSR_AA32 definitions 2018-07-05 17:24:14 +01:00
cpuidle.c
cpuinfo.c arm64: Expose Arm v8.4 features 2018-03-19 18:14:27 +00:00
crash_dump.c
debug-monitors.c
efi-entry.S
efi-header.S
efi-rt-wrapper.S
efi.c
entry-fpsimd.S arm64/sve: Write ZCR_EL1 on context switch only if changed 2018-05-17 18:19:53 +01:00
entry-ftrace.S
entry.S arm64: ssbd: Introduce thread flag to control userspace mitigation 2018-05-31 17:35:32 +01:00
entry32.S
fpsimd.c Small update for KVM. 2018-06-12 11:34:04 -07:00
ftrace.c
head.S
hibernate-asm.S
hibernate.c arm64: ssbd: Restore mitigation status on CPU resume 2018-05-31 17:35:19 +01:00
hw_breakpoint.c compat: Move compat_timespec/ timeval to compat_time.h 2018-04-19 13:29:54 +02:00
hyp-stub.S
image.h
insn.c arm64: insn: Don't fallback on nosync path for general insn patching 2018-07-05 17:24:48 +01:00
io.c
irq.c
jump_label.c
kaslr.c
kgdb.c
kuser32.S
machine_kexec.c arm64: kexec: always reset to EL2 if present 2018-07-04 18:34:24 +01:00
Makefile arm64: ssbd: Add prctl interface for per-thread mitigation 2018-05-31 18:00:52 +01:00
module-plts.c arm64/kernel: rename module_emit_adrp_veneer->module_emit_veneer_for_adrp 2018-04-24 19:07:35 +01:00
module.c arm64: Avoid flush_icache_range() in alternatives patching code 2018-06-27 18:21:53 +01:00
module.lds
paravirt.c
pci.c
perf_callchain.c
perf_event.c arm_pmu: simplify arm_pmu::handle_irq 2018-05-21 18:07:05 +01:00
perf_regs.c compat: Move compat_timespec/ timeval to compat_time.h 2018-04-19 13:29:54 +02:00
process.c arm64: use PSR_AA32 definitions 2018-07-05 17:24:14 +01:00
psci.c
ptrace.c arm64: use PSR_AA32 definitions 2018-07-05 17:24:14 +01:00
reloc_test_core.c arm64: fix undefined reference to 'printk' 2018-03-19 18:14:25 +00:00
reloc_test_syms.S arm64: fix undefined reference to 'printk' 2018-03-19 18:14:25 +00:00
relocate_kernel.S
return_address.c
sdei.c
setup.c
signal.c arm64: Fix syscall restarting around signal suppressed by tracer 2018-06-08 13:21:39 +01:00
signal32.c arm64: use PSR_AA32 definitions 2018-07-05 17:24:14 +01:00
sleep.S
smccc-call.S
smp.c arm64: numa: rework ACPI NUMA initialization 2018-07-09 18:21:40 +01:00
smp_spin_table.c
ssbd.c arm64: ssbd: Add prctl interface for per-thread mitigation 2018-05-31 18:00:52 +01:00
stacktrace.c arm64: fix infinite stacktrace 2018-07-04 18:34:23 +01:00
suspend.c arm64: ssbd: Restore mitigation status on CPU resume 2018-05-31 17:35:19 +01:00
sys.c mm: add ksys_mmap_pgoff() helper; remove in-kernel calls to sys_mmap_pgoff() 2018-04-02 20:16:11 +02:00
sys32.c
sys_compat.c signal: Ensure every siginfo we send has all bits initialized 2018-04-25 10:40:51 -05:00
time.c
topology.c arm64: topology: re-introduce numa mask check for scheduler MC selection 2018-07-06 13:18:18 +01:00
trace-events-emulation.h
traps.c Merge branch 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2018-06-04 15:23:48 -07:00
vdso.c
vmlinux.lds.S arm64: remove no-op macro VMLINUX_SYMBOL() 2018-05-15 18:14:24 +01:00