summaryrefslogtreecommitdiffstats
path: root/kernel/notifier.c
diff options
context:
space:
mode:
authorPeter Hurley <peter@hurleysoftware.com>2013-04-16 06:15:50 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-05-20 12:30:32 -0700
commit4898e640caf03fdbaf2122d5a33949bf3e4a5b34 (patch)
tree180f6665f2cc00c5595d7e8329ca05e46cbf67f4 /kernel/notifier.c
parent50539dd4f88e8a689a38c94337768fd7ff3fd326 (diff)
downloadop-kernel-dev-4898e640caf03fdbaf2122d5a33949bf3e4a5b34.zip
op-kernel-dev-4898e640caf03fdbaf2122d5a33949bf3e4a5b34.tar.gz
tty: Add timed, writer-prioritized rw semaphore
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: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'kernel/notifier.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud