serial: bfin_5xx: need to disable DMA TX interrupt too
authorGraf Yang <graf.yang@analog.com>
Tue, 19 Jan 2010 11:13:11 +0000 (06:13 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 2 Mar 2010 22:43:17 +0000 (14:43 -0800)
If we don't disable the DMA TX channel, an inopportune timeout will
trigger the interrupt handler and may cause a dead lock with the spin_lock.

Signed-off-by: Graf Yang <graf.yang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/serial/bfin_5xx.c

index 15843cc..b5a9b37 100644 (file)
@@ -488,6 +488,7 @@ void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart)
 {
        int x_pos, pos;
 
+       dma_disable_irq(uart->tx_dma_channel);
        dma_disable_irq(uart->rx_dma_channel);
        spin_lock_bh(&uart->port.lock);
 
@@ -521,6 +522,7 @@ void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart)
        }
 
        spin_unlock_bh(&uart->port.lock);
+       dma_enable_irq(uart->tx_dma_channel);
        dma_enable_irq(uart->rx_dma_channel);
 
        mod_timer(&(uart->rx_dma_timer), jiffies + DMA_RX_FLUSH_JIFFIES);