Skip to content

Commit

Permalink
TTY: fix tty_wait_until_sent maximum timeout
Browse files Browse the repository at this point in the history
Currently tty_wait_until_sent may take up to twice as long as the
requested timeout while waiting for driver and hardware buffers to
drain.

Fix this by taking the remaining number of jiffies after waiting for
driver buffers to drain into account so that the timeout actually
becomes a maximum timeout as it is documented to be.

Note that this specifically implies tighter timings when closing a port
as a consequence of actually honouring the port closing-wait setting
for drivers relying on tty_wait_until_sent_from_close (e.g. via
tty_port_close_start).

Signed-off-by: Johan Hovold <johan@kernel.org>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Johan Hovold authored and Greg Kroah-Hartman committed Mar 7, 2015
1 parent 79fbf4a commit c37bc68
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions drivers/tty/tty_ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -218,10 +218,10 @@ void tty_wait_until_sent(struct tty_struct *tty, long timeout)
if (!timeout)
timeout = MAX_SCHEDULE_TIMEOUT;

if (wait_event_interruptible_timeout(tty->write_wait,
!tty_chars_in_buffer(tty), timeout) < 0) {
timeout = wait_event_interruptible_timeout(tty->write_wait,
!tty_chars_in_buffer(tty), timeout);
if (timeout <= 0)
return;
}

if (timeout == MAX_SCHEDULE_TIMEOUT)
timeout = 0;
Expand Down

0 comments on commit c37bc68

Please sign in to comment.