Lines Matching refs:type

27 static void do_six_unlock_type(struct six_lock *lock, enum six_lock_type type);
84 static inline void six_set_owner(struct six_lock *lock, enum six_lock_type type, in six_set_owner() argument
87 if (type != SIX_LOCK_intent) in six_set_owner()
117 static int __do_six_trylock(struct six_lock *lock, enum six_lock_type type, in __do_six_trylock() argument
123 EBUG_ON(type == SIX_LOCK_write && lock->owner != task); in __do_six_trylock()
124 EBUG_ON(type == SIX_LOCK_write && in __do_six_trylock()
154 if (type == SIX_LOCK_read && lock->readers) { in __do_six_trylock()
161 ret = !(old & l[type].lock_fail); in __do_six_trylock()
171 } else if (type == SIX_LOCK_write && lock->readers) { in __do_six_trylock()
193 ret = !(old & l[type].lock_fail); in __do_six_trylock()
194 if (!ret || (type == SIX_LOCK_write && !try)) { in __do_six_trylock()
198 } while (!atomic_try_cmpxchg_acquire(&lock->state, &old, old + l[type].lock_val)); in __do_six_trylock()
200 EBUG_ON(ret && !(atomic_read(&lock->state) & l[type].held_mask)); in __do_six_trylock()
204 six_set_owner(lock, type, old, task); in __do_six_trylock()
206 EBUG_ON(type == SIX_LOCK_write && try && ret <= 0 && in __do_six_trylock()
278 static bool do_six_trylock(struct six_lock *lock, enum six_lock_type type, bool try) in do_six_trylock() argument
282 ret = __do_six_trylock(lock, type, current, try); in do_six_trylock()
297 bool six_trylock_ip(struct six_lock *lock, enum six_lock_type type, unsigned long ip) in six_trylock_ip() argument
299 if (!do_six_trylock(lock, type, true)) in six_trylock_ip()
302 if (type != SIX_LOCK_write) in six_trylock_ip()
303 six_acquire(&lock->dep_map, 1, type == SIX_LOCK_read, ip); in six_trylock_ip()
318 bool six_relock_ip(struct six_lock *lock, enum six_lock_type type, in six_relock_ip() argument
321 if (six_lock_seq(lock) != seq || !six_trylock_ip(lock, type, ip)) in six_relock_ip()
325 six_unlock_ip(lock, type, ip); in six_relock_ip()
349 enum six_lock_type type) in six_optimistic_spin() argument
354 if (type == SIX_LOCK_write) in six_optimistic_spin()
399 enum six_lock_type type) in six_optimistic_spin() argument
407 static int six_lock_slowpath(struct six_lock *lock, enum six_lock_type type, in six_lock_slowpath() argument
414 if (type == SIX_LOCK_write) { in six_lock_slowpath()
424 wait->lock_want = type; in six_lock_slowpath()
428 six_set_bitmask(lock, SIX_LOCK_WAITING_read << type); in six_lock_slowpath()
433 ret = __do_six_trylock(lock, type, current, false); in six_lock_slowpath()
460 if (six_optimistic_spin(lock, wait, type)) in six_lock_slowpath()
492 do_six_unlock_type(lock, type); in six_lock_slowpath()
493 } else if (type == SIX_LOCK_write) { in six_lock_slowpath()
540 int six_lock_ip_waiter(struct six_lock *lock, enum six_lock_type type, in six_lock_ip_waiter() argument
549 if (type != SIX_LOCK_write) in six_lock_ip_waiter()
550 six_acquire(&lock->dep_map, 0, type == SIX_LOCK_read, ip); in six_lock_ip_waiter()
552 ret = do_six_trylock(lock, type, true) ? 0 in six_lock_ip_waiter()
553 : six_lock_slowpath(lock, type, wait, should_sleep_fn, p, ip); in six_lock_ip_waiter()
555 if (ret && type != SIX_LOCK_write) in six_lock_ip_waiter()
565 static void do_six_unlock_type(struct six_lock *lock, enum six_lock_type type) in do_six_unlock_type() argument
569 if (type == SIX_LOCK_intent) in do_six_unlock_type()
572 if (type == SIX_LOCK_read && in do_six_unlock_type()
579 u32 v = l[type].lock_val; in do_six_unlock_type()
581 if (type != SIX_LOCK_read) in do_six_unlock_type()
584 EBUG_ON(!(atomic_read(&lock->state) & l[type].held_mask)); in do_six_unlock_type()
588 six_lock_wakeup(lock, state, l[type].unlock_wakeup); in do_six_unlock_type()
606 void six_unlock_ip(struct six_lock *lock, enum six_lock_type type, unsigned long ip) in six_unlock_ip() argument
608 EBUG_ON(type == SIX_LOCK_write && in six_unlock_ip()
610 EBUG_ON((type == SIX_LOCK_write || in six_unlock_ip()
611 type == SIX_LOCK_intent) && in six_unlock_ip()
614 if (type != SIX_LOCK_write) in six_unlock_ip()
617 if (type == SIX_LOCK_intent && in six_unlock_ip()
623 if (type == SIX_LOCK_write && in six_unlock_ip()
629 if (type == SIX_LOCK_write) in six_unlock_ip()
632 do_six_unlock_type(lock, type); in six_unlock_ip()
725 void six_lock_increment(struct six_lock *lock, enum six_lock_type type) in six_lock_increment() argument
727 six_acquire(&lock->dep_map, 0, type == SIX_LOCK_read, _RET_IP_); in six_lock_increment()
731 switch (type) { in six_lock_increment()
739 atomic_add(l[type].lock_val, &lock->state); in six_lock_increment()