serial: core: Remove unsafe x_char optimization

uart_unthrottle() attempts to avoid sending START and the previous
x_char if the previous x_char has not yet been sent. However, this
optimization could leave the sender in a throttled state; for example,
if the sender is throttled and this unthrottle coincides with a manual
tcflow(TCION) from user-space, then neither START would be sent.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Peter Hurley 2014-09-02 17:39:14 -04:00 committed by Greg Kroah-Hartman
parent c235ccc1c4
commit fba594a848
1 changed files with 2 additions and 6 deletions

View File

@ -647,12 +647,8 @@ static void uart_unthrottle(struct tty_struct *tty)
mask &= ~port->flags;
}
if (mask & UPF_SOFT_FLOW) {
if (port->x_char)
port->x_char = 0;
else
if (mask & UPF_SOFT_FLOW)
uart_send_xchar(tty, START_CHAR(tty));
}
if (mask & UPF_HARD_FLOW)
uart_set_mctrl(port, TIOCM_RTS);