/* Returns 0 - no early wakeup detected <0 - -ETIMEDOUT or -ERESTARTNOINTR  */
static int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, struct futex_q *q, union futex_key *key2, struct hrtimer_sleeper *timeout)
/* Returns 0 - no early wakeup detected <0 - -ETIMEDOUT or -ERESTARTNOINTR  */
static int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, struct futex_q *q, union futex_key *key2, struct hrtimer_sleeper *timeout)
{
	int ret = 0;
	if (!match_futex(&q->key, key2)) {
		WARN_ON(q->lock_ptr && (&hb->lock != q->lock_ptr));
		plist_del(&q->list, &q->list.plist);
		ret = -EWOULDBLOCK;
		if (timeout && !timeout->task)
			ret = -ETIMEDOUT;
		else if (signal_pending(current))
			ret = -ERESTARTNOINTR;
	}
	return ret;
}