[PATCH v2 0/4] arm64: Add HOTPLUG_PARALLEL support for secondary CPUs
Jinjie Ruan
ruanjinjie at huawei.com
Thu Jun 18 02:24:40 PDT 2026
Support for parallel secondary CPU bringup is already utilized by x86,
MIPS, and RISC-V. This patch brings this capability to the arm64
architecture.
Introduce CONFIG_PARALLEL_SMT_PRIMARY_FIRST to avoid primary SMT threads
to boot first constraint.
And Add a 'cpu' parameter to update_cpu_boot_status() to allow updating the
boot status at a per-CPU granularity during parallel bringup.
Rework the global `secondary_data` accessed during early boot into
a per-CPU array `cpu_boot_data` to allow secondary CPUs to boot
in parallel.
And reuse `__cpu_logical_map` array in the early boot code in head.S
to resolve each secondary CPU's logical ID concurrently.
Changes in v2:
- Remove RFC.
- Add Tested-by.
- Fix AI review issues in [1].
- Add arch_cpuhp_init_parallel_bringup() to check psci boot.
- Reuse `__cpu_logical_map` instead of a new aray.
- Defer rcutree_report_cpu_starting() until after
check_local_cpu_capabilities() to prevent a potential control CPU
deadlock if an early capability check fails.
- Move the assembly in head.S to a macro called `mpidr_to_cpuid`.
- Add `SECONDARY_DATA_SHIFT` for `lsl` to access `cpu_boot_data`.
- Add sizeof(struct secondary_data) power of 2 assert check.
- Expand testing with more data collected from real hardware.
[1] https://sashiko.dev/#/patchset/20260611133809.3854977-1-ruanjinjie%40huawei.com
Jinjie Ruan (4):
cpu/hotplug: Introduce CONFIG_PARALLEL_SMT_PRIMARY_FIRST
arm64: smp: Pass CPU ID to update_cpu_boot_status()
arm64: smp: Defer RCU reporting until after local CPU capability
checks
arm64: Add HOTPLUG_PARALLEL support for secondary CPUs
arch/Kconfig | 4 +++
arch/arm64/Kconfig | 1 +
arch/arm64/include/asm/smp.h | 17 ++++++++++---
arch/arm64/kernel/asm-offsets.c | 4 +++
arch/arm64/kernel/cpufeature.c | 22 ++++++++--------
arch/arm64/kernel/head.S | 36 ++++++++++++++++++++++++++
arch/arm64/kernel/smp.c | 45 ++++++++++++++++++++++++++++-----
arch/arm64/mm/context.c | 4 +--
arch/mips/Kconfig | 1 +
arch/riscv/Kconfig | 1 +
arch/x86/Kconfig | 1 +
kernel/cpu.c | 6 ++++-
12 files changed, 119 insertions(+), 23 deletions(-)
--
2.34.1
More information about the linux-riscv
mailing list