summaryrefslogtreecommitdiff
path: root/arch/sparc64/kernel/smp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc64/kernel/smp.c')
-rw-r--r--arch/sparc64/kernel/smp.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index 32fc448f737c..a97b8822c22c 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -159,7 +159,7 @@ static inline long get_delta (long *rt, long *master)
for (i = 0; i < NUM_ITERS; i++) {
t0 = tick_ops->get_tick();
go[MASTER] = 1;
- membar_safe("#StoreLoad");
+ membar_storeload();
while (!(tm = go[SLAVE]))
rmb();
go[SLAVE] = 0;
@@ -253,7 +253,7 @@ static void smp_synchronize_one_tick(int cpu)
/* now let the client proceed into his loop */
go[MASTER] = 0;
- membar_safe("#StoreLoad");
+ membar_storeload();
spin_lock_irqsave(&itc_sync_lock, flags);
{
@@ -263,7 +263,7 @@ static void smp_synchronize_one_tick(int cpu)
go[MASTER] = 0;
wmb();
go[SLAVE] = tick_ops->get_tick();
- membar_safe("#StoreLoad");
+ membar_storeload();
}
}
spin_unlock_irqrestore(&itc_sync_lock, flags);
@@ -1118,6 +1118,7 @@ void smp_capture(void)
smp_processor_id());
#endif
penguins_are_doing_time = 1;
+ membar_storestore_loadstore();
atomic_inc(&smp_capture_registry);
smp_cross_call(&xcall_capture, 0, 0, 0);
while (atomic_read(&smp_capture_registry) != ncpus)
@@ -1137,13 +1138,13 @@ void smp_release(void)
smp_processor_id());
#endif
penguins_are_doing_time = 0;
- membar_safe("#StoreLoad");
+ membar_storeload_storestore();
atomic_dec(&smp_capture_registry);
}
}
-/* Imprisoned penguins run with %pil == PIL_NORMAL_MAX, but PSTATE_IE
- * set, so they can service tlb flush xcalls...
+/* Imprisoned penguins run with %pil == 15, but PSTATE_IE set, so they
+ * can service tlb flush xcalls...
*/
extern void prom_world(int);
@@ -1156,7 +1157,7 @@ void smp_penguin_jailcell(int irq, struct pt_regs *regs)
__asm__ __volatile__("flushw");
prom_world(1);
atomic_inc(&smp_capture_registry);
- membar_safe("#StoreLoad");
+ membar_storeload_storestore();
while (penguins_are_doing_time)
rmb();
atomic_dec(&smp_capture_registry);