linux/drivers/tty/serial
Marek Roszko 8bc661bfc0 tty/serial: at91: disable uart timer at start of shutdown
The uart timer will schedule a tasklet when it fires. It is possible that it
can fire inside _shutdown before it is killed in the dma and pdc cleanup
routines. This causes a tasklet that exists after the port is shutdown, so when
the kernel finally executes it, it panics as the tty port is NULL.

This is a somewhat rare condition but its possible if a program keeps on
opening/closing the port. It has been observed in particular with systemd
boot messages that were causing a kernel panic because of this behavior.

Moving the timer deletion to the beginning of the function stops a tasklet from
being scheduled unexpectedly.

Signed-off-by: Marek Roszko <mark.roszko@gmail.com>
Cc: stable <stable@vger.kernel.org> # v3.12
[nicolas.ferre@atmel.com: modify commit message, call setup_timer() in any case]
Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-01-13 15:55:59 -08:00
..
8250 serial: 8250: enable UART_BUG_NOMSR for Tegra 2014-01-07 17:14:24 -08:00
cpm_uart tty: delete non-required instances of include <linux/init.h> 2014-01-07 17:05:21 -08:00
jsm
21285.c
68328serial.c
altera_jtaguart.c ARM: SoC DT updates for 3.12 2013-09-06 13:26:27 -07:00
altera_uart.c ARM: SoC DT updates for 3.12 2013-09-06 13:26:27 -07:00
amba-pl010.c serial: pl010: Convert to modern PM ops 2013-12-08 17:09:07 -08:00
amba-pl011.c serial: pl011: fix fall back from DMA to interrupt mode 2013-12-17 09:36:23 -08:00
apbuart.c tty: serial: apbuart: drop uart_port->lock before calling tty_flip_buffer_push() 2013-08-27 16:17:33 -07:00
apbuart.h
ar933x_uart.c tty: ar933x_uart: add device tree support and binding documentation 2013-08-30 14:11:27 -07:00
arc_uart.c serial: arc_uart: Remove casting the return value which is a void pointer 2013-09-26 14:29:58 -07:00
atmel_serial.c tty/serial: at91: disable uart timer at start of shutdown 2014-01-13 15:55:59 -08:00
bcm63xx_uart.c tty: serial: bcm63xx: drop uart_port->lock before calling tty_flip_buffer_push() 2013-08-27 16:17:34 -07:00
bfin_sport_uart.c serial: bfin_sport_uart: Remove casting the return value which is a void pointer 2013-09-26 14:29:58 -07:00
bfin_sport_uart.h
bfin_uart.c tty: Remove unnecessary semicolons 2013-10-16 13:08:16 -07:00
clps711x.c serial: clps711x: Enable driver compilation with COMPILE_TEST 2014-01-07 17:06:18 -08:00
crisv10.c
crisv10.h
dz.c
dz.h
efm32-uart.c tty: serial: efm32: drop uart_port->lock before calling tty_flip_buffer_push() 2013-08-27 16:17:34 -07:00
fsl_lpuart.c serial: fsl_lpuart: Return proper error on lpuart_serial_init error path 2013-07-26 16:01:20 -07:00
icom.c serial: icom: move array overflow checks earlier 2013-08-27 16:24:33 -07:00
icom.h
ifx6x60.c serial: ifx6x60: Remove casting the return value which is a void pointer 2013-09-26 14:29:58 -07:00
ifx6x60.h
imx.c serial: imx: add support for loopback mode. 2013-12-08 17:09:07 -08:00
ioc3_serial.c
ioc4_serial.c serial: ioc4_serial: Staticize ioc4_serial_attach_one() 2013-08-12 11:35:32 -07:00
ip22zilog.c tty: Remove unnecessary semicolons 2013-10-16 13:08:16 -07:00
ip22zilog.h
Kconfig serial: clps711x: Enable driver compilation with COMPILE_TEST 2014-01-07 17:06:18 -08:00
kgdb_nmi.c tty: delete non-required instances of include <linux/init.h> 2014-01-07 17:05:21 -08:00
kgdboc.c treewide: Convert retrun typos to return 2013-09-04 12:26:36 +02:00
lantiq.c serial: MIPS: lantiq: fix clock error check 2013-08-12 11:37:48 -07:00
lpc32xx_hs.c tty: serial: lpc32xx_hs: drop uart_port->lock before calling tty_flip_buffer_push() 2013-08-27 16:17:34 -07:00
m32r_sio_reg.h
m32r_sio.c tty: serial: m32r_sio: drop uart_port->lock before calling tty_flip_buffer_push() 2013-08-27 16:17:34 -07:00
m32r_sio.h
Makefile serial: Remove old SC26XX driver 2013-12-19 12:34:30 -08:00
max310x.c tty: Remove unnecessary semicolons 2013-10-16 13:08:16 -07:00
max3100.c serial: use dev_get_platdata() 2013-07-31 17:56:15 -07:00
mcf.c tty: serial: mcf: drop uart_port->lock before calling tty_flip_buffer_push() 2013-08-27 16:17:34 -07:00
mfd.c serial: mfd: Staticize local symbols 2013-10-29 16:34:11 -07:00
mpc52xx_uart.c serial: mpc52xx: remove reference to .set_wake() 2013-10-16 13:16:19 -07:00
mpsc.c serial: mpsc: Remove casting the return value which is a void pointer 2013-09-26 14:29:58 -07:00
mrst_max3110.c mrst_max3110: fix unbalanced IRQ issue during resume 2013-10-29 16:26:54 -07:00
mrst_max3110.h
msm_serial_hs.c serial: use dev_get_platdata() 2013-07-31 17:56:15 -07:00
msm_serial.c msm_serial: Send more than 1 character on the console w/ UARTDM 2013-08-27 16:22:59 -07:00
msm_serial.h msm_serial: Make baud_code detection more dynamic 2013-07-26 16:13:29 -07:00
msm_smd_tty.c
mux.c
mxs-auart.c tty: serial: mxs-auart: Check the return value from clk_prepare_enable() 2013-12-08 17:14:58 -08:00
netx-serial.c tty: serial: netx: drop uart_port->lock before calling tty_flip_buffer_push() 2013-08-27 16:17:34 -07:00
nwpserial.c tty: serial: nwpserial: drop uart_port->lock before calling tty_flip_buffer_push() 2013-08-27 16:17:35 -07:00
of_serial.c tty: delete non-required instances of include <linux/init.h> 2014-01-07 17:05:21 -08:00
omap-serial.c serial: omap: fix missing comma 2013-10-31 09:03:20 -07:00
pch_uart.c tty: remove DEFINE_PCI_DEVICE_TABLE macro 2013-12-08 17:09:07 -08:00
pmac_zilog.c TTY: pmac_zilog, check existence of ports in pmz_console_init() 2013-11-25 08:54:25 -08:00
pmac_zilog.h
pnx8xxx_uart.c tty: serial: pnx8xxx: drop uart_port->lock before calling tty_flip_buffer_push() 2013-08-27 16:17:35 -07:00
pxa.c serial: pxa: Staticize local symbols 2013-08-12 11:10:16 -07:00
rp2.c tty: remove DEFINE_PCI_DEVICE_TABLE macro 2013-12-08 17:09:07 -08:00
sa1100.c serial: sa1100: delete .set_wake callback 2013-10-16 13:16:18 -07:00
samsung.c serial: samsung: add support for manual RTS setting 2013-09-26 15:41:38 -07:00
samsung.h serial: samsung: Remove casting the return value which is a void pointer 2013-09-26 14:29:59 -07:00
sb1250-duart.c
sccnxp.c serial: sccnxp: missing uart_unregister_driver() on error in sccnxp_probe() 2013-09-26 15:44:45 -07:00
serial_core.c serial_core: Don't re-initialize a previously initialized spinlock. 2013-12-08 16:44:21 -08:00
serial_ks8695.c
serial_txx9.c serial: txx9: remove unnecessary pci_set_drvdata() 2013-09-26 15:41:38 -07:00
serial-tegra.c serial: tegra: remove deprecated IRQF_DISABLED 2013-10-07 00:13:58 -07:00
sh-sci.c serial: sh: use DMA_COMPLETE for dma completion status 2013-10-25 11:16:19 +05:30
sh-sci.h
sirfsoc_uart.c serial: sirf: correct condition for fetching dma buffer into tty 2014-01-07 17:09:04 -08:00
sirfsoc_uart.h serial: sirf: remove duplicate defines 2013-10-29 16:26:54 -07:00
sn_console.c
st-asc.c serial: st-asc: remove unnecessary platform_set_drvdata() 2013-08-27 16:24:33 -07:00
suncore.c
sunhv.c
sunsab.c tty: Remove unnecessary semicolons 2013-10-16 13:08:16 -07:00
sunsab.h
sunsu.c tty: Remove unnecessary semicolons 2013-10-16 13:08:16 -07:00
sunzilog.c tty: Remove unnecessary semicolons 2013-10-16 13:08:16 -07:00
sunzilog.h
tilegx.c tilegx: Add tty serial support for TILE-Gx on-chip UART 2013-09-03 14:50:40 -04:00
timbuart.c serial: timbuart: Staticize local symbols 2013-08-12 11:35:31 -07:00
timbuart.h
uartlite.c
ucc_uart.c DeviceTree updates for 3.13. This is a bit larger pull request than 2013-11-12 16:52:17 +09:00
vr41xx_siu.c serial: use dev_get_platdata() 2013-07-31 17:56:15 -07:00
vt8500_serial.c serial: vt8500: add missing braces 2013-10-16 13:22:16 -07:00
xilinx_uartps.c tty: xuartps: Properly guard sysrq specific code 2013-12-17 16:02:25 -08:00
zs.c
zs.h