arm64: Add HOTPLUG_PARALLEL support for secondary CPUs
| From: | Jinjie Ruan <ruanjinjie-AT-huawei.com> | |
| To: | <catalin.marinas-AT-arm.com>, <will-AT-kernel.org>, <tsbogend-AT-alpha.franken.de>, <pjw-AT-kernel.org>, <palmer-AT-dabbelt.com>, <aou-AT-eecs.berkeley.edu>, <alex-AT-ghiti.fr>, <tglx-AT-kernel.org>, <mingo-AT-redhat.com>, <bp-AT-alien8.de>, <dave.hansen-AT-linux.intel.com>, <hpa-AT-zytor.com>, <peterz-AT-infradead.org>, <kees-AT-kernel.org>, <nathan-AT-kernel.org>, <linusw-AT-kernel.org>, <jpoimboe-AT-kernel.org>, <lukas.bulwahn-AT-redhat.com>, <ryan.roberts-AT-arm.com>, <ojeda-AT-kernel.org>, <maz-AT-kernel.org>, <timothy.hayes-AT-arm.com>, <lpieralisi-AT-kernel.org>, <thuth-AT-redhat.com>, <menglong8.dong-AT-gmail.com>, <oupton-AT-kernel.org>, <yeoreum.yun-AT-arm.com>, <miko.lenczewski-AT-arm.com>, <broonie-AT-kernel.org>, <kevin.brodsky-AT-arm.com>, <james.clark-AT-linaro.org>, <tabba-AT-google.com>, <mrigendra.chaubey-AT-gmail.com>, <arnd-AT-arndb.de>, <anshuman.khandual-AT-arm.com>, <x86-AT-kernel.org>, <linux-kernel-AT-vger.kernel.org>, <linux-arm-kernel-AT-lists.infradead.org>, <linux-mips-AT-vger.kernel.org>, <linux-riscv-AT-lists.infradead.org>, <apatel-AT-ventanamicro.com>, <mhklinux-AT-outlook.com> | |
| Subject: | [PATCH v2 0/4] arm64: Add HOTPLUG_PARALLEL support for secondary CPUs | |
| Date: | Thu, 18 Jun 2026 17:24:40 +0800 | |
| Message-ID: | <20260618092444.1316336-1-ruanjinjie@huawei.com> | |
| Cc: | <ruanjinjie-AT-huawei.com> | |
| Archive-link: | Article |
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-r... 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
