In most cases serial8250_tx_chars is called with spinlock held. Fix the remaining location, too. Signed-off-by: Steffen Trumtrar <s.trumtrar@xxxxxxxxxxxxxx> --- drivers/tty/serial/8250/8250_port.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c index b0af13074cd3..3310c2b70138 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -1559,6 +1559,7 @@ static void serial8250_stop_tx(struct uart_port *port) static inline void __start_tx(struct uart_port *port) { struct uart_8250_port *up = up_to_u8250p(port); + unsigned long flags; if (up->dma && !up->dma->tx_dma(up)) return; @@ -1569,8 +1570,11 @@ static inline void __start_tx(struct uart_port *port) lsr = serial_in(up, UART_LSR); up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; - if (lsr & UART_LSR_THRE) + if (lsr & UART_LSR_THRE) { + spin_lock_irqsave(&port->lock, flags); serial8250_tx_chars(up); + spin_unlock_irqrestore(&port->lock, flags); + } } } -- 2.20.1