powerpc/smp: Remap boot CPU onto core 0 if >= nr_cpu_ids
authorMichael Ellerman <mpe@ellerman.id.au>
Wed, 14 Feb 2024 13:14:05 +0000 (00:14 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 14 Feb 2024 13:14:05 +0000 (00:14 +1100)
commit0875f1ceba974042069f04946aa8f1d4d1e688da
tree1b835900acc1bae2de2eef1fd5230bc307263840
parent9832de654499f0bf797a3719c4d4c5bd401f18f5
powerpc/smp: Remap boot CPU onto core 0 if >= nr_cpu_ids

If nr_cpu_ids is too low to include the boot CPU, remap the boot CPU
onto logical core 0.

This is achieved in two stages. In early_init_dt_scan_cpus() the boot
CPU is renumbered to be on logical core 0, and the original boot core's
hardware ID is recorded.

Later in smp_setup_cpu_maps(), if the original boot core ID is set, the
logical CPU numbers on the 0th core are skipped in the normal device
tree search over CPU device tree nodes. Then the search is continued
until the device tree node matching the boot core is found, and those
CPUs are assigned the CPU numbers starting at 0.

This allows kdump kernels to be booted with low values for nr_cpu_ids
to conserve memory, while also allowing the crashing/boot CPU to be
any CPU.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Tested-by: Wen Xiong <wenxiong@us.ibm.com>
Link: https://msgid.link/20231229120107.2281153-5-mpe@ellerman.id.au
arch/powerpc/include/asm/smp.h
arch/powerpc/kernel/prom.c
arch/powerpc/kernel/setup-common.c