linux/drivers/tty/serial
Peter Hurley 7fd6f640f2 serial: 8250_dw: Fix deadlock in LCR workaround
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: Zhang Zhen <zhenzhang.zhang@huawei.com>
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-11 16:39:52 +01:00
..
8250 serial: 8250_dw: Fix deadlock in LCR workaround 2015-03-11 16:39:52 +01:00
cpm_uart Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
jsm serial: jsm: Fix unnecessary space before function ptr arguments 2014-11-25 17:06:38 -08:00
21285.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
68328serial.c
altera_jtaguart.c serial: altera-juart: fix NULL device in log message 2015-01-09 14:28:17 -08:00
altera_uart.c serial: altera-uart: fix NULL device in log message 2015-01-09 14:28:17 -08:00
amba-pl010.c serial: Test/disable MSIs if switching from N_PPS 2014-11-06 14:57:27 -08:00
amba-pl011.c serial: pl011: Add device tree support for RX DMA polling 2014-11-07 08:35:56 -08:00
apbuart.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
apbuart.h
ar933x_uart.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
arc_uart.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
atmel_serial.c tty: serial: atmel: rework interrupt and wakeup handling 2015-03-06 00:46:44 +01:00
bcm63xx_uart.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
bfin_sport_uart.c tty: pr_warning->pr_warn and logging neatening 2014-11-25 17:06:38 -08:00
bfin_sport_uart.h
bfin_uart.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
clps711x.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
crisv10.c cris: Remove obsolete ASYNC_SPLIT_TERMIOS behavior 2014-11-05 20:18:30 -08:00
crisv10.h cris: Remove obsolete ASYNC_SPLIT_TERMIOS behavior 2014-11-05 20:18:30 -08:00
digicolor-usart.c tty/serial: digicolor: remove sysrq reference 2015-02-02 10:11:25 -08:00
dz.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
dz.h
earlycon-arm-semihost.c tty/serial: add arm/arm64 semihosting earlycon 2014-04-24 16:32:27 -07:00
earlycon.c tty/serial: earlycon: Fix print for implied MMIO case 2014-11-05 19:45:52 -08:00
efm32-uart.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
etraxfs-uart.c serial: driver for ETRAX FS UART 2015-02-07 18:43:16 +08:00
fsl_lpuart.c tty: serial: fsl_lpuart: terminate DMA on buffer flush 2015-02-02 10:09:55 -08:00
icom.c serial: icom: fix error return code 2014-11-25 17:06:39 -08:00
icom.h
ifx6x60.c
ifx6x60.h
imx.c serial: imx: Fix imx_flush_buffer() 2015-02-02 10:11:24 -08:00
ioc3_serial.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
ioc4_serial.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
ip22zilog.c serial: use container_of to resolve uart_ip22zilog_port from uart_port 2014-11-05 19:20:52 -08:00
ip22zilog.h
Kconfig Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2015-02-19 10:36:45 -08:00
kgdb_nmi.c serial: kgdb_nmi: No CON_ENABLED by default 2014-09-08 16:26:07 -07:00
kgdboc.c
lantiq.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
lpc32xx_hs.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
m32r_sio_reg.h
m32r_sio.c serial: use container_of to resolve uart_sio_port from uart_port 2014-11-05 19:20:52 -08:00
m32r_sio.h
Makefile serial: driver for ETRAX FS UART 2015-02-07 18:43:16 +08:00
max310x.c drivers/max310: Use the rs485 functions on serial_core 2014-11-06 15:00:15 -08:00
max3100.c
mcf.c serial: mcf: fix no driver name in probe output 2015-01-09 14:06:57 -08:00
men_z135_uart.c tty: serial: men_z135_uart: Fix driver for changes in hardware 2015-02-02 10:11:27 -08:00
meson_uart.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
mfd.c More ACPI and power management updates for 3.19-rc1 2014-12-18 20:28:33 -08:00
mpc52xx_uart.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
mpsc.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
msm_serial_hs.c More ACPI and power management updates for 3.19-rc1 2014-12-18 20:28:33 -08:00
msm_serial.c tty: serial: msm_serial: Remove console unregistration from driver exit. 2015-02-02 10:11:25 -08:00
msm_serial.h tty: serial: msm: Support sysrq on uartDM devices 2014-11-06 14:57:22 -08:00
msm_smd_tty.c
mux.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
mxs-auart.c serial: mxs-auart: Remove unneeded zeroing of 'ret' 2015-02-02 10:11:25 -08:00
netx-serial.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
nwpserial.c serial: Fix build failure caused by missing header file 2014-09-08 16:17:45 -07:00
of_serial.c Revert "tty/serial: of_serial: add DT alias ID handling" 2015-03-07 03:06:51 +01:00
omap-serial.c serial: omap: Fix RTS handling 2015-02-02 10:11:28 -08:00
pch_uart.c pch_uart: don't hardcode PCI slot to get DMA device 2014-08-01 16:04:21 -07:00
pmac_zilog.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
pmac_zilog.h
pnx8xxx_uart.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
pxa.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
rp2.c
sa1100.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
samsung.c serial: samsung: earlycon support depends on CONFIG_SERIAL_SAMSUNG_CONSOLE 2015-02-02 11:11:00 -08:00
samsung.h serial: samsung: add DMA support for RX 2015-01-09 14:25:39 -08:00
sb1250-duart.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
sc16is7xx.c serial/sc16is7xx: Use the rs485 functions on serial_core 2014-11-06 14:59:21 -08:00
sccnxp.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
serial_core.c serial: core: Rework hw-assisted flow control support 2015-02-02 10:11:28 -08:00
serial_ks8695.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
serial_mctrl_gpio.c serial: mctrl_gpio: use gpiod_set_array function 2014-12-02 14:25:42 +01:00
serial_mctrl_gpio.h tty/serial: Add GPIOLIB helpers for controlling modem lines 2014-05-28 12:49:14 -07:00
serial_txx9.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
serial-tegra.c serial: tegra: clean up tty-flag assignments 2014-11-25 17:06:39 -08:00
sh-sci.c serial: sh-sci: Fix R-Car SCIF and HSCIF overrun handling 2015-02-02 10:11:26 -08:00
sh-sci.h
sirfsoc_uart.c serial: sirf: rename marco to atlas7 2015-01-09 14:17:59 -08:00
sirfsoc_uart.h serial: sirf: rename marco to atlas7 2015-01-09 14:17:59 -08:00
sn_console.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
sprd_serial.c serial: sprd: Fix missing spin_unlock in sprd_handle_irq() 2015-03-07 03:39:55 +01:00
st-asc.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
suncore.c
sunhv.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
sunsab.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
sunsab.h
sunsu.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
sunzilog.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
sunzilog.h
tilegx.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
timbuart.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
timbuart.h
uartlite.c tty: serial: uartlite: Remove .owner field for driver 2014-09-08 16:09:13 -07:00
ucc_uart.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
vr41xx_siu.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
vt8500_serial.c tty: serial: drop owner assignment from platform_drivers 2014-10-20 16:21:45 +02:00
xilinx_uartps.c tty: xuartps: Fix RX hang, and TX corruption in termios call 2015-02-02 10:11:25 -08:00
zs.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
zs.h