Re: [PATCH 3/3] serial: 8250_dw: dispatch SysRq character in dw8250_handle_irq()

From: Ilpo Järvinen

Date: Wed May 13 2026 - 07:50:25 EST


On Tue, 12 May 2026, Jacques Nilo wrote:

> dw8250_handle_irq() calls serial8250_handle_irq_locked() with the port
> lock held via guard(uart_port_lock_irqsave). The guard destructor is
> plain uart_port_unlock_irqrestore(), so a SysRq character captured into
> port->sysrq_ch by uart_prepare_sysrq_char() is dropped without ever
> being dispatched to handle_sysrq().
>
> This is the same regression pattern as in serial8250_handle_irq(),
> introduced when 883c5a2bc934 ("serial: 8250_dw: Rework
> dw8250_handle_irq() locking and IIR handling") moved the function to
> the guard()-based locking scheme without using the sysrq-aware unlock
> helper.
>
> Switch to guard(uart_port_lock_sysrq_irqsave) so that captured
> sysrq_ch is dispatched on scope exit, matching the fix in
> serial8250_handle_irq().
>
> Fixes: 883c5a2bc934 ("serial: 8250_dw: Rework dw8250_handle_irq() locking and IIR handling")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Jacques Nilo <jnilo@xxxxxxx>
> ---
> drivers/tty/serial/8250/8250_dw.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
> index 55e40c10f..237543fa7 100644
> --- a/drivers/tty/serial/8250/8250_dw.c
> +++ b/drivers/tty/serial/8250/8250_dw.c
> @@ -416,7 +416,7 @@ static int dw8250_handle_irq(struct uart_port *p)
> unsigned int quirks = d->pdata->quirks;
> unsigned int status;
>
> - guard(uart_port_lock_irqsave)(p);
> + guard(uart_port_lock_sysrq_irqsave)(p);
>
> switch (FIELD_GET(DW_UART_IIR_IID, iir)) {
> case UART_IIR_NO_INT:
>

Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx>

--
i.