History

Revert "serial: core: Refactor uart_unlock_and_check_sysrq()"

This reverts commit da9a5aa3402db0ff3b57216d8dbf2478e1046cae. 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.

Johan Hovold committed 6 years ago

Commit 10652a91 parent a7172562 files · +15 −11Browse files

Unified · Split

2 files
  1. drivers/tty/serial/serial_core.c +13 −10
  2. include/linux/serial_core.h +2 −1
drivers/tty/serial/serial_core.c+13−10
@@ -3239,19 +3239,22 @@ int uart_prepare_sysrq_char(struct uart_port *port, unsigned int ch) · 3238 unmodified lines
3239}3239}
3240EXPORT_SYMBOL_GPL(uart_prepare_sysrq_char);3240EXPORT_SYMBOL_GPL(uart_prepare_sysrq_char);
3241 3241
3242void uart_unlock_and_check_sysrq(struct uart_port *port, unsigned long flags)3242void uart_unlock_and_check_sysrq(struct uart_port *port, unsigned long irqflags)
3243__releases(&port->lock)
3244{3243{
3245 if (port->has_sysrq) {3244 int sysrq_ch;
3246 int sysrq_ch = port->sysrq_ch;
3247 3245
3248 port->sysrq_ch = 0;3246 if (!port->has_sysrq) {
3249 spin_unlock_irqrestore(&port->lock, flags);3247 spin_unlock_irqrestore(&port->lock, irqflags);
3250 if (sysrq_ch)3248 return;
3251 handle_sysrq(sysrq_ch);
3252 } else {
3253 spin_unlock_irqrestore(&port->lock, flags);
3254 }3249 }
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);
3255}3258}
3256EXPORT_SYMBOL_GPL(uart_unlock_and_check_sysrq);3259EXPORT_SYMBOL_GPL(uart_unlock_and_check_sysrq);
3257 3260
include/linux/serial_core.h+2−1
@@ -464,7 +464,8 @@ extern void uart_insert_char(struct uart_port *port, unsigned int status, · 463 unmodified lines
464 464
465extern int uart_handle_sysrq_char(struct uart_port *port, unsigned int ch);465extern int uart_handle_sysrq_char(struct uart_port *port, unsigned int ch);
466extern int uart_prepare_sysrq_char(struct uart_port *port, unsigned int ch);466extern int uart_prepare_sysrq_char(struct uart_port *port, unsigned int ch);
467extern void uart_unlock_and_check_sysrq(struct uart_port *port, unsigned long flags);467extern void uart_unlock_and_check_sysrq(struct uart_port *port,
468 unsigned long irqflags);
468extern int uart_handle_break(struct uart_port *port);469extern int uart_handle_break(struct uart_port *port);
469 470
470/*471/*