Commit 64f49532 authored by Kyle McMartin's avatar Kyle McMartin Committed by Kyle McMartin

[PARISC] Ensure all ldcw uses are ldcw,co on pa2.0

ldcw,co should always be used on pa2.0, otherwise the strict cache
width alignment requirement is not relaxed.
Signed-off-by: default avatarKyle McMartin <kyle@parisc-linux.org>
parent f36f44de
...@@ -1638,7 +1638,7 @@ dbit_trap_20w: ...@@ -1638,7 +1638,7 @@ dbit_trap_20w:
load32 PA(pa_dbit_lock),t0 load32 PA(pa_dbit_lock),t0
dbit_spin_20w: dbit_spin_20w:
ldcw 0(t0),t1 LDCW 0(t0),t1
cmpib,= 0,t1,dbit_spin_20w cmpib,= 0,t1,dbit_spin_20w
nop nop
...@@ -1674,7 +1674,7 @@ dbit_trap_11: ...@@ -1674,7 +1674,7 @@ dbit_trap_11:
load32 PA(pa_dbit_lock),t0 load32 PA(pa_dbit_lock),t0
dbit_spin_11: dbit_spin_11:
ldcw 0(t0),t1 LDCW 0(t0),t1
cmpib,= 0,t1,dbit_spin_11 cmpib,= 0,t1,dbit_spin_11
nop nop
...@@ -1714,7 +1714,7 @@ dbit_trap_20: ...@@ -1714,7 +1714,7 @@ dbit_trap_20:
load32 PA(pa_dbit_lock),t0 load32 PA(pa_dbit_lock),t0
dbit_spin_20: dbit_spin_20:
ldcw 0(t0),t1 LDCW 0(t0),t1
cmpib,= 0,t1,dbit_spin_20 cmpib,= 0,t1,dbit_spin_20
nop nop
......
...@@ -541,7 +541,7 @@ cas_nocontend: ...@@ -541,7 +541,7 @@ cas_nocontend:
# endif # endif
/* ENABLE_LWS_DEBUG */ /* ENABLE_LWS_DEBUG */
ldcw 0(%sr2,%r20), %r28 /* Try to acquire the lock */ LDCW 0(%sr2,%r20), %r28 /* Try to acquire the lock */
cmpb,<>,n %r0, %r28, cas_action /* Did we get it? */ cmpb,<>,n %r0, %r28, cas_action /* Did we get it? */
cas_wouldblock: cas_wouldblock:
ldo 2(%r0), %r28 /* 2nd case */ ldo 2(%r0), %r28 /* 2nd case */
......
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
#define CALLEE_SAVE_FRAME_SIZE (CALLEE_REG_FRAME_SIZE + CALLEE_FLOAT_FRAME_SIZE) #define CALLEE_SAVE_FRAME_SIZE (CALLEE_REG_FRAME_SIZE + CALLEE_FLOAT_FRAME_SIZE)
#ifdef CONFIG_PA20 #ifdef CONFIG_PA20
#define LDCW ldcw,co
#define BL b,l #define BL b,l
# ifdef CONFIG_64BIT # ifdef CONFIG_64BIT
# define LEVEL 2.0w # define LEVEL 2.0w
...@@ -55,6 +56,7 @@ ...@@ -55,6 +56,7 @@
# define LEVEL 2.0 # define LEVEL 2.0
# endif # endif
#else #else
#define LDCW ldcw
#define BL bl #define BL bl
#define LEVEL 1.1 #define LEVEL 1.1
#endif #endif
......
...@@ -155,13 +155,14 @@ static inline void set_eiem(unsigned long val) ...@@ -155,13 +155,14 @@ static inline void set_eiem(unsigned long val)
type and dynamically select the 16-byte aligned int from the array type and dynamically select the 16-byte aligned int from the array
for the semaphore. */ for the semaphore. */
#define __PA_LDCW_ALIGNMENT 16 #define __PA_LDCW_ALIGNMENT 16
#define __ldcw_align(a) ({ \ #define __ldcw_align(a) ({ \
unsigned long __ret = (unsigned long) &(a)->lock[0]; \ unsigned long __ret = (unsigned long) &(a)->lock[0]; \
__ret = (__ret + __PA_LDCW_ALIGNMENT - 1) & ~(__PA_LDCW_ALIGNMENT - 1); \ __ret = (__ret + __PA_LDCW_ALIGNMENT - 1) \
(volatile unsigned int *) __ret; \ & ~(__PA_LDCW_ALIGNMENT - 1); \
(volatile unsigned int *) __ret; \
}) })
#define LDCW "ldcw" #define __LDCW "ldcw"
#else /*CONFIG_PA20*/ #else /*CONFIG_PA20*/
/* From: "Jim Hull" <jim.hull of hp.com> /* From: "Jim Hull" <jim.hull of hp.com>
...@@ -171,17 +172,18 @@ static inline void set_eiem(unsigned long val) ...@@ -171,17 +172,18 @@ static inline void set_eiem(unsigned long val)
they only require "natural" alignment (4-byte for ldcw, 8-byte for they only require "natural" alignment (4-byte for ldcw, 8-byte for
ldcd). */ ldcd). */
#define __PA_LDCW_ALIGNMENT 4 #define __PA_LDCW_ALIGNMENT 4
#define __ldcw_align(a) ((volatile unsigned int *)a) #define __ldcw_align(a) ((volatile unsigned int *)a)
#define LDCW "ldcw,co" #define __LDCW "ldcw,co"
#endif /*!CONFIG_PA20*/ #endif /*!CONFIG_PA20*/
/* LDCW, the only atomic read-write operation PA-RISC has. *sigh*. */ /* LDCW, the only atomic read-write operation PA-RISC has. *sigh*. */
#define __ldcw(a) ({ \ #define __ldcw(a) ({ \
unsigned __ret; \ unsigned __ret; \
__asm__ __volatile__(LDCW " 0(%1),%0" : "=r" (__ret) : "r" (a)); \ __asm__ __volatile__(__LDCW " 0(%1),%0" \
__ret; \ : "=r" (__ret) : "r" (a)); \
__ret; \
}) })
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment