• P
    tty: Document locking for tty_port_close{,start,end}() · 0733db91
    Peter Hurley 提交于
    The tty lock is held when the tty driver's .close method is called
    (from the two lone call-sites of tty_release() and __tty_hangup()).
    The call-tree audit[1] of tty_port_close(), tty_port_close_start,
    and tty_port_close_end() is a closed graph of the callers of these
    3 functions; ie., all callers originate from only tty_release()
    or __tty_hangup().
    
    Of these callers, none drop the tty lock.
    
    Also, document tty_port_close_start() may drop and reacquire the
    tty lock in tty_wait_until_sent_from_close(), which means the tty
    or tty_port may have changed state (but not reopened or hung up).
    
    [1]
    Call-tree audit of tty_port_close, tty_port_close_start, and tty_port_close_end()
    
    tty_release()
      tty->ops->close() --+
                          |
    __tty_hangup()        |
      tty->ops->close() --+
                          |
                          +- rp_close():drivers/tty/rocket.c -------------------+
                          +- uart_close():drivers/tty/serial/serial_core.c -----+
                          |                                                     +- tty_port_close_start()
                          |
                          |
                          +- close():drivers/tty/synclinkmp.c ------------------+
                          +- rs_close():drivers/tty/amiserial.c ----------------+
                          +- gsmtty_close():drivers/tty/n_gsm.c ----------------+
                          +- mxser_close():drivers/tty/mxser.c -----------------+
                          +- close():drivers/tty/synclink_gt.c -----------------+
                          +- mgsl_close():drivers/tty/synclink.c ---------------+
                          +- isdn_tty_close():drivers/isdn/i4l/isdn_tty.c ------+
                          +- mgslpc_close():drivers/char/pcmcia/synclink_cs.c --+
                          +- ircomm_tty_close():net/irda/ircomm/ircomm_tty.c ---+
                          |                                                     |
            rs_close():arch/ia64/hp/sim/simserial.c                             |
           *line_close():arch/um/drivers/line.c                                 |
            gdm_tty_close():drivers/staging/gdm724x/gdm_tty.c
            fwtty_close():drivers/staging/fwserial/fwserial.c
            acm_tty_close():drivers/usb/class/cdc-acm.c
            serial_close():drivers/usb/serial/usb-serial.c
            pti_tty_driver_close():drivers/misc/pti.c
            ipoctal_close():drivers/ipack/devices/ipoctal.c
            cy_close():drivers/tty/cyclades.c
            isicom_close():drivers/tty/isicom.c
            dashtty_close():drivers/tty/metag_da.c
            moxa_close():drivers/tty/moxa.c
            goldfish_tty_close():drivers/tty/goldfish.c
            ehv_bc_tty_close():drivers/tty/ehv_bytechan.c
            kgdb_nmi_tty_close():drivers/tty/serial/kgdb_nmi.c
            ifx_spi_close():drivers/tty/serial/ifx6x60.c
            smd_tty_close():drivers/tty/serial/msm_smd_tty.c
            ntty_close():drivers/tty/nozomi.c
            capinc_tty_close():drivers/isdn/capi/capi.c
            tpk_close():drivers/char/ttyprintk.c
            sdio_uart_close():drivers/mmc/card/sdio_uart.c                      |
            rfcomm_tty_close():net/bluetooth/rfcomm/tty.c                       |
                          |                                                     |
                          +- tty_port_close():drivers/tty/tty_port.c -----------+
                                                                                |
                                                                                +- tty_port_close_start()
                                                                                +- tty_port_close_end()
    
    * line_close() is the .close method for 2 um drivers,
      declared in ./arch/um/drivers/stdio_console.c and
      in ./arch/um/drivers/ssl.c, and not called directly
    Signed-off-by: NPeter Hurley <peter@hurleysoftware.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    0733db91
tty_port.c 15.9 KB