lkml.org 
[lkml]   [2022]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 242/390] serial: 8250: Fix restoring termios speed after suspend
    Date
    From: Pali Rohár <pali@kernel.org>

    [ Upstream commit 379a33786d489ab81885ff0b3935cfeb36137fea ]

    Since commit edc6afc54968 ("tty: switch to ktermios and new framework")
    termios speed is no longer stored only in c_cflag member but also in new
    additional c_ispeed and c_ospeed members. If BOTHER flag is set in c_cflag
    then termios speed is stored only in these new members.

    Since commit 027b57170bf8 ("serial: core: Fix initializing and restoring
    termios speed") termios speed is available also in struct console.

    So properly restore also c_ispeed and c_ospeed members after suspend to fix
    restoring termios speed which is not represented by Bnnn constant.

    Fixes: 4516d50aabed ("serial: 8250: Use canary to restart console after suspend")
    Signed-off-by: Pali Rohár <pali@kernel.org>
    Link: https://lore.kernel.org/r/20220924104324.4035-1-pali@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/tty/serial/8250/8250_port.c | 7 ++++++-
    1 file changed, 6 insertions(+), 1 deletion(-)

    diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
    index 4a0793e1ba61..ecd2b3d252ec 100644
    --- a/drivers/tty/serial/8250/8250_port.c
    +++ b/drivers/tty/serial/8250/8250_port.c
    @@ -3289,8 +3289,13 @@ static void serial8250_console_restore(struct uart_8250_port *up)
    unsigned int baud, quot, frac = 0;

    termios.c_cflag = port->cons->cflag;
    - if (port->state->port.tty && termios.c_cflag == 0)
    + termios.c_ispeed = port->cons->ispeed;
    + termios.c_ospeed = port->cons->ospeed;
    + if (port->state->port.tty && termios.c_cflag == 0) {
    termios.c_cflag = port->state->port.tty->termios.c_cflag;
    + termios.c_ispeed = port->state->port.tty->termios.c_ispeed;
    + termios.c_ospeed = port->state->port.tty->termios.c_ospeed;
    + }

    baud = serial8250_get_baud_rate(port, &termios, NULL);
    quot = serial8250_get_divisor(port, baud, &frac);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-24 15:21    [W:2.329 / U:1.664 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site