On Mon, Jun 16, 2014 at 09:17:06AM -0400, Peter Hurley wrote: > Since at least before 2.6.30, it has not been possible to observe > a hung up file pointer in a tty driver's open() method unless/until > the driver open() releases the tty_lock() (eg., before blocking). > > This is because tty_open() adds the file pointer while holding > the tty_lock() _and_ doesn't release the lock until after calling > the tty driver's open() method. [ Before tty_lock(), this was > lock_kernel(). ] > > Since __tty_hangup() first waits on the tty_lock() before > enumerating and hanging up the open file pointers, either > __tty_hangup() will wait for the tty_lock() or tty_open() will > not yet have added the file pointer. For example, > > CPU 0 | CPU 1 > | > tty_open | __tty_hangup > .. | .. > tty_lock | .. > tty_reopen | tty_lock / blocks > .. | > tty_add_file(tty, filp) | > .. | > tty->ops->open(tty, filp) | > tty_port_open | > tty_port_block_til_ready | > .. | > while (1) | > .. | > tty_unlock | / unblocks > schedule | for each filp on tty->tty_files > | f_ops = tty_hung_up_fops; > | .. > | tty_unlock > tty_lock | > .. | > tty_unlock | > > Note that since tty_port_block_til_ready() and similar drop > the tty_lock while blocking, when woken, the file pointer > must then be tested for having been hung up. > > Also, fix bit-rotted drivers that used extra_count to track the > port->count bump. > > CC: Mikael Starvik <[email protected]>
For the CRIS part: Acked-by: Jesper Nilsson <[email protected]> > CC: Samuel Ortiz <[email protected]> > CC: "David S. Miller" <[email protected]> > Signed-off-by: Peter Hurley <[email protected]> /^JN - Jesper Nilsson -- Jesper Nilsson -- [email protected] -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

