]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
serial: imx: get rid of unbounded busy-waiting loop
authorSergey Organov <sorganov@gmail.com>
Wed, 28 Aug 2019 18:37:51 +0000 (21:37 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Sep 2019 10:43:55 +0000 (12:43 +0200)
imx_set_termios(): remove busy-waiting "drain Tx FIFO" loop. Worse
yet, it was potentially unbounded wait due to RTS/CTS (hardware)
handshake.

Let user space ensure draining is done before termios change, if
draining is needed in the first place.

Signed-off-by: Sergey Organov <sorganov@gmail.com>
Link: https://lore.kernel.org/r/1567017475-11919-2-git-send-email-sorganov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/imx.c

index d9a73c7683ea3493543eac76f93bbe20023b9bc4..47b6156f5b2c96ae6016f21b39a07ce4ffa04872 100644 (file)
@@ -1644,7 +1644,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios,
        uart_update_timeout(port, termios->c_cflag, baud);
 
        /*
-        * disable interrupts and drain transmitter
+        * disable interrupts
         */
        old_ucr1 = imx_uart_readl(sport, UCR1);
        imx_uart_writel(sport,
@@ -1652,9 +1652,6 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios,
                        UCR1);
        imx_uart_writel(sport, old_ucr2 & ~UCR2_ATEN, UCR2);
 
-       while (!(imx_uart_readl(sport, USR2) & USR2_TXDC))
-               barrier();
-
        /* then, disable everything */
        imx_uart_writel(sport, old_ucr2 & ~(UCR2_TXEN | UCR2_RXEN | UCR2_ATEN), UCR2);