]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
serial: 8250_dw: dispatch SysRq character in dw8250_handle_irq()
authorJacques Nilo <jnilo@free.fr>
Wed, 13 May 2026 13:30:25 +0000 (15:30 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 22 May 2026 09:51:35 +0000 (11:51 +0200)
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_check_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
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Jacques Nilo <jnilo@free.fr>
Link: https://patch.msgid.link/ed56fcaf4af24e4ed011a7bce206e0182acb761c.1778675349.git.jnilo@free.fr
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_dw.c

index 94beadb4024df30327a68be9ef611d82520acbac..2af0c4d0ad82373b5cd36ca8e1b90dff5c6670d0 100644 (file)
@@ -427,7 +427,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_check_sysrq_irqsave)(p);
 
        switch (FIELD_GET(DW_UART_IIR_IID, iir)) {
        case UART_IIR_NO_INT: