• Peter Hurley's avatar
    tty: Document unsafe ldisc reference acquire · 16759f6c
    Peter Hurley authored
    Merge get_ldisc() into its only call site.
    Note how, after merging, the unsafe acquire of an ldisc reference
    is obvious.
    
       CPU 0 in tty_ldisc_try()         |  CPU 1 in tty_ldisc_halt()
                                        |
    test_bit(TTY_LDISC, &tty_flags)     |
    if (true)                           |  clear_bit(TTY_LDISC, &tty_flags)
      tty->ldisc != 0?                  |  atomic_read(&tty->ldisc->users)
      if (true)                         |  ret_val == 1?
        atomic_inc(&tty->ldisc->users)  |  if (false)
                                        |    wait
                                        |
    <goes on assuming safe ldisc use>   |  <doesn't wait - proceeds w/ close>
                                        |
    
    The spin lock in tty_ldisc_try() does nothing wrt synchronizing
    the ldisc halt since it's not acquired as part of halting.
    Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    16759f6c
tty_ldisc.c 24.6 KB