| From 1406f441059c66e4b415447d678ead50d09e3ef9 Mon Sep 17 00:00:00 2001 |
| From: Helge Deller <deller@gmx.de> |
| Date: Tue, 28 Jul 2020 18:56:14 +0200 |
| Subject: [PATCH] Revert "parisc: Revert "Release spinlocks using ordered |
| store"" |
| |
| commit 157e9afcc4fa25068b0e8743bc254a9b56010e13 upstream. |
| |
| This reverts commit 86d4d068df573a8c2105554624796c086d6bec3d. |
| |
| Signed-off-by: Helge Deller <deller@gmx.de> |
| Cc: <stable@vger.kernel.org> # v5.0+ |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/parisc/include/asm/spinlock.h b/arch/parisc/include/asm/spinlock.h |
| index 8a63515f03bf..16aec9ba2580 100644 |
| --- a/arch/parisc/include/asm/spinlock.h |
| +++ b/arch/parisc/include/asm/spinlock.h |
| @@ -37,8 +37,8 @@ static inline void arch_spin_unlock(arch_spinlock_t *x) |
| volatile unsigned int *a; |
| |
| a = __ldcw_align(x); |
| - mb(); |
| - *a = 1; |
| + /* Release with ordered store. */ |
| + __asm__ __volatile__("stw,ma %0,0(%1)" : : "r"(1), "r"(a) : "memory"); |
| } |
| |
| static inline int arch_spin_trylock(arch_spinlock_t *x) |
| diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S |
| index 93cc36d98875..a37814cb66c7 100644 |
| --- a/arch/parisc/kernel/syscall.S |
| +++ b/arch/parisc/kernel/syscall.S |
| @@ -640,8 +640,7 @@ cas_action: |
| sub,<> %r28, %r25, %r0 |
| 2: stw %r24, 0(%r26) |
| /* Free lock */ |
| - sync |
| - stw %r20, 0(%sr2,%r20) |
| + stw,ma %r20, 0(%sr2,%r20) |
| #if ENABLE_LWS_DEBUG |
| /* Clear thread register indicator */ |
| stw %r0, 4(%sr2,%r20) |
| @@ -655,8 +654,7 @@ cas_action: |
| 3: |
| /* Error occurred on load or store */ |
| /* Free lock */ |
| - sync |
| - stw %r20, 0(%sr2,%r20) |
| + stw,ma %r20, 0(%sr2,%r20) |
| #if ENABLE_LWS_DEBUG |
| stw %r0, 4(%sr2,%r20) |
| #endif |
| @@ -857,8 +855,7 @@ cas2_action: |
| |
| cas2_end: |
| /* Free lock */ |
| - sync |
| - stw %r20, 0(%sr2,%r20) |
| + stw,ma %r20, 0(%sr2,%r20) |
| /* Enable interrupts */ |
| ssm PSW_SM_I, %r0 |
| /* Return to userspace, set no error */ |
| @@ -868,8 +865,7 @@ cas2_end: |
| 22: |
| /* Error occurred on load or store */ |
| /* Free lock */ |
| - sync |
| - stw %r20, 0(%sr2,%r20) |
| + stw,ma %r20, 0(%sr2,%r20) |
| ssm PSW_SM_I, %r0 |
| ldo 1(%r0),%r28 |
| b lws_exit |
| -- |
| 2.27.0 |
| |