Commit 37a33026 authored by Heiko Carstens's avatar Heiko Carstens Committed by Linus Torvalds

[PATCH] s390: possible_cpus parameter

Introduce possible_cpus command line option.  Hard sets the number of bits set
in cpu_possible_map.  Unlike the additional_cpus parameter this one guarantees
that num_possible_cpus() will stay constant even if the system gets rebooted
and a different number of cpus are present at startup.
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 255acee7
...@@ -58,6 +58,12 @@ mark such hot-pluggable cpus as disabled entries, one could use this ...@@ -58,6 +58,12 @@ mark such hot-pluggable cpus as disabled entries, one could use this
parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map. parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map.
possible_cpus=n [s390 only] use this to set hotpluggable cpus.
This option sets possible_cpus bits in
cpu_possible_map. Thus keeping the numbers of bits set
constant even if the machine gets rebooted.
This option overrides additional_cpus.
CPU maps and such CPU maps and such
----------------- -----------------
[More on cpumaps and primitive to manipulate, please check [More on cpumaps and primitive to manipulate, please check
......
...@@ -673,15 +673,16 @@ __cpu_up(unsigned int cpu) ...@@ -673,15 +673,16 @@ __cpu_up(unsigned int cpu)
} }
static unsigned int __initdata additional_cpus; static unsigned int __initdata additional_cpus;
static unsigned int __initdata possible_cpus;
void __init smp_setup_cpu_possible_map(void) void __init smp_setup_cpu_possible_map(void)
{ {
unsigned int pcpus, cpu; unsigned int pcpus, cpu;
pcpus = smp_count_cpus() + additional_cpus; pcpus = min(smp_count_cpus() + additional_cpus, (unsigned int) NR_CPUS);
if (pcpus > NR_CPUS) if (possible_cpus)
pcpus = NR_CPUS; pcpus = min(possible_cpus, (unsigned int) NR_CPUS);
for (cpu = 0; cpu < pcpus; cpu++) for (cpu = 0; cpu < pcpus; cpu++)
cpu_set(cpu, cpu_possible_map); cpu_set(cpu, cpu_possible_map);
...@@ -698,6 +699,13 @@ static int __init setup_additional_cpus(char *s) ...@@ -698,6 +699,13 @@ static int __init setup_additional_cpus(char *s)
} }
early_param("additional_cpus", setup_additional_cpus); early_param("additional_cpus", setup_additional_cpus);
static int __init setup_possible_cpus(char *s)
{
possible_cpus = simple_strtoul(s, NULL, 0);
return 0;
}
early_param("possible_cpus", setup_possible_cpus);
int int
__cpu_disable(void) __cpu_disable(void)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment