tty: Replace ldisc locking with ldisc_sem
authorPeter Hurley <peter@hurleysoftware.com>
Sat, 15 Jun 2013 11:04:48 +0000 (07:04 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 23 Jul 2013 23:38:34 +0000 (16:38 -0700)
commit36697529b5bbe36911e39a6309e7a7c9250d280a
tree5cbffa976994cb798e00d60eccb46c6cafc369a1
parentd2c438905f9f718b3d9f5d89ce163fc22bd33995
tty: Replace ldisc locking with ldisc_sem

Line discipline locking was performed with a combination of
a mutex, a status bit, a count, and a waitqueue -- basically,
a rw semaphore.

Replace the existing combination with an ld_semaphore.

Fixes:
 1) the 'reference acquire after ldisc locked' bug
 2) the over-complicated halt mechanism
 3) lock order wrt. tty_lock()
 4) dropping locks while changing ldisc
 5) previously unidentified deadlock while locking ldisc from
    both linked ttys concurrently
 6) previously unidentified recursive deadlocks

Adds much-needed lockdep diagnostics.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/tty_buffer.c
drivers/tty/tty_io.c
drivers/tty/tty_ldisc.c
include/linux/tty.h
include/linux/tty_ldisc.h