aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/cpu-hotplug.txt6
-rw-r--r--arch/s390/kernel/smp.c14
2 files changed, 17 insertions, 3 deletions
diff --git a/Documentation/cpu-hotplug.txt b/Documentation/cpu-hotplug.txt
index 4d3355da0e26..e71bc6cbbc5e 100644
--- a/Documentation/cpu-hotplug.txt
+++ b/Documentation/cpu-hotplug.txt
@@ -58,6 +58,12 @@ mark such hot-pluggable cpus as disabled entries, one could use this
58parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map. 58parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map.
59 59
60 60
61possible_cpus=n [s390 only] use this to set hotpluggable cpus.
62 This option sets possible_cpus bits in
63 cpu_possible_map. Thus keeping the numbers of bits set
64 constant even if the machine gets rebooted.
65 This option overrides additional_cpus.
66
61CPU maps and such 67CPU maps and such
62----------------- 68-----------------
63[More on cpumaps and primitive to manipulate, please check 69[More on cpumaps and primitive to manipulate, please check
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 53291e94ac7b..d0a2745aec7f 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -673,15 +673,16 @@ __cpu_up(unsigned int cpu)
673} 673}
674 674
675static unsigned int __initdata additional_cpus; 675static unsigned int __initdata additional_cpus;
676static unsigned int __initdata possible_cpus;
676 677
677void __init smp_setup_cpu_possible_map(void) 678void __init smp_setup_cpu_possible_map(void)
678{ 679{
679 unsigned int pcpus, cpu; 680 unsigned int pcpus, cpu;
680 681
681 pcpus = smp_count_cpus() + additional_cpus; 682 pcpus = min(smp_count_cpus() + additional_cpus, (unsigned int) NR_CPUS);
682 683
683 if (pcpus > NR_CPUS) 684 if (possible_cpus)
684 pcpus = NR_CPUS; 685 pcpus = min(possible_cpus, (unsigned int) NR_CPUS);
685 686
686 for (cpu = 0; cpu < pcpus; cpu++) 687 for (cpu = 0; cpu < pcpus; cpu++)
687 cpu_set(cpu, cpu_possible_map); 688 cpu_set(cpu, cpu_possible_map);
@@ -698,6 +699,13 @@ static int __init setup_additional_cpus(char *s)
698} 699}
699early_param("additional_cpus", setup_additional_cpus); 700early_param("additional_cpus", setup_additional_cpus);
700 701
702static int __init setup_possible_cpus(char *s)
703{
704 possible_cpus = simple_strtoul(s, NULL, 0);
705 return 0;
706}
707early_param("possible_cpus", setup_possible_cpus);
708
701int 709int
702__cpu_disable(void) 710__cpu_disable(void)
703{ 711{