summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/arm/arm/mp_machdep.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/arm/arm/mp_machdep.c b/sys/arm/arm/mp_machdep.c
index c0f723c..88104f0 100644
--- a/sys/arm/arm/mp_machdep.c
+++ b/sys/arm/arm/mp_machdep.c
@@ -185,8 +185,11 @@ init_secondary(int cpu)
atomic_add_rel_32(&mp_naps, 1);
/* Spin until the BSP releases the APs */
- while (!aps_ready)
- ;
+ while (!atomic_load_acq_int(&aps_ready)) {
+#if __ARM_ARCH >= 7
+ __asm __volatile("wfe");
+#endif
+ }
/* Initialize curthread */
KASSERT(PCPU_GET(idlethread) != NULL, ("no idle thread"));
@@ -353,6 +356,10 @@ release_aps(void *dummy __unused)
arm_unmask_irq(i);
}
atomic_store_rel_int(&aps_ready, 1);
+ /* Wake the other threads up */
+#if __ARM_ARCH >= 7
+ armv7_sev();
+#endif
printf("Release APs\n");
OpenPOWER on IntegriCloud