Index: sys/arch/arm/arm/cpu_subr.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/arm/cpu_subr.c,v retrieving revision 1.1 diff -u -p -r1.1 cpu_subr.c --- sys/arch/arm/arm/cpu_subr.c 15 Feb 2020 08:16:10 -0000 1.1 +++ sys/arch/arm/arm/cpu_subr.c 30 Nov 2020 16:57:11 -0000 @@ -86,7 +86,8 @@ cpu_boot_secondary_processors(void) for (size_t n = 0; n < __arraycount(arm_cpu_mbox); n++) atomic_or_ulong(&arm_cpu_mbox[n], arm_cpu_hatched[n]); - __asm __volatile ("sev; sev; sev"); + dsb(ishst); + __asm __volatile ("sev"); /* wait all cpus have done cpu_hatch() */ for (cpuno = 1; cpuno < ncpu; cpuno++) { @@ -97,7 +98,7 @@ cpu_boot_secondary_processors(void) const u_long bit = __BIT(cpuno % CPUINDEX_DIVISOR); while (membar_consumer(), arm_cpu_mbox[off] & bit) { - __asm __volatile ("wfe"); + __asm __volatile ("wfe" ::: "memory"); } /* Add processor to kcpuset */ kcpuset_set(kcpuset_attached, cpuno); @@ -136,7 +137,8 @@ cpu_clr_mbox(int cpuindex) /* Notify cpu_boot_secondary_processors that we're done */ atomic_and_ulong(&arm_cpu_mbox[off], ~bit); membar_producer(); - __asm __volatile("sev; sev; sev"); + dsb(ishst); + __asm __volatile("sev"); } #endif