• Nick Piggin's avatar
    The strange sysv semaphore wakeup scheme has a kind of busy-wait lock · 04331304
    Nick Piggin authored
    involved, which could deadlock if preemption is enabled during the "lock".
    
    It is an implementation detail (due to a spinlock being held) that this is
    actually the case.  However if "spinlocks" are made preemptible, or if the
    sem lock is changed to a sleeping lock for example, then the wakeup would
    become buggy.  So this might be a bugfix for -rt kernels.
    
    Imagine waker being preempted by wakee and never clearing IN_WAKEUP -- if
    wakee has higher RT priority then there is a priority inversion deadlock. 
    Even if there is not a priority inversion to cause a deadlock, then there
    is still time wasted spinning.
    Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
    Signed-off-by: default avatarManfred Spraul <manfred@colorfullife.com>
    Cc: Pierre Peiffer <peifferp@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    04331304
sem.c 34 KB