• Peter Hurley's avatar
    tty: Add timed, writer-prioritized rw semaphore · 4898e640
    Peter Hurley authored
    The semantics of a rw semaphore are almost ideally suited
    for tty line discipline lifetime management;  multiple active
    threads obtain "references" (read locks) while performing i/o
    to prevent the loss or change of the current line discipline
    (write lock).
    
    Unfortunately, the existing rw_semaphore is ill-suited in other
    ways;
    1) TIOCSETD ioctl (change line discipline) expects to return an
       error if the line discipline cannot be exclusively locked within
       5 secs. Lock wait timeouts are not supported by rwsem.
    2) A tty hangup is expected to halt and scrap pending i/o, so
       exclusive locking must be prioritized.
       Writer priority is not supported by rwsem.
    
    Add ld_semaphore which implements these requirements in a
    semantically similar way to rw_semaphore.
    
    Writer priority is handled by separate wait lists for readers and
    writers. Pending write waits are priortized before existing read
    waits and prevent further read locks.
    
    Wait timeouts are trivially added, but obviously change the lock
    semantics as lock attempts can fail (but only due to timeout).
    
    This implementation incorporates the write-lock stealing work of
    Michel Lespinasse <walken@google.com>.
    
    Cc: Michel Lespinasse <walken@google.com>
    Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    4898e640
tty_ldsem.c 11.2 KB