FAILED: patch "[PATCH] parisc: Remove unnecessary barriers from spinlock.h" failed to apply to 4.9-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
3b885ac1dc35b87a39ee176a6c7e2af9c789d8b8Mon Sep 17 00:00:00 2001
From: John David Anglin <[email protected]>
Date: Sun, 12 Aug 2018 16:31:17 -0400
Subject: [PATCH] parisc: Remove unnecessary barriers from spinlock.h
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Now that mb() is an instruction barrier, it will slow performance if we issue unnecessary barriers.
The spinlock defines have a number of unnecessary barriers. The __ldcw() define is both a hardware and compiler barrier. The mb() barriers in the routines using __ldcw() serve no purpose.
The only barrier needed is the one in arch_spin_unlock(). We need to ensure all accesses are complete prior to releasing the lock.
arch/parisc/include/asm/spinlock.h +2 -6
@@ -20,7 +20,6 @@ static inline void arch_spin_lock_flags(arch_spinlock_t *x, {volatile unsigned int *a; -mb (); a =__ldcw_align (x);while (__ldcw (a) ==0 )while (*a ==0 )
@@ -30,17 +29,16 @@ static inline void arch_spin_lock_flags(arch_spinlock_t *x,local_irq_disable (); }else cpu_relax (); -mb (); }#define arch_spin_lock_flags arch_spin_lock_flagsstatic inline void arch_spin_unlock (arch_spinlock_t *x) {volatile unsigned int *a; -mb (); + a =__ldcw_align (x); - *a =1 ;mb (); + *a =1 ; }static inline int arch_spin_trylock (arch_spinlock_t *x)
@@ -48,10 +46,8 @@ static inline int arch_spin_trylock(arch_spinlock_t *x)volatile unsigned int *a;int ret; -mb (); a =__ldcw_align (x); ret =__ldcw (a) !=0 ; -mb ();return ret; }