diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2006-02-17 16:52:47 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-17 16:59:27 -0500 |
commit | 37a3302618a51520e2056494715ea6b4776dd8ab (patch) | |
tree | 379fd117bb816fd012dd58ba9c900e20792a8ae3 /arch/s390/kernel/smp.c | |
parent | 255acee706b333b79f593dd366f16e1f107cccc3 (diff) |
[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: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/s390/kernel/smp.c')
-rw-r--r-- | arch/s390/kernel/smp.c | 14 |
1 files changed, 11 insertions, 3 deletions
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 | ||
675 | static unsigned int __initdata additional_cpus; | 675 | static unsigned int __initdata additional_cpus; |
676 | static unsigned int __initdata possible_cpus; | ||
676 | 677 | ||
677 | void __init smp_setup_cpu_possible_map(void) | 678 | void __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 | } |
699 | early_param("additional_cpus", setup_additional_cpus); | 700 | early_param("additional_cpus", setup_additional_cpus); |
700 | 701 | ||
702 | static int __init setup_possible_cpus(char *s) | ||
703 | { | ||
704 | possible_cpus = simple_strtoul(s, NULL, 0); | ||
705 | return 0; | ||
706 | } | ||
707 | early_param("possible_cpus", setup_possible_cpus); | ||
708 | |||
701 | int | 709 | int |
702 | __cpu_disable(void) | 710 | __cpu_disable(void) |
703 | { | 711 | { |