* [patch 1/3] s390: smp initialization speed
@ 2006-02-16 16:40 Heiko Carstens
0 siblings, 0 replies; only message in thread
From: Heiko Carstens @ 2006-02-16 16:40 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
From: Heiko Carstens <heiko.carstens@de.ibm.com>
The last changes that introduced the additional_cpus command line parameter
also introduced a regression regarding smp initialization speed. In
smp_setup_cpu_possible_map() cpu_present_map is set to the same value
as cpu_possible_map. Especially that means that bits in the present map
will be set for cpus that are not present. This will cause a slow down
in the initial cpu_up() loop in smp_init() since trying to take cpus online
that aren't present takes a while.
Fix this by setting only bits for present cpus in cpu_present_map and
set cpu_present_map to cpu_possible_map in smp_cpus_done().
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
arch/s390/kernel/smp.c | 15 ++++++++++-----
1 files changed, 10 insertions(+), 5 deletions(-)
diff -urpN linux-2.6/arch/s390/kernel/smp.c linux-2.6-patched/arch/s390/kernel/smp.c
--- linux-2.6/arch/s390/kernel/smp.c 2006-02-16 17:10:59.000000000 +0100
+++ linux-2.6-patched/arch/s390/kernel/smp.c 2006-02-16 17:10:59.000000000 +0100
@@ -677,17 +677,21 @@ static unsigned int __initdata possible_
void __init smp_setup_cpu_possible_map(void)
{
- unsigned int pcpus, cpu;
+ unsigned int phy_cpus, pos_cpus, cpu;
- pcpus = min(smp_count_cpus() + additional_cpus, (unsigned int) NR_CPUS);
+ phy_cpus = smp_count_cpus();
+ pos_cpus = min(phy_cpus + additional_cpus, (unsigned int) NR_CPUS);
if (possible_cpus)
- pcpus = min(possible_cpus, (unsigned int) NR_CPUS);
+ pos_cpus = min(possible_cpus, (unsigned int) NR_CPUS);
- for (cpu = 0; cpu < pcpus; cpu++)
+ for (cpu = 0; cpu < pos_cpus; cpu++)
cpu_set(cpu, cpu_possible_map);
- cpu_present_map = cpu_possible_map;
+ phy_cpus = min(phy_cpus, pos_cpus);
+
+ for (cpu = 0; cpu < phy_cpus; cpu++)
+ cpu_set(cpu, cpu_present_map);
}
#ifdef CONFIG_HOTPLUG_CPU
@@ -843,6 +847,7 @@ void __devinit smp_prepare_boot_cpu(void
void smp_cpus_done(unsigned int max_cpus)
{
+ cpu_present_map = cpu_possible_map;
}
/*
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2006-02-16 16:40 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-02-16 16:40 [patch 1/3] s390: smp initialization speed Heiko Carstens
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®