Lines Matching refs:rwlock
91 static inline int arch_read_can_lock(arch_rwlock_t *rwlock)
93 return (rwlock->lock << _RD_COUNT_WIDTH) == 0;
99 static inline int arch_write_can_lock(arch_rwlock_t *rwlock)
101 return rwlock->lock == 0;
107 static inline void arch_read_lock(arch_rwlock_t *rwlock)
109 u32 val = __insn_tns((int *)&rwlock->lock);
111 arch_read_lock_slow(rwlock, val);
114 rwlock->lock = val + (1 << _RD_COUNT_SHIFT);
120 static inline void arch_write_lock(arch_rwlock_t *rwlock)
122 u32 val = __insn_tns((int *)&rwlock->lock);
124 arch_write_lock_slow(rwlock, val);
127 rwlock->lock = 1 << _WR_NEXT_SHIFT;
133 static inline int arch_read_trylock(arch_rwlock_t *rwlock)
136 u32 val = __insn_tns((int *)&rwlock->lock);
138 return arch_read_trylock_slow(rwlock);
140 rwlock->lock = val + (locked << _RD_COUNT_SHIFT);
147 static inline int arch_write_trylock(arch_rwlock_t *rwlock)
149 u32 val = __insn_tns((int *)&rwlock->lock);
157 rwlock->lock = val;
162 rwlock->lock = 1 << _WR_NEXT_SHIFT;
169 static inline void arch_read_unlock(arch_rwlock_t *rwlock)
173 val = __insn_tns((int *)&rwlock->lock);
175 arch_read_unlock_slow(rwlock);
178 rwlock->lock = val - (1 << _RD_COUNT_SHIFT);
184 static inline void arch_write_unlock(arch_rwlock_t *rwlock)
188 val = __insn_tns((int *)&rwlock->lock);
190 arch_write_unlock_slow(rwlock, val);
193 rwlock->lock = 0;