The port shadow registers, ->fcr and ->mcr, must be protected from
concurrent updates. Relocate the shadow register updates in
serial8250_do_set_termios() to the port lock critical section.

Signed-off-by: Peter Hurley <pe...@hurleysoftware.com>
---
 drivers/tty/serial/8250/8250_core.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/tty/serial/8250/8250_core.c 
b/drivers/tty/serial/8250/8250_core.c
index 8fd4b57..ed15341 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -2526,6 +2526,15 @@ serial8250_do_set_termios(struct uart_port *port, struct 
ktermios *termios,
                                  port->uartclk / 16);
        quot = serial8250_get_divisor(up, baud, &frac);
 
+       /*
+        * Ok, we're now changing the port state.  Do it with
+        * interrupts disabled.
+        */
+       serial8250_rpm_get(up);
+       spin_lock_irqsave(&port->lock, flags);
+
+       up->lcr = cval;                                 /* Save computed LCR */
+
        if (up->capabilities & UART_CAP_FIFO && port->fifosize > 1) {
                /* NOTE: If fifo_bug is not set, a user can set RX_trigger. */
                if ((baud < 2400 && !up->dma) || up->fifo_bug) {
@@ -2549,15 +2558,6 @@ serial8250_do_set_termios(struct uart_port *port, struct 
ktermios *termios,
        }
 
        /*
-        * Ok, we're now changing the port state.  Do it with
-        * interrupts disabled.
-        */
-       serial8250_rpm_get(up);
-       spin_lock_irqsave(&port->lock, flags);
-
-       up->lcr = cval;                                 /* Save computed LCR */
-
-       /*
         * Update the per-port timeout.
         */
        uart_update_timeout(port, termios->c_cflag, baud);
-- 
2.2.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to