diff options
author | Michael Ellerman <[email protected]> | 2024-02-15 00:14:04 +1100 |
---|---|---|
committer | Michael Ellerman <[email protected]> | 2024-02-15 00:14:04 +1100 |
commit | 5580e96dad5a439d561d9648ffcbccb739c2a120 (patch) | |
tree | 1ab772d3d180fe868ad7844f5f8a1898cc4aed8d | |
parent | 41bccc98fb7931d63d03f326a746ac4d429c1dd3 (diff) |
powerpc/smp: Adjust nr_cpu_ids to cover all threads of a core
If nr_cpu_ids is too low to include at least all the threads of a single
core adjust nr_cpu_ids upwards. This avoids triggering odd bugs in code
that assumes all threads of a core are available.
Cc: [email protected]
Signed-off-by: Michael Ellerman <[email protected]>
Link: https://msgid.link/[email protected]
-rw-r--r-- | arch/powerpc/kernel/prom.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 0b5878c3125b..58e80076bed5 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c @@ -375,6 +375,12 @@ static int __init early_init_dt_scan_cpus(unsigned long node, if (IS_ENABLED(CONFIG_PPC64)) boot_cpu_hwid = be32_to_cpu(intserv[found_thread]); + if (nr_cpu_ids % nthreads != 0) { + set_nr_cpu_ids(ALIGN(nr_cpu_ids, nthreads)); + pr_warn("nr_cpu_ids was not a multiple of threads_per_core, adjusted to %d\n", + nr_cpu_ids); + } + /* * PAPR defines "logical" PVR values for cpus that * meet various levels of the architecture: |