• Peter Hurley's avatar
    tty: Serialize tty flow control changes with flow_lock · f9e053dc
    Peter Hurley authored
    Without serialization, the flow control state can become inverted
    wrt. the actual hardware state. For example,
    
    CPU 0                          | CPU 1
    stop_tty()                     |
      lock ctrl_lock               |
      tty->stopped = 1             |
      unlock ctrl_lock             |
                                   | start_tty()
                                   |   lock ctrl_lock
                                   |   tty->stopped = 0
                                   |   unlock ctrl_lock
                                   |   driver->start()
      driver->stop()               |
    
    In this case, the flow control state now indicates the tty has
    been started, but the actual hardware state has actually been stopped.
    
    Introduce tty->flow_lock spinlock to serialize tty flow control changes.
    Split out unlocked __start_tty()/__stop_tty() flavors for use by
    ioctl(TCXONC) in follow-on patch.
    Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f9e053dc
tty_io.c 89.1 KB