patch "Revert "serial: core: Refactor uart_unlock_and_check_sysrq()"" added to tty-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
Revert "serial: core: Refactor uart_unlock_and_check_sysrq()"
to my tty git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
in the tty-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 10652a9e9fe3fbcaca090f99cd3060ac3fee2913 Mon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Wed, 10 Jun 2020 17:22:30 +0200
Subject: 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.
--- drivers/tty/serial/serial_core.c | 23 +++++++++++++---------- include/linux/serial_core.h | 3 ++- 2 files changed, 15 insertions(+), 11 deletions(-)
drivers/tty/serial/serial_core.c +13 -10
@@ -3239,19 +3239,22 @@ int uart_prepare_sysrq_char(struct uart_port *port, unsigned int ch) }EXPORT_SYMBOL_GPL (uart_prepare_sysrq_char); -void uart_unlock_and_check_sysrq (struct uart_port *port,unsigned long flags) -__releases(&port->lock) +void uart_unlock_and_check_sysrq (struct uart_port *port,unsigned long irqflags) { -if (port->has_sysrq) { -int sysrq_ch = port->sysrq_ch; +int sysrq_ch; - port->sysrq_ch =0 ; -spin_unlock_irqrestore (&port->lock, flags); -if (sysrq_ch) -handle_sysrq (sysrq_ch); - }else { -spin_unlock_irqrestore (&port->lock, flags); +if (!port->has_sysrq) { +spin_unlock_irqrestore (&port->lock, irqflags); +return ; } + + sysrq_ch = port->sysrq_ch; + port->sysrq_ch =0 ; + +spin_unlock_irqrestore (&port->lock, irqflags); + +if (sysrq_ch) +handle_sysrq (sysrq_ch); }EXPORT_SYMBOL_GPL (uart_unlock_and_check_sysrq);
include/linux/serial_core.h +2 -1
@@ -464,7 +464,8 @@ extern void uart_insert_char(struct uart_port *port, unsigned int status,extern int uart_handle_sysrq_char (struct uart_port *port,unsigned int ch);extern int uart_prepare_sysrq_char (struct uart_port *port,unsigned int ch); -extern void uart_unlock_and_check_sysrq (struct uart_port *port,unsigned long flags); +extern void uart_unlock_and_check_sysrq (struct uart_port *port, +unsigned long irqflags);extern int uart_handle_break (struct uart_port *port);/*
Signature · 1 line
2.27.0