Patch "tty: serial: jsm: hold port lock when reporting modem line changes" has been added to the 4.19-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    tty: serial: jsm: hold port lock when reporting modem line changes

to the 4.19-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     tty-serial-jsm-hold-port-lock-when-reporting-modem-l.patch
and it can be found in the queue-4.19 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 7d0a3ce30291589e552160a6168899f72cd91662
Author: Zheyu Ma <zheyuma97@xxxxxxxxx>
Date:   Wed Jul 14 05:53:23 2021 +0000

    tty: serial: jsm: hold port lock when reporting modem line changes
    
    [ Upstream commit 240e126c28df084222f0b661321e8e3ecb0d232e ]
    
    uart_handle_dcd_change() requires a port lock to be held and will emit a
    warning when lockdep is enabled.
    
    Held corresponding lock to fix the following warnings.
    
    [  132.528648] WARNING: CPU: 5 PID: 11600 at drivers/tty/serial/serial_core.c:3046 uart_handle_dcd_change+0xf4/0x120
    [  132.530482] Modules linked in:
    [  132.531050] CPU: 5 PID: 11600 Comm: jsm Not tainted 5.14.0-rc1-00003-g7fef2edf7cc7-dirty #31
    [  132.535268] RIP: 0010:uart_handle_dcd_change+0xf4/0x120
    [  132.557100] Call Trace:
    [  132.557562]  ? __free_pages+0x83/0xb0
    [  132.558213]  neo_parse_modem+0x156/0x220
    [  132.558897]  neo_param+0x399/0x840
    [  132.559495]  jsm_tty_open+0x12f/0x2d0
    [  132.560131]  uart_startup.part.18+0x153/0x340
    [  132.560888]  ? lock_is_held_type+0xe9/0x140
    [  132.561660]  uart_port_activate+0x7f/0xe0
    [  132.562351]  ? uart_startup.part.18+0x340/0x340
    [  132.563003]  tty_port_open+0x8d/0xf0
    [  132.563523]  ? uart_set_options+0x1e0/0x1e0
    [  132.564125]  uart_open+0x24/0x40
    [  132.564604]  tty_open+0x15c/0x630
    
    Signed-off-by: Zheyu Ma <zheyuma97@xxxxxxxxx>
    Link: https://lore.kernel.org/r/1626242003-3809-1-git-send-email-zheyuma97@xxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/tty/serial/jsm/jsm_neo.c b/drivers/tty/serial/jsm/jsm_neo.c
index bf0e2a4cb0ce..c6f927a76c3b 100644
--- a/drivers/tty/serial/jsm/jsm_neo.c
+++ b/drivers/tty/serial/jsm/jsm_neo.c
@@ -815,7 +815,9 @@ static void neo_parse_isr(struct jsm_board *brd, u32 port)
 		/* Parse any modem signal changes */
 		jsm_dbg(INTR, &ch->ch_bd->pci_dev,
 			"MOD_STAT: sending to parse_modem_sigs\n");
+		spin_lock_irqsave(&ch->uart_port.lock, lock_flags);
 		neo_parse_modem(ch, readb(&ch->ch_neo_uart->msr));
+		spin_unlock_irqrestore(&ch->uart_port.lock, lock_flags);
 	}
 }
 
diff --git a/drivers/tty/serial/jsm/jsm_tty.c b/drivers/tty/serial/jsm/jsm_tty.c
index 689774c073ca..8438454ca653 100644
--- a/drivers/tty/serial/jsm/jsm_tty.c
+++ b/drivers/tty/serial/jsm/jsm_tty.c
@@ -187,6 +187,7 @@ static void jsm_tty_break(struct uart_port *port, int break_state)
 
 static int jsm_tty_open(struct uart_port *port)
 {
+	unsigned long lock_flags;
 	struct jsm_board *brd;
 	struct jsm_channel *channel =
 		container_of(port, struct jsm_channel, uart_port);
@@ -240,6 +241,7 @@ static int jsm_tty_open(struct uart_port *port)
 	channel->ch_cached_lsr = 0;
 	channel->ch_stops_sent = 0;
 
+	spin_lock_irqsave(&port->lock, lock_flags);
 	termios = &port->state->port.tty->termios;
 	channel->ch_c_cflag	= termios->c_cflag;
 	channel->ch_c_iflag	= termios->c_iflag;
@@ -259,6 +261,7 @@ static int jsm_tty_open(struct uart_port *port)
 	jsm_carrier(channel);
 
 	channel->ch_open_count++;
+	spin_unlock_irqrestore(&port->lock, lock_flags);
 
 	jsm_dbg(OPEN, &channel->ch_bd->pci_dev, "finish\n");
 	return 0;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux