Message ID | 4C1B7312.6080708@ThePTRGroup.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Kumar Gala |
Headers | show |
On Fri, Jun 18, 2010 at 8:22 AM, Chuck Meade <chuck@theptrgroup.com> wrote: > From: Chuck Meade <chuck@ThePTRGroup.com> > > The UCC UART driver is missing a call to uart_update_timeout(). > Without this call, attempting to close the port after outputting large > amounts of data (i.e. using tty and uart buffering) results in long > timeouts before the port will actually be shut down. > > For example, cat a large file to a UCC UART port. With the current > driver, the port will stay open for 30 seconds after the last byte > of data is output. But with this patch, the port is closed as > expected, just after the data has been output (tx fifos empty). > > Signed-off-by: Chuck Meade <chuck@ThePTRGroup.com> Acked-by: Timur Tabi <timur@freescale.com>
On Jun 18, 2010, at 8:22 AM, Chuck Meade wrote: > From: Chuck Meade <chuck@ThePTRGroup.com> > > The UCC UART driver is missing a call to uart_update_timeout(). > Without this call, attempting to close the port after outputting large > amounts of data (i.e. using tty and uart buffering) results in long > timeouts before the port will actually be shut down. > > For example, cat a large file to a UCC UART port. With the current > driver, the port will stay open for 30 seconds after the last byte > of data is output. But with this patch, the port is closed as > expected, just after the data has been output (tx fifos empty). > > Signed-off-by: Chuck Meade <chuck@ThePTRGroup.com> > --- > drivers/serial/ucc_uart.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) applied to next - k
diff --git a/drivers/serial/ucc_uart.c b/drivers/serial/ucc_uart.c index 907b06f..a136030 100644 --- a/drivers/serial/ucc_uart.c +++ b/drivers/serial/ucc_uart.c @@ -961,6 +961,9 @@ static void qe_uart_set_termios(struct uart_port *port, /* Do we really need a spinlock here? */ spin_lock_irqsave(&port->lock, flags); + /* Update the per-port timeout. */ + uart_update_timeout(port, termios->c_cflag, baud); + out_be16(&uccp->upsmr, upsmr); if (soft_uart) { out_be16(&uccup->supsmr, supsmr);