summaryrefslogtreecommitdiffstats
path: root/drivers/tty/serial/8250/8250_dma.c
diff options
context:
space:
mode:
authorSebastian Reichel <sre@kernel.org>2014-05-06 15:44:50 +0200
committerSebastian Reichel <sre@kernel.org>2014-05-06 15:44:50 +0200
commit695f5ec02203ef23f127eacb86991d23307f3c6f (patch)
treeecb9c29268fa34559dfa06472d991bc5d92708be /drivers/tty/serial/8250/8250_dma.c
parent5bdeae302496a8ac49848f4fed26b1d87a67d966 (diff)
parent793ec5f7dccf95c0d6d5d57a925a13261a7cbd2b (diff)
downloadlinux-695f5ec02203ef23f127eacb86991d23307f3c6f.tar.bz2
Merge branch 'n900-modem-support' into n900-dt-with-ssin900-dt-with-ssi
Conflicts: arch/arm/boot/dts/omap3-n900.dts
Diffstat (limited to 'drivers/tty/serial/8250/8250_dma.c')
-rw-r--r--drivers/tty/serial/8250/8250_dma.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/tty/serial/8250/8250_dma.c b/drivers/tty/serial/8250/8250_dma.c
index 7046769608d4..ab9096dc3849 100644
--- a/drivers/tty/serial/8250/8250_dma.c
+++ b/drivers/tty/serial/8250/8250_dma.c
@@ -20,12 +20,15 @@ static void __dma_tx_complete(void *param)
struct uart_8250_port *p = param;
struct uart_8250_dma *dma = p->dma;
struct circ_buf *xmit = &p->port.state->xmit;
-
- dma->tx_running = 0;
+ unsigned long flags;
dma_sync_single_for_cpu(dma->txchan->device->dev, dma->tx_addr,
UART_XMIT_SIZE, DMA_TO_DEVICE);
+ spin_lock_irqsave(&p->port.lock, flags);
+
+ dma->tx_running = 0;
+
xmit->tail += dma->tx_size;
xmit->tail &= UART_XMIT_SIZE - 1;
p->port.icount.tx += dma->tx_size;
@@ -35,6 +38,8 @@ static void __dma_tx_complete(void *param)
if (!uart_circ_empty(xmit) && !uart_tx_stopped(&p->port))
serial8250_tx_dma(p);
+
+ spin_unlock_irqrestore(&p->port.lock, flags);
}
static void __dma_rx_complete(void *param)