diff options
author | Johan Hovold <jhovold@gmail.com> | 2013-01-14 16:52:54 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-01-18 15:45:16 -0800 |
commit | 77de2518e854501c1542199449354fab4b2377ac (patch) | |
tree | 51b16609c50c9bb4c94af775e03a89c2271772c6 /drivers/usb/serial/io_ti.c | |
parent | cbf50a4125f5242dd70b1f2342dbba2d94c6d94e (diff) |
USB: io_ti: move write-fifo flushing to close
Move write-fifo flushing from chase_port to close where it belongs.
Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/serial/io_ti.c')
-rw-r--r-- | drivers/usb/serial/io_ti.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c index 58184f3de68..596f8c9474b 100644 --- a/drivers/usb/serial/io_ti.c +++ b/drivers/usb/serial/io_ti.c @@ -521,8 +521,7 @@ exit_is_tx_active: return bytes_left; } -static void chase_port(struct edgeport_port *port, unsigned long timeout, - int flush) +static void chase_port(struct edgeport_port *port, unsigned long timeout) { int baud_rate; struct tty_struct *tty = tty_port_tty_get(&port->port->port); @@ -550,8 +549,6 @@ static void chase_port(struct edgeport_port *port, unsigned long timeout, } set_current_state(TASK_RUNNING); remove_wait_queue(&tty->write_wait, &wait); - if (flush) - kfifo_reset_out(&port->write_fifo); spin_unlock_irqrestore(&port->ep_lock, flags); tty_kref_put(tty); @@ -1956,6 +1953,7 @@ static void edge_close(struct usb_serial_port *port) struct edgeport_serial *edge_serial; struct edgeport_port *edge_port; struct usb_serial *serial = port->serial; + unsigned long flags; int port_number; edge_serial = usb_get_serial_data(port->serial); @@ -1967,12 +1965,14 @@ static void edge_close(struct usb_serial_port *port) * this flag and dump add read data */ edge_port->close_pending = 1; - /* chase the port close and flush */ - chase_port(edge_port, (HZ * closing_wait) / 100, 1); + chase_port(edge_port, (HZ * closing_wait) / 100); usb_kill_urb(port->read_urb); usb_kill_urb(port->write_urb); edge_port->ep_write_urb_in_use = 0; + spin_lock_irqsave(&edge_port->ep_lock, flags); + kfifo_reset_out(&edge_port->write_fifo); + spin_unlock_irqrestore(&edge_port->ep_lock, flags); /* assuming we can still talk to the device, * send a close port command to it */ @@ -2515,7 +2515,7 @@ static void edge_break(struct tty_struct *tty, int break_state) int bv = 0; /* Off */ /* chase the port close */ - chase_port(edge_port, 0, 0); + chase_port(edge_port, 0); if (break_state == -1) bv = 1; /* On */ |