Skip to content

Commit 10652a9

Browse files
jhovoldgregkh
authored andcommitted
Revert "serial: core: Refactor uart_unlock_and_check_sysrq()"
This reverts commit da9a5aa. In order to ease backporting a fix for a sysrq regression, revert this rewrite which was since added on top. The other sysrq helpers now bail out early when sysrq is not enabled; it's better to keep that pattern here as well. Note that the __releases() attribute won't be needed after the follow-on fix either. Fixes: da9a5aa ("serial: core: Refactor uart_unlock_and_check_sysrq()") Cc: stable <[email protected]> Signed-off-by: Johan Hovold <[email protected]> Reviewed-by: Andy Shevchenko <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent a717256 commit 10652a9

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

drivers/tty/serial/serial_core.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3239,19 +3239,22 @@ int uart_prepare_sysrq_char(struct uart_port *port, unsigned int ch)
32393239
}
32403240
EXPORT_SYMBOL_GPL(uart_prepare_sysrq_char);
32413241

3242-
void uart_unlock_and_check_sysrq(struct uart_port *port, unsigned long flags)
3243-
__releases(&port->lock)
3242+
void uart_unlock_and_check_sysrq(struct uart_port *port, unsigned long irqflags)
32443243
{
3245-
if (port->has_sysrq) {
3246-
int sysrq_ch = port->sysrq_ch;
3244+
int sysrq_ch;
32473245

3248-
port->sysrq_ch = 0;
3249-
spin_unlock_irqrestore(&port->lock, flags);
3250-
if (sysrq_ch)
3251-
handle_sysrq(sysrq_ch);
3252-
} else {
3253-
spin_unlock_irqrestore(&port->lock, flags);
3246+
if (!port->has_sysrq) {
3247+
spin_unlock_irqrestore(&port->lock, irqflags);
3248+
return;
32543249
}
3250+
3251+
sysrq_ch = port->sysrq_ch;
3252+
port->sysrq_ch = 0;
3253+
3254+
spin_unlock_irqrestore(&port->lock, irqflags);
3255+
3256+
if (sysrq_ch)
3257+
handle_sysrq(sysrq_ch);
32553258
}
32563259
EXPORT_SYMBOL_GPL(uart_unlock_and_check_sysrq);
32573260

include/linux/serial_core.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,8 @@ extern void uart_insert_char(struct uart_port *port, unsigned int status,
464464

465465
extern int uart_handle_sysrq_char(struct uart_port *port, unsigned int ch);
466466
extern int uart_prepare_sysrq_char(struct uart_port *port, unsigned int ch);
467-
extern void uart_unlock_and_check_sysrq(struct uart_port *port, unsigned long flags);
467+
extern void uart_unlock_and_check_sysrq(struct uart_port *port,
468+
unsigned long irqflags);
468469
extern int uart_handle_break(struct uart_port *port);
469470

470471
/*

0 commit comments

Comments
 (0)