struct futex_q - The hashed futex queue entry, one per waiting task : priority-sorted list of tasks waiting on this futex : the task waiting on the futex : the hash bucket lock : the key the futex is hashed on : optional priority inheritance state : rt_waiter storage for use with requeue_pi : the requeue_pi target futex key : bitset for the optional bitmasked wakeup
We use this hashed waitqueue, instead of a normal wait_queue_t, so we can wake only the relevant ones (hashed queues may be shared).
A futex_q has a woken state, just like tasks have TASK_RUNNING. It is considered woken when plist_node_empty(&q->list) || q->lock_ptr == 0. The order of wakeup is always to make the first condition true, then the second.
PI futexes are typically woken before they are removed from the hash list via the rt_mutex code. See unqueue_me_pi().
Definition at line 123 of file futex.c.