Lines Matching full:lock
21 * Simple spin lock operations. There are two variants, one clears IRQ's
28 #define arch_spin_lock_flags(lock, flags) arch_spin_lock(lock) argument
33 * arch_spin_trylock - Try spin lock and return a result
34 * @lock: Pointer to the lock variable
36 * arch_spin_trylock() tries to get the lock and returns a result.
39 static inline int arch_spin_trylock(arch_spinlock_t *lock) in arch_spin_trylock() argument
45 * lock->slock : =1 : unlock in arch_spin_trylock()
46 * : <=0 : lock in arch_spin_trylock()
48 * oldval = lock->slock; <--+ need atomic operation in arch_spin_trylock()
49 * lock->slock = 0; <--+ in arch_spin_trylock()
58 "lock %0, @%3; \n\t" in arch_spin_trylock()
62 : "r" (&lock->slock) in arch_spin_trylock()
72 static inline void arch_spin_lock(arch_spinlock_t *lock) in arch_spin_lock() argument
77 * lock->slock : =1 : unlock in arch_spin_lock()
78 * : <=0 : lock in arch_spin_lock()
81 * lock->slock -= 1; <-- need atomic operation in arch_spin_lock()
82 * if (lock->slock == 0) break; in arch_spin_lock()
83 * for ( ; lock->slock <= 0 ; ); in arch_spin_lock()
93 "lock %0, @%2; \n\t" in arch_spin_lock()
106 : "r" (&lock->slock) in arch_spin_lock()
114 static inline void arch_spin_unlock(arch_spinlock_t *lock) in arch_spin_unlock() argument
117 lock->slock = 1; in arch_spin_unlock()
127 * irq-safe write-lock, but readers can get non-irqsafe
141 * @lock: the rwlock in question.
143 #define arch_read_can_lock(x) ((int)(x)->lock > 0)
147 * @lock: the rwlock in question.
149 #define arch_write_can_lock(x) ((x)->lock == RW_LOCK_BIAS)
156 * rw->lock : >0 : unlock in arch_read_lock()
157 * : <=0 : lock in arch_read_lock()
160 * rw->lock -= 1; <-- need atomic operation in arch_read_lock()
161 * if (rw->lock >= 0) break; in arch_read_lock()
162 * rw->lock += 1; <-- need atomic operation in arch_read_lock()
163 * for ( ; rw->lock <= 0 ; ); in arch_read_lock()
173 "lock %0, @%2; \n\t" in arch_read_lock()
183 "lock %0, @%2; \n\t" in arch_read_lock()
194 : "r" (&rw->lock) in arch_read_lock()
207 * rw->lock : =RW_LOCK_BIAS_STR : unlock in arch_write_lock()
208 * : !=RW_LOCK_BIAS_STR : lock in arch_write_lock()
211 * rw->lock -= RW_LOCK_BIAS_STR; <-- need atomic operation in arch_write_lock()
212 * if (rw->lock == 0) break; in arch_write_lock()
213 * rw->lock += RW_LOCK_BIAS_STR; <-- need atomic operation in arch_write_lock()
214 * for ( ; rw->lock != RW_LOCK_BIAS_STR ; ) ; in arch_write_lock()
226 "lock %0, @%3; \n\t" in arch_write_lock()
236 "lock %0, @%3; \n\t" in arch_write_lock()
247 : "r" (&rw->lock) in arch_write_lock()
264 "lock %0, @%2; \n\t" in arch_read_unlock()
269 : "r" (&rw->lock) in arch_read_unlock()
288 "lock %0, @%3; \n\t" in arch_write_unlock()
293 : "r" (&rw->lock) in arch_write_unlock()
301 static inline int arch_read_trylock(arch_rwlock_t *lock) in arch_read_trylock() argument
303 atomic_t *count = (atomic_t*)lock; in arch_read_trylock()
310 static inline int arch_write_trylock(arch_rwlock_t *lock) in arch_write_trylock() argument
312 atomic_t *count = (atomic_t *)lock; in arch_write_trylock()
319 #define arch_read_lock_flags(lock, flags) arch_read_lock(lock) argument
320 #define arch_write_lock_flags(lock, flags) arch_write_lock(lock) argument
322 #define arch_spin_relax(lock) cpu_relax() argument
323 #define arch_read_relax(lock) cpu_relax() argument
324 #define arch_write_relax(lock) cpu_relax() argument