aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomoya MORINAGA <tomoya.rohm@gmail.com>2012-04-11 21:47:50 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-04-27 12:51:07 -0400
commitddb289316dd9c6cf7498f4255e98e3bb7d7aee13 (patch)
treeaa786c3c88c4efc836a21a1eeb9b24772b9e0ead
parent387df9fcfed566401f2953887ccd3ce9314f4eb9 (diff)
pch_uart: Fix dma channel unallocated issue
commit af6d17cdc8c89aeb3101f0d27cd32fc0592b40b2 upstream. This driver anticipates pch_uart_verify_port() is not called during installation. However, actually pch_uart_verify_port() is called during installation. As a result, memory access violation occurs like below. 0. initial value: use_dma=0 1. starup() - dma channel is not allocated because use_dma=0 2. pch_uart_verify_port() - Set use_dma=1 3. UART processing acts DMA mode because use_dma=1 - memory access violation occurs! This patch fixes the issue. Solution: Whenever pch_uart_verify_port() is called and then dma channel is not allocated, the channel should be allocated. Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/tty/serial/pch_uart.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
index 579ed6b5139..101eda9f196 100644
--- a/drivers/tty/serial/pch_uart.c
+++ b/drivers/tty/serial/pch_uart.c
@@ -1354,9 +1354,11 @@ static int pch_uart_verify_port(struct uart_port *port,
1354 __func__); 1354 __func__);
1355 return -EOPNOTSUPP; 1355 return -EOPNOTSUPP;
1356#endif 1356#endif
1357 priv->use_dma = 1;
1358 priv->use_dma_flag = 1; 1357 priv->use_dma_flag = 1;
1359 dev_info(priv->port.dev, "PCH UART : Use DMA Mode\n"); 1358 dev_info(priv->port.dev, "PCH UART : Use DMA Mode\n");
1359 if (!priv->use_dma)
1360 pch_request_dma(port);
1361 priv->use_dma = 1;
1360 } 1362 }
1361 1363
1362 return 0; 1364 return 0;