MIPS: Replace smp_mb with release barrier function in unlocks.
authorLeonid Yegoshin <Leonid.Yegoshin@imgtec.com>
Tue, 2 Jun 2015 00:09:52 +0000 (17:09 -0700)
committerRalf Baechle <ralf@linux-mips.org>
Sun, 21 Jun 2015 19:54:30 +0000 (21:54 +0200)
Repleace smp_mb() in arch_write_unlock() and __clear_bit_unlock() to
smp_mb__before_llsc() call which does "release" barrier functionality.

It seems like it was missed in commit f252ffd50c97dae87b45f1dbad24f71358ccfbd6
during introduction of "acquire" and "release" semantics.

[ralf@linux-mips: The original patch submission was labelled a fix but
actually it replaces a barrier with another less restrictive type of
barrier so it doesn't fix any ill behaviour but rather squeezes out a
tad better performance.  Further improvments will be possible once
smp_release() has been merged.]

Signed-off-by: Leonid Yegoshin <Leonid.Yegoshin@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: benh@kernel.crashing.org
Cc: will.deacon@arm.com
Cc: linux-kernel@vger.kernel.org
Cc: markos.chandras@imgtec.com
Cc: macro@linux-mips.org
Cc: Steven.Hill@imgtec.com
Cc: alexander.h.duyck@redhat.com
Cc: davem@davemloft.net
Patchwork: https://patchwork.linux-mips.org/patch/10507/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/bitops.h
arch/mips/include/asm/spinlock.h

index 0cf29bd5dc5c538e807d6b1e4021a1b111d869ec..ce9666cf14995ce1b713cccce029244ca5ba24b5 100644 (file)
@@ -469,7 +469,7 @@ static inline int test_and_change_bit(unsigned long nr,
  */
 static inline void __clear_bit_unlock(unsigned long nr, volatile unsigned long *addr)
 {
-       smp_mb();
+       smp_mb__before_llsc();
        __clear_bit(nr, addr);
 }
 
index 1fca2e0793dcbbebd75784b90ad8e2513e0fcd45..7c7f3b2bd3dec33d16e57da501f99b59ac247a61 100644 (file)
@@ -317,7 +317,7 @@ static inline void arch_write_lock(arch_rwlock_t *rw)
 
 static inline void arch_write_unlock(arch_rwlock_t *rw)
 {
-       smp_mb();
+       smp_mb__before_llsc();
 
        __asm__ __volatile__(
        "                               # arch_write_unlock     \n"