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@vger.kernel.org > Signed-off-by: Jacques Nilo > --- > 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 -- i.