linux/drivers/tty/serial/8250
Tomas Melin b86f86e8e7 serial: 8250: fix potential deadlock in rs485-mode
Canceling hrtimer when holding uart spinlock can deadlock.

CPU0: syscall write
          -> get uart port spinlock
              -> write uart
                  -> start_tx_rs485
                      -> hrtimer_cancel
                          -> wait for hrtimer callback to finish

CPU1: hrtimer IRQ
          -> run hrtimer
              -> em485_handle_stop_tx
                  -> get uart port spinlock

CPU0 is waiting for the hrtimer callback to finish, but the hrtimer
callback running on CPU1 is waiting to get the uart port spinlock.

This deadlock can be avoided by not canceling the hrtimers in these paths.
Setting active_timer=NULL can be done without accessing hrtimer,
and that will effectively cancel operations that would otherwise have been
performed by the hrtimer callback.

Signed-off-by: Tomas Melin <tomas.melin@vaisala.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-11-04 12:38:04 +01:00
..
8250_accent.c tty: serial: 8250: Add generic port init macro 2016-02-06 23:15:53 -08:00
8250_acorn.c tty: serial: 8250: Fix whitespace errors 2016-02-06 23:15:53 -08:00
8250_aspeed_vuart.c drivers/serial: Do not leave sysfs group in case of error in aspeed_vuart_probe() 2017-07-30 07:37:25 -07:00
8250_bcm2835aux.c serial: 8250: Add CAP_MINI, set for bcm2835aux 2017-05-24 15:15:56 +02:00
8250_boca.c tty: serial: 8250: Add generic port init macro 2016-02-06 23:15:53 -08:00
8250_core.c serial: 8250: Convert timers to use timer_setup() 2017-11-04 12:01:53 +01:00
8250_dma.c serial: 8250_dma: power off device after TX is done 2016-11-16 10:57:26 +01:00
8250_dw.c serial: 8250_dw: Improve clock rate setting 2017-10-04 10:17:27 +02:00
8250_early.c serial: 8250_early: Remove __init marking from early write 2017-07-30 07:38:50 -07:00
8250_em.c serial: 8250: remove the redundant include 2015-03-26 22:21:08 +01:00
8250_exar_st16c554.c tty: serial: 8250: Add generic port init macro 2016-02-06 23:15:53 -08:00
8250_exar.c Merge 4.13-rc5 into tty-next 2017-08-14 14:46:59 -07:00
8250_fintek.c serial: 8250_fintek: Fix rs485 disablement on invalid ioctl() 2017-11-04 12:08:53 +01:00
8250_fourport.c tty: serial: 8250: Add generic port init macro 2016-02-06 23:15:53 -08:00
8250_fsl.c serial: export fsl8250_handle_irq 2015-11-20 16:19:54 -08:00
8250_gsc.c tty: 8250: constify parisc_device_id 2017-08-28 20:51:20 +02:00
8250_hp300.c serial: hp300: mask the warning for people just doing build coverage 2017-01-25 11:08:30 +01:00
8250_hub6.c tty: serial: 8250: Fix whitespace errors 2016-02-06 23:15:53 -08:00
8250_ingenic.c serial: 8250_ingenic: Remove __init marking from early write 2017-07-30 07:38:50 -07:00
8250_lpc18xx.c serial: 8250: add LPC18xx/43xx UART driver 2015-06-01 06:56:33 +09:00
8250_lpss.c serial: 8250_lpss: Unconditionally set PCI master for Quark 2017-03-31 15:36:54 +02:00
8250_men_mcb.c Introduce 8250_men_mcb 2017-08-28 20:51:22 +02:00
8250_mid.c serial: 8250_mid: Enable HSU on Intel Cedar Fork PCH 2017-10-04 10:17:27 +02:00
8250_moxa.c serial: 8250: moxa: Store num_ports in brd 2017-01-12 11:51:25 +01:00
8250_mtk.c serial: Add define for max baud rate divisor 2017-10-04 10:17:27 +02:00
8250_of.c serial: 8250: of: Add new port type for MediaTek BTIF controller on MT7622/23 SoC 2017-08-28 20:51:22 +02:00
8250_omap.c serial: Add define for max baud rate divisor 2017-10-04 10:17:27 +02:00
8250_pci.c serial: 8250_mid: Enable HSU on Intel Cedar Fork PCH 2017-10-04 10:17:27 +02:00
8250_pnp.c tty: serial: 8250: Fix indentation warnings 2016-02-06 23:15:53 -08:00
8250_port.c serial: 8250: fix potential deadlock in rs485-mode 2017-11-04 12:38:04 +01:00
8250_pxa.c serial: pxa2xx: mark PM functions as __maybe_unused 2016-11-10 14:50:46 +01:00
8250_uniphier.c serial: 8250_uniphier: add suspend/resume support 2017-08-28 20:51:22 +02:00
8250.h serial: 8250: Add CAP_MINI, set for bcm2835aux 2017-05-24 15:15:56 +02:00
Kconfig Introduce 8250_men_mcb 2017-08-28 20:51:22 +02:00
Makefile Introduce 8250_men_mcb 2017-08-28 20:51:22 +02:00
serial_cs.c tty: serial: 8250: Fix multi-line strings 2016-02-06 23:15:53 -08:00