diff options
author | Tomoya MORINAGA <tomoya.rohm@gmail.com> | 2012-04-11 21:47:50 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-04-18 18:19:50 -0400 |
commit | af6d17cdc8c89aeb3101f0d27cd32fc0592b40b2 (patch) | |
tree | 588d1835847ccec5009c9ab744ca6a2de554bce7 | |
parent | 7a6fbc9a887193a1e9f8658703881c528040afbc (diff) |
pch_uart: Fix dma channel unallocated issue
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>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-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 bbbec4a74cfb..c2816f494807 100644 --- a/drivers/tty/serial/pch_uart.c +++ b/drivers/tty/serial/pch_uart.c | |||
@@ -1447,9 +1447,11 @@ static int pch_uart_verify_port(struct uart_port *port, | |||
1447 | __func__); | 1447 | __func__); |
1448 | return -EOPNOTSUPP; | 1448 | return -EOPNOTSUPP; |
1449 | #endif | 1449 | #endif |
1450 | priv->use_dma = 1; | ||
1451 | priv->use_dma_flag = 1; | 1450 | priv->use_dma_flag = 1; |
1452 | dev_info(priv->port.dev, "PCH UART : Use DMA Mode\n"); | 1451 | dev_info(priv->port.dev, "PCH UART : Use DMA Mode\n"); |
1452 | if (!priv->use_dma) | ||
1453 | pch_request_dma(port); | ||
1454 | priv->use_dma = 1; | ||
1453 | } | 1455 | } |
1454 | 1456 | ||
1455 | return 0; | 1457 | return 0; |