• M
    s390/rwlock: introduce rwlock wait queueing · eb3b7b84
    Martin Schwidefsky 提交于
    Like the common queued rwlock code the s390 implementation uses the
    queued spinlock code on a spinlock_t embedded in the rwlock_t to achieve
    the queueing. The encoding of the rwlock_t differs though, the counter
    field in the rwlock_t is split into two parts. The upper two bytes hold
    the write bit and the write wait counter, the lower two bytes hold the
    read counter.
    
    The arch_read_lock operation works exactly like the common qrwlock but
    the enqueue operation for a writer follows a diffent logic. After the
    failed inline try to get the rwlock in write, the writer first increases
    the write wait counter, acquires the wait spin_lock for the queueing,
    and then loops until there are no readers and the write bit is zero.
    Without the write wait counter a CPU that just released the rwlock
    could immediately reacquire the lock in the inline code, bypassing all
    outstanding read and write waiters. For s390 this would cause massive
    imbalances in favour of writers in case of a contended rwlock.
    Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
    eb3b7b84
spinlock.h 3.8 KB