Lines Matching full:hb

69  * requeue_futex() - Requeue a futex_q from one hb to another
200 * @hb: the hash_bucket of the requeue target futex
213 * 4) Set the q->lock_ptr to the requeue target hb->lock for the case that
222 * Must be called with both q->lock_ptr and hb->lock held.
226 struct futex_hash_bucket *hb) in requeue_pi_wake_futex() argument
235 q->lock_ptr = &hb->lock; in requeue_pi_wake_futex()
685 * @hb: the hash_bucket futex_q was original enqueued on
695 int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, in handle_early_requeue_pi_wakeup() argument
702 * With the hb lock held, we avoid races while we process the wakeup. in handle_early_requeue_pi_wakeup()
703 * We only need to hold hb (and not hb2) to ensure atomicity as the in handle_early_requeue_pi_wakeup()
704 * wakeup code can't change q.key from uaddr to uaddr2 if we hold hb. in handle_early_requeue_pi_wakeup()
708 WARN_ON_ONCE(&hb->lock != q->lock_ptr); in handle_early_requeue_pi_wakeup()
714 plist_del(&q->list, &hb->chain); in handle_early_requeue_pi_wakeup()
715 futex_hb_waiters_dec(hb); in handle_early_requeue_pi_wakeup()
772 struct futex_hash_bucket *hb; in futex_wait_requeue_pi() local
805 * Prepare to wait on uaddr. On success, it holds hb->lock and q in futex_wait_requeue_pi()
808 ret = futex_wait_setup(uaddr, val, flags, &q, &hb); in futex_wait_requeue_pi()
817 futex_q_unlock(hb); in futex_wait_requeue_pi()
822 /* Queue the futex_q, drop the hb lock, wait for wakeup. */ in futex_wait_requeue_pi()
823 futex_wait_queue(hb, &q, to); in futex_wait_requeue_pi()
828 spin_lock(&hb->lock); in futex_wait_requeue_pi()
829 ret = handle_early_requeue_pi_wakeup(hb, &q, to); in futex_wait_requeue_pi()
830 spin_unlock(&hb->lock); in futex_wait_requeue_pi()