]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.18-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Aug 2018 11:48:54 +0000 (13:48 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Aug 2018 11:48:54 +0000 (13:48 +0200)
added patches:
parisc-remove-ordered-stores-from-syscall.s.patch
parisc-remove-unnecessary-barriers-from-spinlock.h.patch

queue-4.18/parisc-remove-ordered-stores-from-syscall.s.patch [new file with mode: 0644]
queue-4.18/parisc-remove-unnecessary-barriers-from-spinlock.h.patch [new file with mode: 0644]
queue-4.18/series

diff --git a/queue-4.18/parisc-remove-ordered-stores-from-syscall.s.patch b/queue-4.18/parisc-remove-ordered-stores-from-syscall.s.patch
new file mode 100644 (file)
index 0000000..95134d1
--- /dev/null
@@ -0,0 +1,105 @@
+From 7797167ffde1f00446301cb22b37b7c03194cfaf Mon Sep 17 00:00:00 2001
+From: John David Anglin <dave.anglin@bell.net>
+Date: Sun, 12 Aug 2018 16:38:03 -0400
+Subject: parisc: Remove ordered stores from syscall.S
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: John David Anglin <dave.anglin@bell.net>
+
+commit 7797167ffde1f00446301cb22b37b7c03194cfaf upstream.
+
+Now that we use a sync prior to releasing the locks in syscall.S, we don't need
+the PA 2.0 ordered stores used to release some locks.  Using an ordered store,
+potentially slows the release and subsequent code.
+
+There are a number of other ordered stores and loads that serve no purpose.  I
+have converted these to normal stores.
+
+Signed-off-by: John David Anglin <dave.anglin@bell.net>
+Cc: stable@vger.kernel.org # 4.0+
+Signed-off-by: Helge Deller <deller@gmx.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/parisc/kernel/syscall.S |   24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+--- a/arch/parisc/kernel/syscall.S
++++ b/arch/parisc/kernel/syscall.S
+@@ -629,12 +629,12 @@ cas_action:
+       stw     %r1, 4(%sr2,%r20)
+ #endif
+       /* The load and store could fail */
+-1:    ldw,ma  0(%r26), %r28
++1:    ldw     0(%r26), %r28
+       sub,<>  %r28, %r25, %r0
+-2:    stw,ma  %r24, 0(%r26)
++2:    stw     %r24, 0(%r26)
+       /* Free lock */
+       sync
+-      stw,ma  %r20, 0(%sr2,%r20)
++      stw     %r20, 0(%sr2,%r20)
+ #if ENABLE_LWS_DEBUG
+       /* Clear thread register indicator */
+       stw     %r0, 4(%sr2,%r20)
+@@ -798,30 +798,30 @@ cas2_action:
+       ldo     1(%r0),%r28
+       /* 8bit CAS */
+-13:   ldb,ma  0(%r26), %r29
++13:   ldb     0(%r26), %r29
+       sub,=   %r29, %r25, %r0
+       b,n     cas2_end
+-14:   stb,ma  %r24, 0(%r26)
++14:   stb     %r24, 0(%r26)
+       b       cas2_end
+       copy    %r0, %r28
+       nop
+       nop
+       /* 16bit CAS */
+-15:   ldh,ma  0(%r26), %r29
++15:   ldh     0(%r26), %r29
+       sub,=   %r29, %r25, %r0
+       b,n     cas2_end
+-16:   sth,ma  %r24, 0(%r26)
++16:   sth     %r24, 0(%r26)
+       b       cas2_end
+       copy    %r0, %r28
+       nop
+       nop
+       /* 32bit CAS */
+-17:   ldw,ma  0(%r26), %r29
++17:   ldw     0(%r26), %r29
+       sub,=   %r29, %r25, %r0
+       b,n     cas2_end
+-18:   stw,ma  %r24, 0(%r26)
++18:   stw     %r24, 0(%r26)
+       b       cas2_end
+       copy    %r0, %r28
+       nop
+@@ -829,10 +829,10 @@ cas2_action:
+       /* 64bit CAS */
+ #ifdef CONFIG_64BIT
+-19:   ldd,ma  0(%r26), %r29
++19:   ldd     0(%r26), %r29
+       sub,*=  %r29, %r25, %r0
+       b,n     cas2_end
+-20:   std,ma  %r24, 0(%r26)
++20:   std     %r24, 0(%r26)
+       copy    %r0, %r28
+ #else
+       /* Compare first word */
+@@ -851,7 +851,7 @@ cas2_action:
+ cas2_end:
+       /* Free lock */
+       sync
+-      stw,ma  %r20, 0(%sr2,%r20)
++      stw     %r20, 0(%sr2,%r20)
+       /* Enable interrupts */
+       ssm     PSW_SM_I, %r0
+       /* Return to userspace, set no error */
diff --git a/queue-4.18/parisc-remove-unnecessary-barriers-from-spinlock.h.patch b/queue-4.18/parisc-remove-unnecessary-barriers-from-spinlock.h.patch
new file mode 100644 (file)
index 0000000..41c87f8
--- /dev/null
@@ -0,0 +1,72 @@
+From 3b885ac1dc35b87a39ee176a6c7e2af9c789d8b8 Mon Sep 17 00:00:00 2001
+From: John David Anglin <dave.anglin@bell.net>
+Date: Sun, 12 Aug 2018 16:31:17 -0400
+Subject: parisc: Remove unnecessary barriers from spinlock.h
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: John David Anglin <dave.anglin@bell.net>
+
+commit 3b885ac1dc35b87a39ee176a6c7e2af9c789d8b8 upstream.
+
+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.
+
+Signed-off-by: John David Anglin <dave.anglin@bell.net>
+Cc: stable@vger.kernel.org # 4.0+
+Signed-off-by: Helge Deller <deller@gmx.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/parisc/include/asm/spinlock.h |    8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+--- a/arch/parisc/include/asm/spinlock.h
++++ b/arch/parisc/include/asm/spinlock.h
+@@ -20,7 +20,6 @@ static inline void arch_spin_lock_flags(
+ {
+       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(
+                               local_irq_disable();
+                       } else
+                               cpu_relax();
+-      mb();
+ }
+ #define arch_spin_lock_flags arch_spin_lock_flags
+ static 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
+       volatile unsigned int *a;
+       int ret;
+-      mb();
+       a = __ldcw_align(x);
+         ret = __ldcw(a) != 0;
+-      mb();
+       return ret;
+ }
index 0a50b81ece2d8845f1a0ddcab17bf88486fc6ac0..058cbc9ae3698a842fa5913807fe374fd18f9d76 100644 (file)
@@ -8,3 +8,5 @@ powerpc64s-show-ori31-availability-in-spectre_v1-sysfs-file-not-v2.patch
 ext4-fix-spectre-gadget-in-ext4_mb_regular_allocator.patch
 drm-i915-kvmgt-fix-potential-spectre-v1.patch
 drm-amdgpu-pm-fix-potential-spectre-v1.patch
+parisc-remove-unnecessary-barriers-from-spinlock.h.patch
+parisc-remove-ordered-stores-from-syscall.s.patch