ipc/mqueue: Implement lockless pipelined wakeups
This patch moves the wakeup_process() invocation so it is not done under the info->lock by making use of a lockless wake_q. With this change, the waiter is woken up once it is STATE_READY and it does not need to loop on SMP if it is still in STATE_PENDING. In the timeout case we still need to grab the info->lock to verify the state. This change should also avoid the introduction of preempt_disable() in -rt which avoids a busy-loop which pools for the STATE_PENDING -> STATE_READY change if the waiter has a higher priority compared to the waker. Additionally, this patch micro-optimizes wq_sleep by using the cheaper cousin of set_current_state(TASK_INTERRUPTABLE) as we will block no matter what, thus get rid of the implied barrier. Signed-off-by:Davidlohr Bueso <dbueso@suse.de> Signed-off-by:
Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by:
George Spelvin <linux@horizon.com> Acked-by:
Thomas Gleixner <tglx@linutronix.de> Cc: Andrew Morton <akpm@linu...
parent
1d0dcb3a
Please register or sign in to comment