diff options
Diffstat (limited to 'arch/sparc64/kernel/smp.c')
-rw-r--r-- | arch/sparc64/kernel/smp.c | 15 |
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); |