lkml.org 
[lkml]   [2010]   [Mar]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/6] tty_port,usb-console: Fix usb serial console open/close regression
    Date
    Commit e1108a63e10d344284011cccc06328b2cd3e5da3 ("usb_serial: Use the
    shutdown() operation") breaks the ability to use a usb console
    starting in 2.6.33. This was observed when using
    console=ttyUSB0,115200 as a boot argument with an FTDI device. The
    error is:

    ftdi_sio ttyUSB0: ftdi_submit_read_urb - failed submitting read urb, error -22

    The handling of the ASYNCB_INITIALIZED changed in 2.6.32 such that in
    tty_port_shutdown() it always clears the flag if it is set. The fix
    is to add a variable to the tty_port struct to indicate when the tty
    port is a console.

    CC: Greg Kroah-Hartman <gregkh@suse.de>
    CC: Alan Cox <alan@linux.intel.com>
    CC: Alan Stern <stern@rowland.harvard.edu>
    CC: Oliver Neukum <oliver@neukum.org>
    CC: Andrew Morton <akpm@linux-foundation.org>
    CC: linux-usb@vger.kernel.org
    Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
    ---
    drivers/char/tty_port.c | 2 +-
    drivers/usb/serial/console.c | 1 +
    include/linux/tty.h | 1 +
    3 files changed, 3 insertions(+), 1 deletions(-)

    diff --git a/drivers/char/tty_port.c b/drivers/char/tty_port.c
    index be492dd..a3bd1d0 100644
    --- a/drivers/char/tty_port.c
    +++ b/drivers/char/tty_port.c
    @@ -119,7 +119,7 @@ EXPORT_SYMBOL(tty_port_tty_set);
    static void tty_port_shutdown(struct tty_port *port)
    {
    mutex_lock(&port->mutex);
    - if (port->ops->shutdown &&
    + if (port->ops->shutdown && !port->console &&
    test_and_clear_bit(ASYNCB_INITIALIZED, &port->flags))
    port->ops->shutdown(port);
    mutex_unlock(&port->mutex);
    diff --git a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c
    index b22ac32..f347da2 100644
    --- a/drivers/usb/serial/console.c
    +++ b/drivers/usb/serial/console.c
    @@ -181,6 +181,7 @@ static int usb_console_setup(struct console *co, char *options)
    /* The console is special in terms of closing the device so
    * indicate this port is now acting as a system console. */
    port->console = 1;
    + port->port.console = 1;

    mutex_unlock(&serial->disc_mutex);
    return retval;
    diff --git a/include/linux/tty.h b/include/linux/tty.h
    index d96e588..a42d7a6 100644
    --- a/include/linux/tty.h
    +++ b/include/linux/tty.h
    @@ -223,6 +223,7 @@ struct tty_port {
    wait_queue_head_t close_wait; /* Close waiters */
    wait_queue_head_t delta_msr_wait; /* Modem status change */
    unsigned long flags; /* TTY flags ASY_*/
    + unsigned char console:1; /* port is a console */
    struct mutex mutex; /* Locking */
    struct mutex buf_mutex; /* Buffer alloc lock */
    unsigned char *xmit_buf; /* Optional buffer */
    --
    1.6.3.1.9.g95405b


    \
     
     \ /
      Last update: 2010-03-09 07:33    [W:0.021 / U:0.592 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site