| From f528bf4f57e43d1af4b2a5c97f09e43e0338c105 Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Wed, 4 Mar 2015 10:39:05 +0100 |
| Subject: USB: serial: fix infinite wait_until_sent timeout |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| commit f528bf4f57e43d1af4b2a5c97f09e43e0338c105 upstream. |
| |
| Make sure to handle an infinite timeout (0). |
| |
| Note that wait_until_sent is currently never called with a 0-timeout |
| argument due to a bug in tty_wait_until_sent. |
| |
| Fixes: dcf010503966 ("USB: serial: add generic wait_until_sent |
| implementation") |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/serial/generic.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/usb/serial/generic.c |
| +++ b/drivers/usb/serial/generic.c |
| @@ -258,7 +258,8 @@ void usb_serial_generic_wait_until_sent( |
| * character or at least one jiffy. |
| */ |
| period = max_t(unsigned long, (10 * HZ / bps), 1); |
| - period = min_t(unsigned long, period, timeout); |
| + if (timeout) |
| + period = min_t(unsigned long, period, timeout); |
| |
| dev_dbg(&port->dev, "%s - timeout = %u ms, period = %u ms\n", |
| __func__, jiffies_to_msecs(timeout), |
| @@ -268,7 +269,7 @@ void usb_serial_generic_wait_until_sent( |
| schedule_timeout_interruptible(period); |
| if (signal_pending(current)) |
| break; |
| - if (time_after(jiffies, expire)) |
| + if (timeout && time_after(jiffies, expire)) |
| break; |
| } |
| } |