Skip to content
  • Peter Hurley's avatar
    serial: 8250_dw: Fix deadlock in LCR workaround · e3f5ff37
    Peter Hurley authored
    
    
    commit 7fd6f640f2dd17dac6ddd6702c378cb0bb9cfa11 upstream.
    
    Trying to write console output from within the serial console driver
    while the port->lock is held causes recursive deadlock:
    
      CPU 0
    spin_lock_irqsave(&port->lock)
    printk()
      console_unlock()
        call_console_drivers()
          serial8250_console_write()
            spin_lock_irqsave(&port->lock)
    ** DEADLOCK **
    
    The 8250_dw i/o accessors try to write a console error message if the
    LCR workaround was unsuccessful. When the port->lock is already held
    (eg., when called from serial8250_set_termios()), this deadlocks.
    
    Make the error message a FIXME until a general solution is devised.
    
    Cc: Tim Kryger <tim.kryger@gmail.com>
    Reported-by: default avatarZhang Zhen <zhenzhang.zhang@huawei.com>
    Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    e3f5ff37