Skip to content
  • Thomas Gleixner's avatar
    futex: remove the wait queue · f1a11e05
    Thomas Gleixner authored
    
    
    The waitqueue which is used in struct futex_q is a leftover from the
    futexfd implementation. There is no need to use a waitqueue at all, as
    the waiting task is the only user of it. The waitqueue just adds
    additional locking and a loop in the wake up path which both can be
    avoided.
    
    We have already a task reference in struct futex_q which is used for
    PI futexes. Use it for normal futexes as well and just wake up the
    task directly.
    
    The logic of signalling the futex wakeup via setting q->lock_ptr to
    NULL is kept with the difference that we set it NULL before doing the
    wakeup. This opens an exit race window vs. a non futex wake up of the
    to be woken up task, which we prevent with get_task_struct /
    put_task_struct on the waiter.
    
    [ Impact: simplification ]
    
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    f1a11e05