[S390] smp: fix cpu_possible_map initialization
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Tue, 14 Apr 2009 13:36:25 +0000 (15:36 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 14 Apr 2009 13:37:26 +0000 (15:37 +0200)
The cpu_possible_map by default is initialized with all ones in s390.
If the kernel paramert possible_cpus=<x> is passed the cpu_possible_map
is supposed to have x bits set.
However the current code just sets the x bits without clearing the NR_CPUS
bits that were already set. So we end up with an unchanged map that has
all bits set.
To fix this just clear the map before setting any new bits.

This broke with def6cfb70bab83c0094bc0cedd27c4eda563043e
"[S390] cpumask: Use accessors code."

Cc: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/smp.c

index 796630240715f5a85d3f400b3fc1807e81e4caca..a985a3ba44011c948ef6948ac6631a2d9685a8a2 100644 (file)
@@ -591,7 +591,8 @@ static int __init setup_possible_cpus(char *s)
        int pcpus, cpu;
 
        pcpus = simple_strtoul(s, NULL, 0);
-       for (cpu = 0; cpu < pcpus && cpu < nr_cpu_ids; cpu++)
+       init_cpu_possible(cpumask_of(0));
+       for (cpu = 1; cpu < pcpus && cpu < nr_cpu_ids; cpu++)
                set_cpu_possible(cpu, true);
        return 0;
 }