Lines 77-85
Link Here
|
77 |
PCPU_SET(awake, 1); |
77 |
PCPU_SET(awake, 1); |
78 |
__asm __volatile("msync; isync"); |
78 |
__asm __volatile("msync; isync"); |
79 |
|
79 |
|
|
|
80 |
powerpc_sync(); |
80 |
while (ap_letgo == 0) |
81 |
while (ap_letgo == 0) |
|
|
82 |
{ |
81 |
__asm __volatile("or 31,31,31"); |
83 |
__asm __volatile("or 31,31,31"); |
|
|
84 |
powerpc_sync(); |
85 |
} |
82 |
__asm __volatile("or 6,6,6"); |
86 |
__asm __volatile("or 6,6,6"); |
|
|
87 |
isync(); |
83 |
|
88 |
|
84 |
/* |
89 |
/* |
85 |
* Set timebase as soon as possible to meet an implicit rendezvous |
90 |
* Set timebase as soon as possible to meet an implicit rendezvous |
Lines 262-269
Link Here
|
262 |
__asm __volatile("msync; isync"); |
267 |
__asm __volatile("msync; isync"); |
263 |
|
268 |
|
264 |
/* Let APs continue */ |
269 |
/* Let APs continue */ |
265 |
atomic_store_rel_int(&ap_letgo, 1); |
270 |
ap_letgo= 1; // depend on prior sync, no need to lwsync first |
266 |
|
271 |
|
|
|
272 |
powerpc_sync(); // analogous to what the ap's do (more similar time frame?) |
273 |
if (ap_letgo) isync(); |
274 |
|
267 |
platform_smp_timebase_sync(ap_timebase, 0); |
275 |
platform_smp_timebase_sync(ap_timebase, 0); |
268 |
|
276 |
|
269 |
while (ap_awake < smp_cpus) |
277 |
while (ap_awake < smp_cpus) |