Re: [PATCH v5 2/5] serial: serialize asynchronous write wakeups with the port lock
From: Maciej W. Rozycki
Date: Sun Oct 25 2026 - 01:10:25 EST
On Sat, 24 Oct 2026, James Hilliard wrote:
> uart_write_wakeup() expects the UART port lock to be held. Several worker,
> DMA completion and interrupt paths call it without that lock, including
> indirect calls from uart_handle_cts_change() and the transmit helpers.
Fair enough, and thank you for the cleanup and spotting the issue in the
first place, however...
> diff --git a/drivers/tty/serial/sb1250-duart.c b/drivers/tty/serial/sb1250-duart.c
> index b4e1b90e5960..b15f76acd06b 100644
> --- a/drivers/tty/serial/sb1250-duart.c
> +++ b/drivers/tty/serial/sb1250-duart.c
> @@ -454,10 +454,12 @@ static irqreturn_t sbd_interrupt(int irq, void *dev_id)
>
> if (intstat & M_DUART_ISR_RX)
> sbd_receive_chars(sport);
> - if (intstat & M_DUART_ISR_IN)
> - sbd_status_handle(sport);
> - if (intstat & M_DUART_ISR_TX)
> - sbd_transmit_chars(sport);
> + scoped_guard(uart_port_lock_irqsave, uport) {
> + if (intstat & M_DUART_ISR_IN)
> + sbd_status_handle(sport);
> + if (intstat & M_DUART_ISR_TX)
> + sbd_transmit_chars(sport);
> + }
... why do you think the whole functions need to be called with the lock
held while they may or may not call the handlers in question even? I
think we should avoid excessive locking where possible to avoid holding
execution elsewhere unnecessarily, shouldn't we?
Maciej