diff options
Diffstat (limited to 'include/asm-powerpc/spinlock.h')
| -rw-r--r-- | include/asm-powerpc/spinlock.h | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/include/asm-powerpc/spinlock.h b/include/asm-powerpc/spinlock.h index caa4b14e0e94..895cb6d3a42a 100644 --- a/include/asm-powerpc/spinlock.h +++ b/include/asm-powerpc/spinlock.h | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | #ifndef __ASM_SPINLOCK_H | 1 | #ifndef __ASM_SPINLOCK_H |
| 2 | #define __ASM_SPINLOCK_H | 2 | #define __ASM_SPINLOCK_H |
| 3 | #ifdef __KERNEL__ | ||
| 3 | 4 | ||
| 4 | /* | 5 | /* |
| 5 | * Simple spin lock operations. | 6 | * Simple spin lock operations. |
| @@ -45,7 +46,7 @@ static __inline__ unsigned long __spin_trylock(raw_spinlock_t *lock) | |||
| 45 | 46 | ||
| 46 | token = LOCK_TOKEN; | 47 | token = LOCK_TOKEN; |
| 47 | __asm__ __volatile__( | 48 | __asm__ __volatile__( |
| 48 | "1: lwarx %0,0,%2 # __spin_trylock\n\ | 49 | "1: lwarx %0,0,%2\n\ |
| 49 | cmpwi 0,%0,0\n\ | 50 | cmpwi 0,%0,0\n\ |
| 50 | bne- 2f\n\ | 51 | bne- 2f\n\ |
| 51 | stwcx. %1,0,%2\n\ | 52 | stwcx. %1,0,%2\n\ |
| @@ -79,7 +80,7 @@ static int __inline__ __raw_spin_trylock(raw_spinlock_t *lock) | |||
| 79 | 80 | ||
| 80 | #if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES) | 81 | #if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES) |
| 81 | /* We only yield to the hypervisor if we are in shared processor mode */ | 82 | /* We only yield to the hypervisor if we are in shared processor mode */ |
| 82 | #define SHARED_PROCESSOR (get_paca()->lppaca.shared_proc) | 83 | #define SHARED_PROCESSOR (get_lppaca()->shared_proc) |
| 83 | extern void __spin_yield(raw_spinlock_t *lock); | 84 | extern void __spin_yield(raw_spinlock_t *lock); |
| 84 | extern void __rw_yield(raw_rwlock_t *lock); | 85 | extern void __rw_yield(raw_rwlock_t *lock); |
| 85 | #else /* SPLPAR || ISERIES */ | 86 | #else /* SPLPAR || ISERIES */ |
| @@ -123,8 +124,8 @@ static void __inline__ __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long | |||
| 123 | 124 | ||
| 124 | static __inline__ void __raw_spin_unlock(raw_spinlock_t *lock) | 125 | static __inline__ void __raw_spin_unlock(raw_spinlock_t *lock) |
| 125 | { | 126 | { |
| 126 | __asm__ __volatile__(SYNC_ON_SMP" # __raw_spin_unlock" | 127 | __asm__ __volatile__("# __raw_spin_unlock\n\t" |
| 127 | : : :"memory"); | 128 | LWSYNC_ON_SMP: : :"memory"); |
| 128 | lock->slock = 0; | 129 | lock->slock = 0; |
| 129 | } | 130 | } |
| 130 | 131 | ||
| @@ -166,7 +167,7 @@ static long __inline__ __read_trylock(raw_rwlock_t *rw) | |||
| 166 | long tmp; | 167 | long tmp; |
| 167 | 168 | ||
| 168 | __asm__ __volatile__( | 169 | __asm__ __volatile__( |
| 169 | "1: lwarx %0,0,%1 # read_trylock\n" | 170 | "1: lwarx %0,0,%1\n" |
| 170 | __DO_SIGN_EXTEND | 171 | __DO_SIGN_EXTEND |
| 171 | " addic. %0,%0,1\n\ | 172 | " addic. %0,%0,1\n\ |
| 172 | ble- 2f\n" | 173 | ble- 2f\n" |
| @@ -191,7 +192,7 @@ static __inline__ long __write_trylock(raw_rwlock_t *rw) | |||
| 191 | 192 | ||
| 192 | token = WRLOCK_TOKEN; | 193 | token = WRLOCK_TOKEN; |
| 193 | __asm__ __volatile__( | 194 | __asm__ __volatile__( |
| 194 | "1: lwarx %0,0,%2 # write_trylock\n\ | 195 | "1: lwarx %0,0,%2\n\ |
| 195 | cmpwi 0,%0,0\n\ | 196 | cmpwi 0,%0,0\n\ |
| 196 | bne- 2f\n" | 197 | bne- 2f\n" |
| 197 | PPC405_ERR77(0,%1) | 198 | PPC405_ERR77(0,%1) |
| @@ -248,8 +249,9 @@ static void __inline__ __raw_read_unlock(raw_rwlock_t *rw) | |||
| 248 | long tmp; | 249 | long tmp; |
| 249 | 250 | ||
| 250 | __asm__ __volatile__( | 251 | __asm__ __volatile__( |
| 251 | "eieio # read_unlock\n\ | 252 | "# read_unlock\n\t" |
| 252 | 1: lwarx %0,0,%1\n\ | 253 | LWSYNC_ON_SMP |
| 254 | "1: lwarx %0,0,%1\n\ | ||
| 253 | addic %0,%0,-1\n" | 255 | addic %0,%0,-1\n" |
| 254 | PPC405_ERR77(0,%1) | 256 | PPC405_ERR77(0,%1) |
| 255 | " stwcx. %0,0,%1\n\ | 257 | " stwcx. %0,0,%1\n\ |
| @@ -261,9 +263,10 @@ static void __inline__ __raw_read_unlock(raw_rwlock_t *rw) | |||
| 261 | 263 | ||
| 262 | static __inline__ void __raw_write_unlock(raw_rwlock_t *rw) | 264 | static __inline__ void __raw_write_unlock(raw_rwlock_t *rw) |
| 263 | { | 265 | { |
| 264 | __asm__ __volatile__(SYNC_ON_SMP" # write_unlock" | 266 | __asm__ __volatile__("# write_unlock\n\t" |
| 265 | : : :"memory"); | 267 | LWSYNC_ON_SMP: : :"memory"); |
| 266 | rw->lock = 0; | 268 | rw->lock = 0; |
| 267 | } | 269 | } |
| 268 | 270 | ||
| 271 | #endif /* __KERNEL__ */ | ||
| 269 | #endif /* __ASM_SPINLOCK_H */ | 272 | #endif /* __ASM_SPINLOCK_H */ |
