diff options
| -rw-r--r-- | arch/sparc/Kconfig | 1 | ||||
| -rw-r--r-- | arch/sparc/include/asm/spinlock_32.h | 11 | ||||
| -rw-r--r-- | arch/sparc/include/asm/spinlock_64.h | 6 |
3 files changed, 10 insertions, 8 deletions
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 42c67beadcae..1a6f20d4e7e6 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
| @@ -55,6 +55,7 @@ config SPARC64 | |||
| 55 | select PERF_USE_VMALLOC | 55 | select PERF_USE_VMALLOC |
| 56 | select IRQ_PREFLOW_FASTEOI | 56 | select IRQ_PREFLOW_FASTEOI |
| 57 | select ARCH_HAVE_NMI_SAFE_CMPXCHG | 57 | select ARCH_HAVE_NMI_SAFE_CMPXCHG |
| 58 | select HAVE_C_RECORDMCOUNT | ||
| 58 | 59 | ||
| 59 | config ARCH_DEFCONFIG | 60 | config ARCH_DEFCONFIG |
| 60 | string | 61 | string |
diff --git a/arch/sparc/include/asm/spinlock_32.h b/arch/sparc/include/asm/spinlock_32.h index 5f5b8bf3f50d..bcc98fc35281 100644 --- a/arch/sparc/include/asm/spinlock_32.h +++ b/arch/sparc/include/asm/spinlock_32.h | |||
| @@ -131,6 +131,15 @@ static inline void arch_write_lock(arch_rwlock_t *rw) | |||
| 131 | *(volatile __u32 *)&lp->lock = ~0U; | 131 | *(volatile __u32 *)&lp->lock = ~0U; |
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | static void inline arch_write_unlock(arch_rwlock_t *lock) | ||
| 135 | { | ||
| 136 | __asm__ __volatile__( | ||
| 137 | " st %%g0, [%0]" | ||
| 138 | : /* no outputs */ | ||
| 139 | : "r" (lock) | ||
| 140 | : "memory"); | ||
| 141 | } | ||
| 142 | |||
| 134 | static inline int arch_write_trylock(arch_rwlock_t *rw) | 143 | static inline int arch_write_trylock(arch_rwlock_t *rw) |
| 135 | { | 144 | { |
| 136 | unsigned int val; | 145 | unsigned int val; |
| @@ -175,8 +184,6 @@ static inline int __arch_read_trylock(arch_rwlock_t *rw) | |||
| 175 | res; \ | 184 | res; \ |
| 176 | }) | 185 | }) |
| 177 | 186 | ||
| 178 | #define arch_write_unlock(rw) do { (rw)->lock = 0; } while(0) | ||
| 179 | |||
| 180 | #define arch_spin_lock_flags(lock, flags) arch_spin_lock(lock) | 187 | #define arch_spin_lock_flags(lock, flags) arch_spin_lock(lock) |
| 181 | #define arch_read_lock_flags(rw, flags) arch_read_lock(rw) | 188 | #define arch_read_lock_flags(rw, flags) arch_read_lock(rw) |
| 182 | #define arch_write_lock_flags(rw, flags) arch_write_lock(rw) | 189 | #define arch_write_lock_flags(rw, flags) arch_write_lock(rw) |
diff --git a/arch/sparc/include/asm/spinlock_64.h b/arch/sparc/include/asm/spinlock_64.h index 073936a8b275..968917694978 100644 --- a/arch/sparc/include/asm/spinlock_64.h +++ b/arch/sparc/include/asm/spinlock_64.h | |||
| @@ -210,14 +210,8 @@ static int inline arch_write_trylock(arch_rwlock_t *lock) | |||
| 210 | return result; | 210 | return result; |
| 211 | } | 211 | } |
| 212 | 212 | ||
| 213 | #define arch_read_lock(p) arch_read_lock(p) | ||
| 214 | #define arch_read_lock_flags(p, f) arch_read_lock(p) | 213 | #define arch_read_lock_flags(p, f) arch_read_lock(p) |
| 215 | #define arch_read_trylock(p) arch_read_trylock(p) | ||
| 216 | #define arch_read_unlock(p) arch_read_unlock(p) | ||
| 217 | #define arch_write_lock(p) arch_write_lock(p) | ||
| 218 | #define arch_write_lock_flags(p, f) arch_write_lock(p) | 214 | #define arch_write_lock_flags(p, f) arch_write_lock(p) |
| 219 | #define arch_write_unlock(p) arch_write_unlock(p) | ||
| 220 | #define arch_write_trylock(p) arch_write_trylock(p) | ||
| 221 | 215 | ||
| 222 | #define arch_read_can_lock(rw) (!((rw)->lock & 0x80000000UL)) | 216 | #define arch_read_can_lock(rw) (!((rw)->lock & 0x80000000UL)) |
| 223 | #define arch_write_can_lock(rw) (!(rw)->lock) | 217 | #define arch_write_can_lock(rw) (!(rw)->lock) |
