diff options
author | Tomoya MORINAGA <tomoya.rohm@gmail.com> | 2012-04-12 10:47:50 +0900 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-04-27 09:51:07 -0700 |
commit | ddb289316dd9c6cf7498f4255e98e3bb7d7aee13 (patch) | |
tree | aa786c3c88c4efc836a21a1eeb9b24772b9e0ead /drivers/tty | |
parent | 387df9fcfed566401f2953887ccd3ce9314f4eb9 (diff) | |
download | kernel_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.c | 4 |
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; |