Index: /usr/src/sys/powerpc/powerpc/mp_machdep.c =================================================================== --- /usr/src/sys/powerpc/powerpc/mp_machdep.c (revision 345758) +++ /usr/src/sys/powerpc/powerpc/mp_machdep.c (working copy) @@ -77,9 +77,14 @@ PCPU_SET(awake, 1); __asm __volatile("msync; isync"); + powerpc_sync(); while (ap_letgo == 0) + { __asm __volatile("or 31,31,31"); + powerpc_sync(); + } __asm __volatile("or 6,6,6"); + isync(); /* * Set timebase as soon as possible to meet an implicit rendezvous @@ -262,8 +267,11 @@ __asm __volatile("msync; isync"); /* Let APs continue */ - atomic_store_rel_int(&ap_letgo, 1); + ap_letgo= 1; // depend on prior sync, no need to lwsync first + powerpc_sync(); // analogous to what the ap's do (more similar time frame?) + if (ap_letgo) isync(); + platform_smp_timebase_sync(ap_timebase, 0); while (ap_awake < smp_cpus)