linux/drivers/tty
Johan Hovold e359b4411c serial: stm32: fix threaded interrupt handling
When DMA is enabled the receive handler runs in a threaded handler, but
the primary handler up until very recently neither disabled interrupts
in the device or used IRQF_ONESHOT. This would lead to a deadlock if an
interrupt comes in while the threaded receive handler is running under
the port lock.

Commit ad76768124 ("serial: stm32: fix a deadlock condition with
wakeup event") claimed to fix an unrelated deadlock, but unfortunately
also disabled interrupts in the threaded handler. While this prevents
the deadlock mentioned in the previous paragraph it also defeats the
purpose of using a threaded handler in the first place.

Fix this by making the interrupt one-shot and not disabling interrupts
in the threaded handler.

Note that (receive) DMA must not be used for a console port as the
threaded handler could be interrupted while holding the port lock,
something which could lead to a deadlock in case an interrupt handler
ends up calling printk.

Fixes: ad76768124 ("serial: stm32: fix a deadlock condition with wakeup event")
Fixes: 3489187204 ("serial: stm32: adding dma support")
Cc: stable@vger.kernel.org      # 4.9
Cc: Alexandre TORGUE <alexandre.torgue@st.com>
Cc: Gerald Baeza <gerald.baeza@st.com>
Reviewed-by: Valentin Caron<valentin.caron@foss.st.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://lore.kernel.org/r/20210416140557.25177-3-johan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-04-22 12:04:26 +02:00
..
hvc tty: hvc: make symbol 'hvc_udbg_dev' static 2021-04-10 10:41:40 +02:00
ipwireless tty: make everyone's write_room return >= 0 2021-03-10 09:34:09 +01:00
serdev tty: serdev: core: Provide missing description for 'owner' 2020-11-06 10:49:27 +01:00
serial serial: stm32: fix threaded interrupt handling 2021-04-22 12:04:26 +02:00
vt tty: fix memory leak in vc_deallocate 2021-03-28 14:16:47 +02:00
amiserial.c tty: amiserial: add missing TIOCSSERIAL jiffies conversions 2021-04-07 17:22:07 +02:00
ehv_bytechan.c
goldfish.c tty: goldfish: use __raw_writel()/__raw_readl() 2020-10-28 13:44:43 +01:00
Kconfig tty: pti: Remove Kconfig leftovers 2021-04-09 17:00:32 +02:00
Makefile tty: rocket, remove the driver 2021-03-10 09:34:06 +01:00
mips_ejtag_fdc.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
moxa.c tty: moxa: fix TIOCSSERIAL implementation 2021-04-07 17:22:07 +02:00
moxa.h tty: fix spelling mistake 2020-06-27 16:21:20 +02:00
mxser.c tty: mxser: fix TIOCSSERIAL permission check 2021-04-07 17:22:07 +02:00
mxser.h
n_gsm.c tty: clean include/linux/tty.h up 2021-04-15 10:32:17 +02:00
n_hdlc.c tty: clean include/linux/tty.h up 2021-04-15 10:32:17 +02:00
n_null.c tty: remove TTY_LDISC_MAGIC 2021-03-10 09:34:06 +01:00
n_r3964.c tty: remove TTY_LDISC_MAGIC 2021-03-10 09:34:06 +01:00
n_tty.c tty: create internal tty.h file 2021-04-15 10:22:17 +02:00
nozomi.c tty: nozomi, remove useless debug prints 2021-03-10 09:34:08 +01:00
pty.c tty: create internal tty.h file 2021-04-15 10:22:17 +02:00
synclink_gt.c tty: synclink_gt: remove redundant initialization of variable count 2021-04-22 12:01:59 +02:00
sysrq.c tty/sysrq: Fix issues of code indent should use tabs 2021-04-10 10:33:00 +02:00
tty_audit.c tty: audit: move some local functions out of tty.h 2021-04-15 10:24:58 +02:00
tty_baudrate.c tty: clean include/linux/tty.h up 2021-04-15 10:32:17 +02:00
tty_buffer.c tty: move some internal tty lock enums and functions out of tty.h 2021-04-15 10:26:58 +02:00
tty_io.c tty: make tty_release_redirect() static 2021-04-15 10:28:30 +02:00
tty_ioctl.c tty: move some tty-only functions to drivers/tty/tty.h 2021-04-15 10:30:18 +02:00
tty_jobctrl.c tty: create internal tty.h file 2021-04-15 10:22:17 +02:00
tty_ldisc.c tty: create internal tty.h file 2021-04-15 10:22:17 +02:00
tty_ldsem.c
tty_mutex.c tty: move some internal tty lock enums and functions out of tty.h 2021-04-15 10:26:58 +02:00
tty_port.c tty: create internal tty.h file 2021-04-15 10:22:17 +02:00
tty.h tty: clean include/linux/tty.h up 2021-04-15 10:32:17 +02:00
ttynull.c Revert "init/console: Use ttynull as a fallback when there is no console" 2021-01-08 11:02:18 -08:00
vcc.c tty: make everyone's write_room return >= 0 2021-03-10 09:34:09 +01:00