aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/x86/lapic/lapic_cpu_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/x86/lapic/lapic_cpu_init.c')
-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 */