When booting bmips with SMP enabled on a BCM6358 running on CPU #1 instead of
CPU #0, the current CPU mapping code produces the following:
- smp_processor_id(): 0
- cpu_logical_map(): 1
- cpu_number_map(): 1

This is because SMP isn't supported on BCM6358 since it has a shared TLB, so
it is disabled and max_cpus is decreased from 2 to 1.

Signed-off-by: Álvaro Fernández Rojas <nolt...@gmail.com>
---
 arch/mips/kernel/smp-bmips.c | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c
index 359b176b665f..c4760cb48a67 100644
--- a/arch/mips/kernel/smp-bmips.c
+++ b/arch/mips/kernel/smp-bmips.c
@@ -134,17 +134,24 @@ static void __init bmips_smp_setup(void)
        if (!board_ebase_setup)
                board_ebase_setup = &bmips_ebase_setup;
 
-       __cpu_number_map[boot_cpu] = 0;
-       __cpu_logical_map[0] = boot_cpu;
-
-       for (i = 0; i < max_cpus; i++) {
-               if (i != boot_cpu) {
-                       __cpu_number_map[i] = cpu;
-                       __cpu_logical_map[cpu] = i;
-                       cpu++;
+       if (max_cpus > 1) {
+               __cpu_number_map[boot_cpu] = 0;
+               __cpu_logical_map[0] = boot_cpu;
+
+               for (i = 0; i < max_cpus; i++) {
+                       if (i != boot_cpu) {
+                               __cpu_number_map[i] = cpu;
+                               __cpu_logical_map[cpu] = i;
+                               cpu++;
+                       }
+                       set_cpu_possible(i, 1);
+                       set_cpu_present(i, 1);
                }
-               set_cpu_possible(i, 1);
-               set_cpu_present(i, 1);
+       } else {
+               __cpu_number_map[0] = boot_cpu;
+               __cpu_logical_map[0] = 0;
+               set_cpu_possible(0, 1);
+               set_cpu_possible(0, 1);
        }
 }
 
-- 
2.20.1

Reply via email to