Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

serial: 8250: Optimize irq enable after console write

Commit 7f9803072ff6 ("serial: 8250: Support console on software emulated
rs485 ports") amended serial8250_console_write() with rs485 support, but
positioned the invocation of ->rs485_stop_tx() after re-enablement of
interrupts. The irq handler and ->console_write() are serialized with
the port spinlock, so no problem there, but due to the rs485 delay, the
irq handler may unnecessarily spin for a while. Avoid that by moving
->rs485_stop_tx() before re-enablement of interrupts, which also mirrors
the order at the beginning of serial8250_console_write().

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Link: https://lore.kernel.org/r/019839cb1f61b01210b6ff9ac9f9079ca77f8411.1585319447.git.lukas@wunner.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Lukas Wunner and committed by
Greg Kroah-Hartman
8d5b3054 4e36f94e

+2 -1
+2 -1
drivers/tty/serial/8250/8250_port.c
··· 3268 3268 * and restore the IER 3269 3269 */ 3270 3270 wait_for_xmitr(up, BOTH_EMPTY); 3271 - serial_port_out(port, UART_IER, ier); 3272 3271 3273 3272 if (em485) { 3274 3273 mdelay(port->rs485.delay_rts_after_send); 3275 3274 if (em485->tx_stopped) 3276 3275 up->rs485_stop_tx(up); 3277 3276 } 3277 + 3278 + serial_port_out(port, UART_IER, ier); 3278 3279 3279 3280 /* 3280 3281 * The receive handling will happen properly because the