[PATCH 00/19] arm64: Implement parallel CPU onlining with PSCI v0.2+
Will Deacon
will at kernel.org
Mon Sep 7 09:40:03 PDT 2026
Hi folks,
This series implements CONFIG_HOTPLUG_PARALLEL for arm64 by utilising
the argument to CPU_ON introduced in PSCI v0.2. This supersedes the
previous series from Jinjie [1], and I'm grateful to him for his support
getting this alternative version in shape for posting.
I previously spoke at KVM forum about this work last year:
https://www.youtube.com/watch?v=Q6kOshnnQuE
There are three major benefits realised by these changes:
1. We ditch our home-brew secondary CPU synchronisation in favour of
constructs in the core code.
2. They offer a performance advantage on some platforms, where getting a
CPU into the kernel can take time. I'm hoping Jinjie can provide
numbers in this case.
3. When used inside a confidential guest, they provide protection
against a malicious VMM that puts secondary CPUs into the guest
kernel after the onlining operation has timed out.
The first four patches are small changes to the generic code to make it
a little more "Arm-shaped" but the rest of the series is largely
confined to the arm64 architecture and PSCI driver code.
The series is based on -rc2, as it otherwise conflicts with Fuad's GMID
fix that was recently merged upstream.
All feedback welcome,
Will
[1] https://lore.kernel.org/all/20260624092537.2916971-1-ruanjinjie@huawei.com/
Cc: Thomas Gleixner <tglx at kernel.org>
Cc: Catalin Marinas <catalin.marinas at arm.com>
Cc: Borislav Petkov <bp at alien8.de>
Cc: Lorenzo Pieralisi <lpieralisi at kernel.org>
Cc: Jinjie Ruan <ruanjinjie at huawei.com>
Cc: Mark Rutland <mark.rutland at arm.com>
Cc: David Woodhouse <dwmw at amazon.co.uk>
Cc: Peter Zijlstra <peterz at infradead.org>
Cc: Marc Zyngier <maz at kernel.org>
--->8
Will Deacon (19):
cpu/hotplug: Clean up cmpxchg() logic in cpuhp_can_boot_ap()
cpu/hotplug: Avoid trying to bring up CPUs that are already online
cpu/hotplug: Avoid busy-polling on archs where cpu_relax() is a no-op
cpu/hotplug: Propagate bring-up status to
arch_cpuhp_cleanup_kick_cpu()
arm64: smp: Tidy up smp_prepare_cpus()
arm64: smp: Tidy up cpuinfo init and cpufeature updates
arm64: smp: Defer update of secondary CPU capabilities
arm64: smp: Don't bother printing the I-cache policy for each CPU
arm64: smp: Defer RCU registration during secondary CPU bringup
arm64: smp: Use generic HOTPLUG_CORE_SYNC_FULL machinery for CPU
onlining
arm64: smp: Use generic HOTPLUG_SPLIT_STARTUP machinery for CPU
onlining
arm64: cpu_ops: Make 'cpu_operations' pointer global instead of
per-cpu
arm64: cpu_ops: Introduce get_secondary_cpu_ops()
firmware/psci: Cache PSCI v0.2+ version number to avoid redundant SMCs
firmware/psci: Extend ->cpu_on() callback to take an additional
argument
arm64: cpu_ops: Expose optional argument to target cpu in ->cpu_boot()
arm64: smp: Pass secondary CPU boot parameters via firmware if
possible
arm64: smp: Use generic HOTPLUG_PARALLEL machinery for CPU onlining
arm64: smp: Harden parallel CPU bringup against broken PSCI firmware
arch/arm/kernel/psci_smp.c | 4 +-
arch/arm64/Kconfig | 2 +-
arch/arm64/include/asm/cpu.h | 7 +-
arch/arm64/include/asm/cpu_ops.h | 7 +-
arch/arm64/include/asm/smp.h | 40 +--
arch/arm64/include/asm/topology.h | 2 +
arch/arm64/kernel/acpi_parking_protocol.c | 3 +-
arch/arm64/kernel/asm-offsets.c | 1 +
arch/arm64/kernel/cpu_ops.c | 34 ++-
arch/arm64/kernel/cpufeature.c | 322 ++++++++++++----------
arch/arm64/kernel/cpuinfo.c | 27 --
arch/arm64/kernel/head.S | 64 ++++-
arch/arm64/kernel/psci.c | 13 +-
arch/arm64/kernel/smp.c | 179 ++++++------
arch/arm64/kernel/smp_spin_table.c | 2 +-
arch/arm64/mm/mmu.c | 2 +-
arch/x86/kernel/smpboot.c | 6 +-
drivers/firmware/psci/psci.c | 27 +-
include/linux/cpuhotplug.h | 4 +-
include/linux/psci.h | 3 +-
include/linux/rcutree.h | 2 +-
kernel/cpu.c | 28 +-
22 files changed, 429 insertions(+), 350 deletions(-)
--
2.55.0.979.g7e5102b832-goog
More information about the linux-arm-kernel
mailing list