All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC][PATCH] mips: Fix arch_spin_unlock()
@ 2015-11-12 12:31 Peter Zijlstra
  2015-11-12 12:35 ` Peter Zijlstra
                   ` (3 more replies)
  0 siblings, 4 replies; 54+ messages in thread
From: Peter Zijlstra @ 2015-11-12 12:31 UTC (permalink / raw)
  To: ralf, ddaney
  Cc: linux-kernel, Paul McKenney, Will Deacon, torvalds, boqun.feng

Hi

I think the MIPS arch_spin_unlock() is borken.

spin_unlock() must have RELEASE semantics, these require that no LOADs
nor STOREs leak out from the critical section.

>From what I know MIPS has a relaxed memory model which allows reads to
pass stores, and as implemented arch_spin_unlock() only issues a wmb
which doesn't order prior reads vs later stores.

Therefore upgrade the wmb() to smp_mb().

(Also, why the unconditional wmb, as opposed to smp_wmb() ?)

Maybe-Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
diff --git a/arch/mips/include/asm/spinlock.h b/arch/mips/include/asm/spinlock.h
index 40196bebe849..b2ca13f06152 100644
--- a/arch/mips/include/asm/spinlock.h
+++ b/arch/mips/include/asm/spinlock.h
@@ -140,7 +140,7 @@ static inline void arch_spin_lock(arch_spinlock_t *lock)
 static inline void arch_spin_unlock(arch_spinlock_t *lock)
 {
 	unsigned int serving_now = lock->h.serving_now + 1;
-	wmb();
+	smp_mb();
 	lock->h.serving_now = (u16)serving_now;
 	nudge_writes();
 }

^ permalink raw reply related	[flat|nested] 54+ messages in thread

end of thread, other threads:[~2016-02-09 11:43 UTC | newest]

Thread overview: 54+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-12 12:31 [RFC][PATCH] mips: Fix arch_spin_unlock() Peter Zijlstra
2015-11-12 12:35 ` Peter Zijlstra
2015-11-12 13:31 ` Måns Rullgård
2015-11-12 14:32 ` Paul E. McKenney
2015-11-12 14:50   ` Måns Rullgård
2015-11-12 14:59     ` Paul E. McKenney
2015-11-12 17:46 ` David Daney
2015-11-12 18:00   ` Peter Zijlstra
2015-11-12 18:13   ` Måns Rullgård
2015-11-12 18:17     ` David Daney
2016-01-27  9:57       ` Maciej W. Rozycki
2016-01-27 11:43         ` Will Deacon
2016-01-27 12:41           ` Maciej W. Rozycki
2016-01-28  1:11             ` Boqun Feng
2016-01-27 14:54           ` Peter Zijlstra
2016-01-27 15:21             ` Will Deacon
2016-01-27 23:38               ` Paul E. McKenney
2016-01-28  9:57                 ` Will Deacon
2016-01-28 22:31                   ` Paul E. McKenney
2016-01-29  9:59                     ` Will Deacon
2016-01-29 10:22                       ` Paul E. McKenney
2016-02-01 13:56                         ` Will Deacon
2016-02-02  3:54                           ` Paul E. McKenney
2016-02-02  5:19                             ` Boqun Feng
2016-02-02  6:44                               ` Paul E. McKenney
2016-02-02  8:07                                 ` Linus Torvalds
2016-02-02  8:19                                   ` Linus Torvalds
2016-02-02  9:34                                     ` Boqun Feng
2016-02-02 17:30                                       ` Linus Torvalds
2016-02-02 17:51                                         ` Will Deacon
2016-02-02 18:06                                           ` Linus Torvalds
2016-02-02 19:30                                             ` Will Deacon
2016-02-02 19:55                                               ` Linus Torvalds
2016-02-03 19:13                                                 ` Will Deacon
2016-02-03  8:33                                               ` Ingo Molnar
2016-02-03 13:32                                                 ` Will Deacon
2016-02-03 19:03                                                   ` Will Deacon
2016-02-09 11:23                                                     ` Ingo Molnar
2016-02-09 11:42                                                       ` Will Deacon
2016-02-02 12:02                                     ` Paul E. McKenney
2016-02-02 17:56                                       ` Linus Torvalds
2016-02-02 22:30                                         ` Paul E. McKenney
2016-02-02 14:49                                     ` Ralf Baechle
2016-02-02 14:54                                       ` Måns Rullgård
2016-02-02 14:58                                         ` Ralf Baechle
2016-02-02 15:51                                           ` Måns Rullgård
2016-02-02 17:23                                 ` Peter Zijlstra
2016-02-02 22:38                                   ` Paul E. McKenney
2016-02-02 11:45                               ` Will Deacon
2016-02-02 12:12                                 ` Boqun Feng
2016-02-02 12:20                                   ` Will Deacon
2016-02-02 13:18                                     ` Boqun Feng
2016-02-02 17:12                                     ` Paul E. McKenney
2016-02-02 17:37                                       ` Will Deacon

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.