summaryrefslogtreecommitdiffstats
path: root/drivers/tty/serial/pch_uart.c
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2013-12-04 20:52:49 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-12-08 17:16:05 -0800
commite41c0981213f39ecd421d8c1f7334cf04c2122e3 (patch)
treec29c189f59e04cd6ca0d2c5a9df8c5554c1287ec /drivers/tty/serial/pch_uart.c
parent0da3336f19f2a42e9153efa4112d50fd148a8e61 (diff)
downloadlinux-e41c0981213f39ecd421d8c1f7334cf04c2122e3.tar.gz
linux-e41c0981213f39ecd421d8c1f7334cf04c2122e3.tar.bz2
linux-e41c0981213f39ecd421d8c1f7334cf04c2122e3.zip
tty: serial: pch: don't crash if DMA enabled but not loaded
if the DMA driver isn't loaded "on time" then we crash in the irq handler: | pch_uart 0000:02:0a.4: pch_request_dma:dma_request_channel FAILS(Tx) | BUG: unable to handle kernel NULL pointer dereference at (null) | IP: [<c0676ed9>] pch_uart_interrupt+0x739/0x940 Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty/serial/pch_uart.c')
-rw-r--r--drivers/tty/serial/pch_uart.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
index 0aa2b528ef3d..6bb7e90c8f22 100644
--- a/drivers/tty/serial/pch_uart.c
+++ b/drivers/tty/serial/pch_uart.c
@@ -1508,10 +1508,14 @@ static int pch_uart_verify_port(struct uart_port *port,
__func__);
return -EOPNOTSUPP;
#endif
- dev_info(priv->port.dev, "PCH UART : Use DMA Mode\n");
- if (!priv->use_dma)
+ if (!priv->use_dma) {
pch_request_dma(port);
- priv->use_dma = 1;
+ if (priv->chan_rx)
+ priv->use_dma = 1;
+ }
+ dev_info(priv->port.dev, "PCH UART: %s\n",
+ priv->use_dma ?
+ "Use DMA Mode" : "No DMA");
}
return 0;