• Jason Wang's avatar
    serial-core: restore termios settings when resume console ports · 891b9dd1
    Jason Wang authored
    The commit 4547be78 rewrites suspend and resume functions. According
    to this rewrite, when a serial port is a printk console device and
    can suspend(without set no_console_suspend flag), it will definitely
    call set_termios function during its resume, but parameter termios
    isn't initialized, this will pass an unpredictable config to the
    serial port. If this serial port is not a userspace opened tty device
    , a suspend and resume action will make this serial port unusable.
    I.E. ttyS0 is a printk console device, ttyS1 or keyboard+display is
    userspace tty device, a suspend/resume action will make ttyS0
    unusable.
    
    If a serial port is both a printk console device and an opened tty
    device, this issue can be overcome because it will call set_termios
    again with the correct parameter in the uart_change_speed function.
    
    Refer to the deleted content of commit 4547be78, revert parts relate
    to restore settings into parameter termios. It is safe because if
    a serial port is a printk console only device, the only meaningful
    field in termios is c_cflag and its old config is saved in
    uport->cons->cflag, if this port is also an opened tty device,
    it will clear uport->cons->cflag in the uart_open and the old config
    is saved in tty->termios.
    Signed-off-by: default avatarJason Wang <jason77.wang@gmail.com>
    Acked-by: default avatarStanislav Brabec <sbrabec@suse.cz>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    891b9dd1
serial_core.c 63.6 KB