/* futex_wait_queue_me() - queue_me() and wait for wakeup, timeout, or signal @hb: the futex hash bucket, must be locked by the caller @q: the  */
static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q, struct hrtimer_sleeper *timeout)
/* futex_wait_queue_me() - queue_me() and wait for wakeup, timeout, or signal @hb: the futex hash bucket, must be locked by the caller @q: the  */
static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q, struct hrtimer_sleeper *timeout)
{
	set_current_state(TASK_INTERRUPTIBLE);
	queue_me(q, hb);
	if (timeout) {
		hrtimer_start_expires(&timeout->timer, HRTIMER_MODE_ABS);
		if (!hrtimer_active(&timeout->timer))
			timeout->task = NULL;
	}
	if (likely(!plist_node_empty(&q->list))) {
		if (!timeout || timeout->task)
			schedule();
	}
	__set_current_state(TASK_RUNNING);
}