• Nicolai Hähnle's avatar
    locking/ww_mutex: Add waiters in stamp order · 6baa5c60
    Nicolai Hähnle authored
    Add regular waiters in stamp order. Keep adding waiters that have no
    context in FIFO order and take care not to starve them.
    
    While adding our task as a waiter, back off if we detect that there is
    a waiter with a lower stamp in front of us.
    
    Make sure to call lock_contended even when we back off early.
    
    For w/w mutexes, being first in the wait list is only stable when
    taking the lock without a context. Therefore, the purpose of the first
    flag is split into two: 'first' remains to indicate whether we want to
    spin optimistically, while 'handoff' indicates that we should be
    prepared to accept a handoff.
    
    For w/w locking with a context, we always accept handoffs after the
    first schedule(), to handle the following sequence of events:
    
     1. Task #0 unlocks and hands off to Task #2 which is first in line
    
     2. Task #1 adds itself in front of Task #2
    
     3. Task #2 wakes up and must accept the handoff even though it is no
        longer first in line
    Signed-off-by: default avatarNicolai Hähnle <nicolai.haehnle@amd.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: =?UTF-8?q?Nicolai=20H=C3=A4hnle?= <Nicolai.Haehnle@amd.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Maarten Lankhorst <dev@mblankhorst.nl>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: dri-devel@lists.freedesktop.org
    Link: http://lkml.kernel.org/r/1482346000-9927-7-git-send-email-nhaehnle@gmail.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    6baa5c60
mutex.c 28.4 KB