aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty
diff options
context:
space:
mode:
authorTomoya MORINAGA <tomoya.rohm@gmail.com>2012-04-12 10:47:50 +0900
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-04-27 09:51:07 -0700
commitddb289316dd9c6cf7498f4255e98e3bb7d7aee13 (patch)
treeaa786c3c88c4efc836a21a1eeb9b24772b9e0ead /drivers/tty
parent387df9fcfed566401f2953887ccd3ce9314f4eb9 (diff)
downloadkernel_samsung_smdk4412-ddb289316dd9c6cf7498f4255e98e3bb7d7aee13.zip
kernel_samsung_smdk4412-ddb289316dd9c6cf7498f4255e98e3bb7d7aee13.tar.gz
kernel_samsung_smdk4412-ddb289316dd9c6cf7498f4255e98e3bb7d7aee13.tar.bz2
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>
Diffstat (limited to 'drivers/tty')
-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 579ed6b..101eda9 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,
__func__);
return -EOPNOTSUPP;
#endif
- priv->use_dma = 1;
priv->use_dma_flag = 1;
dev_info(priv->port.dev, "PCH UART : Use DMA Mode\n");
+ if (!priv->use_dma)
+ pch_request_dma(port);
+ priv->use_dma = 1;
}
return 0;