• Thomas Gleixner's avatar
    locking/rt: Add base code for RT rw_semaphore and rwlock · 943f0edb
    Thomas Gleixner authored
    On PREEMPT_RT, rw_semaphores and rwlocks are substituted with an rtmutex and
    a reader count. The implementation is writer unfair, as it is not feasible
    to do priority inheritance on multiple readers, but experience has shown
    that real-time workloads are not the typical workloads which are sensitive
    to writer starvation.
    
    The inner workings of rw_semaphores and rwlocks on RT are almost identical
    except for the task state and signal handling. rw_semaphores are not state
    preserving over a contention, they are expected to enter and leave with state
    == TASK_RUNNING. rwlocks have a mechanism to preserve the state of the task
    at entry and restore it after unblocking taking potential non-lock related
    wakeups into account. rw_semaphores can also be subject to signal handling
    interrupting a blocked state, while rwlocks ignore signals.
    
    To avoid code duplication, provide a shared implementation which takes the
    small difference vs. state and signals into account. The code is included
    into the relevant rw_semaphore/rwlock base code and compiled for each use
    case separately.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20210815211302.957920571@linutronix.de
    943f0edb
rwbase_rt.c 7.25 KB