summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYinghai Lu <yinghailu@gmail.com>2005-01-03 20:54:43 +0000
committerYinghai Lu <yinghailu@gmail.com>2005-01-03 20:54:43 +0000
commita335402bec6511c11ab54c943287e7be7fb1672d (patch)
tree6fd71c2db3846a60a027cb724c802e44b2d484c8 /src
parente089f00ad494ffbb91f605b09b59375ff4eb30b3 (diff)
serialize cpus for >2
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1837 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src')
-rw-r--r--src/cpu/x86/lapic/lapic_cpu_init.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/cpu/x86/lapic/lapic_cpu_init.c b/src/cpu/x86/lapic/lapic_cpu_init.c
index b477d1f0cc..20615e61c8 100644
--- a/src/cpu/x86/lapic/lapic_cpu_init.c
+++ b/src/cpu/x86/lapic/lapic_cpu_init.c
@@ -229,7 +229,13 @@ int start_cpu(device_t cpu)
void secondary_cpu_init(void)
{
atomic_inc(&active_cpus);
+#if CONFIG_MAX_CPUS>2
+ spin_lock(&start_cpu_lock);
+#endif
cpu_initialize();
+#if CONFIG_MAX_CPUS>2
+ spin_unlock(&start_cpu_lock);
+#endif
atomic_dec(&active_cpus);
stop_this_cpu();
}
@@ -254,6 +260,9 @@ static void initialize_other_cpus(struct bus *cpu_bus)
printk_err("CPU %u would not start!\n",
cpu->path.u.apic.apic_id);
}
+#if CONFIG_MAX_CPUS>2
+ udelay(10);
+#endif
}
/* Now loop until the other cpus have finished initializing */