linux/drivers/tty/serial
Sumit Garg 5946d1f5b3 kdb: Switch to use safer dbg_io_ops over console APIs
In kgdb context, calling console handlers aren't safe due to locks used
in those handlers which could in turn lead to a deadlock. Although, using
oops_in_progress increases the chance to bypass locks in most console
handlers but it might not be sufficient enough in case a console uses
more locks (VT/TTY is good example).

Currently when a driver provides both polling I/O and a console then kdb
will output using the console. We can increase robustness by using the
currently active polling I/O driver (which should be lockless) instead
of the corresponding console. For several common cases (e.g. an
embedded system with a single serial port that is used both for console
output and debugger I/O) this will result in no console handler being
used.

In order to achieve this we need to reverse the order of preference to
use dbg_io_ops (uses polling I/O mode) over console APIs. So we just
store "struct console" that represents debugger I/O in dbg_io_ops and
while emitting kdb messages, skip console that matches dbg_io_ops
console in order to avoid duplicate messages. After this change,
"is_console" param becomes redundant and hence removed.

Suggested-by: Daniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
Link: https://lore.kernel.org/r/1591264879-25920-5-git-send-email-sumit.garg@linaro.org
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
2020-06-26 15:40:16 +01:00
..
8250 treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
cpm_uart tty: serial: Use the correct style for SPDX License Identifier 2020-03-07 09:52:01 +01:00
jsm tty: serial: Use the correct style for SPDX License Identifier 2020-03-07 09:52:01 +01:00
21285.c tty: serial: 21285: stop using the unused[] variable from struct uart_port 2019-12-19 20:10:28 +01:00
altera_jtaguart.c
altera_uart.c
amba-pl010.c tty/serial: Migrate amba-pl01* to use has_sysrq 2019-12-18 15:04:44 +01:00
amba-pl011.c TTY/Serial driver updates for 5.8-rc1 2020-06-07 09:52:36 -07:00
amba-pl011.h
apbuart.c tty/serial: Migrate apbuart to use has_sysrq 2019-12-18 15:04:44 +01:00
apbuart.h
ar933x_uart.c serial: Allow uart_get_rs485_mode() to return errno 2020-05-15 14:47:05 +02:00
arc_uart.c tty/serial: Migrate arc_uart to use has_sysrq 2019-12-18 15:04:45 +01:00
atmel_serial.c serial: Allow uart_get_rs485_mode() to return errno 2020-05-15 14:47:05 +02:00
atmel_serial.h tty: serial: Use the correct style for SPDX License Identifier 2020-03-07 09:52:01 +01:00
bcm63xx_uart.c Revert "tty: serial: bcm63xx: fix missing clk_put() in bcm63xx_uart" 2020-05-04 11:49:57 +02:00
clps711x.c tty/serial: Migrate clps711x to use has_sysrq 2019-12-18 15:04:46 +01:00
digicolor-usart.c tty/serial: digicolor: Fix digicolor-usart already registered warning 2019-06-10 19:08:31 +02:00
dz.c TTY/Serial driver updates for 5.6-rc1 2020-01-29 10:13:27 -08:00
dz.h
earlycon-arm-semihost.c
earlycon-riscv-sbi.c
earlycon.c serial: earlycon: prefer EARLYCON_DECLARE() variant 2020-03-07 09:52:01 +01:00
efm32-uart.c tty: serial: efm32: fix spelling mistake "reserverd" -> "reserved" 2020-02-19 11:38:58 +01:00
fsl_linflexuart.c tty/serial: Migrate fsl_linflexuart to use has_sysrq 2019-12-18 15:04:48 +01:00
fsl_lpuart.c tty: serial: fsl_lpuart: Use __maybe_unused instead of #if CONFIG_PM_SLEEP 2020-05-15 15:46:29 +02:00
icom.c tty: serial: Remove call to memset after pci_alloc_consistent 2019-09-04 12:43:44 +02:00
icom.h tty: serial: Use the correct style for SPDX License Identifier 2020-03-07 09:52:01 +01:00
ifx6x60.c tty: serial: ifx6x60: Convert to GPIO descriptors 2020-03-12 10:03:54 +01:00
ifx6x60.h tty: serial: ifx6x60: Convert to GPIO descriptors 2020-03-12 10:03:54 +01:00
imx.c tty: serial: imx: clear Ageing Timer Interrupt in handler 2020-05-29 13:00:54 +02:00
ip22zilog.c tty/serial: Migrate ip22zilog to use has_sysrq 2019-12-18 15:04:50 +01:00
ip22zilog.h
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
kgdb_nmi.c kdb: Switch to use safer dbg_io_ops over console APIs 2020-06-26 15:40:16 +01:00
kgdboc.c kdb: Switch to use safer dbg_io_ops over console APIs 2020-06-26 15:40:16 +01:00
lantiq.c serial: lantiq: Make driver modular 2020-05-15 12:22:19 +02:00
lpc32xx_hs.c serial: lpc32xx_hs: Drop surplus include 2020-04-16 16:12:33 +02:00
Makefile {tty: serial, nand: onenand}: samsung: rename to fix build warning 2019-11-18 18:49:11 +01:00
max310x.c serial: max310x: turn off transmitter before activating AutoCTS or auto transmitter flow control 2019-09-05 09:57:44 +02:00
max3100.c
mcf.c
men_z135_uart.c drivers: mcb: use symbol namespaces 2019-11-03 19:54:53 +01:00
meson_uart.c TTY/Serial driver updates for 5.6-rc1 2020-01-29 10:13:27 -08:00
milbeaut_usio.c tty/serial: Migrate milbeaut_usio to use has_sysrq 2019-12-18 15:04:51 +01:00
mpc52xx_uart.c tty/serial: mpc52xx_uart: Don't zero port->sysrq 2019-12-18 15:04:52 +01:00
mps2-uart.c
msm_serial.c tty: serial: msm_serial: RX SW/FIFO mode fallback 2020-01-14 14:07:51 +01:00
mux.c TTY/Serial driver updates for 5.6-rc1 2020-01-29 10:13:27 -08:00
mvebu-uart.c tty:serial:mvebu-uart:fix a wrong return 2020-03-05 21:26:34 +01:00
mxs-auart.c tty/serial: Migrate mxs-auart to use has_sysrq 2019-12-18 15:04:53 +01:00
omap-serial.c serial: Allow uart_get_rs485_mode() to return errno 2020-05-15 14:47:05 +02:00
owl-uart.c tty: serial: owl: add "much needed" clk_prepare_enable() 2020-04-23 15:46:30 +02:00
pch_uart.c tty: serial: pch_uart: Use scnprintf() for avoiding potential buffer overflow 2020-03-18 12:59:29 +01:00
pic32_uart.c serial: pic32_uart: Use uart_console() helper 2020-03-12 10:00:22 +01:00
pic32_uart.h tty: serial: Use the correct style for SPDX License Identifier 2020-03-07 09:52:01 +01:00
pmac_zilog.c tty/serial: Migrate pmac_zilog to use has_sysrq 2019-12-18 15:04:56 +01:00
pmac_zilog.h
pnx8xxx_uart.c tty/serial: Migrate pnx8xxx_uart to use has_sysrq 2019-12-18 15:04:57 +01:00
pxa.c tty/serial: Migrate pxa to use has_sysrq 2019-12-18 15:04:57 +01:00
qcom_geni_serial.c TTY/Serial driver updates for 5.8-rc1 2020-06-07 09:52:36 -07:00
rda-uart.c remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
rp2.c
sa1100.c tty/serial: Migrate sa1100 to use has_sysrq 2019-12-18 15:04:59 +01:00
samsung_tty.c tty: serial: samsung: Correct clock selection logic 2020-05-15 12:24:15 +02:00
sb1250-duart.c TTY/Serial driver updates for 5.6-rc1 2020-01-29 10:13:27 -08:00
sc16is7xx.c sc16is7xx: Add flag to activate IrDA mode 2020-05-29 12:42:56 +02:00
sccnxp.c tty/serial: Migrate sccnxp to use has_sysrq 2019-12-18 15:05:00 +01:00
serial_core.c serial: 8250: Support rs485 bus termination GPIO 2020-05-29 12:42:54 +02:00
serial_mctrl_gpio.c serial: mctrl_gpio: Check for NULL pointer 2019-10-07 13:21:54 +02:00
serial_mctrl_gpio.h tty: serial: Use the correct style for SPDX License Identifier 2020-03-07 09:52:01 +01:00
serial_txx9.c tty/serial: Migrate serial_txx9 to use has_sysrq 2019-12-18 15:05:01 +01:00
serial-tegra.c tty: serial: tegra: Handle RX transfer in PIO mode if DMA wasn't started 2020-02-10 12:32:13 -08:00
sh-sci.c serial: sh-sci: Make sure status register SCxSR is read in correct sequence 2020-04-16 16:16:52 +02:00
sh-sci.h serial: sh-sci: Drop unused include 2020-04-16 16:13:34 +02:00
sifive.c tty: serial: add missing spin_lock_init for SiFive serial console 2020-05-15 14:55:10 +02:00
sirfsoc_uart.c
sirfsoc_uart.h tty: serial: Use the correct style for SPDX License Identifier 2020-03-07 09:52:01 +01:00
sprd_serial.c serial: sprd: remove redundant sprd_port cleanup 2020-03-18 12:20:04 +01:00
st-asc.c tty: st-asc: switch to using devm_gpiod_get() 2020-01-10 14:01:33 +01:00
stm32-usart.c serial: stm32: add no_console_suspend support 2020-05-19 15:53:36 +02:00
stm32-usart.h tty: serial: Add modem control gpio support for STM32 UART 2020-05-15 12:24:15 +02:00
suncore.c
sunhv.c serial: sunhv: Initialize lock for non-registered console 2020-04-16 16:16:52 +02:00
sunsab.c tty/serial: Migrate sunsab to use has_sysrq 2019-12-18 15:05:05 +01:00
sunsab.h
sunsu.c tty/serial: Migrate sunsu to use has_sysrq 2019-12-18 15:05:06 +01:00
sunzilog.c tty/serial: Migrate sunzilog to use has_sysrq 2019-12-18 15:05:08 +01:00
sunzilog.h
tegra-tcu.c
timbuart.c
timbuart.h tty: serial: Use the correct style for SPDX License Identifier 2020-03-07 09:52:01 +01:00
uartlite.c Revert "serial-uartlite: Move the uart register" 2019-11-14 06:29:08 +08:00
ucc_uart.c ARM: SoC-related driver updates 2020-02-08 14:04:19 -08:00
vr41xx_siu.c tty/serial: Migrate vr41xx_siu to use has_sysrq 2019-12-18 15:05:09 +01:00
vt8500_serial.c tty/serial: Migrate vt8500_serial to use has_sysrq 2019-12-18 15:05:09 +01:00
xilinx_uartps.c Merge 5.7-rc5 into tty-next 2020-05-11 08:55:10 +02:00
zs.c TTY/Serial driver updates for 5.6-rc1 2020-01-29 10:13:27 -08:00
zs.h