aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-powerpc/spinlock.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-powerpc/spinlock.h')
-rw-r--r--include/asm-powerpc/spinlock.h23
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)
83extern void __spin_yield(raw_spinlock_t *lock); 84extern void __spin_yield(raw_spinlock_t *lock);
84extern void __rw_yield(raw_rwlock_t *lock); 85extern 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
124static __inline__ void __raw_spin_unlock(raw_spinlock_t *lock) 125static __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"
2521: 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
262static __inline__ void __raw_write_unlock(raw_rwlock_t *rw) 264static __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 */