aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Jackson <Andrew.Jackson@arm.com>2014-11-07 09:14:39 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-11-07 11:35:55 -0500
commite2a545a6aee935e44db08797f7155be38f3c18f9 (patch)
treeac6c5ec14ec191afcd2bbb5fea391c8c4976aee3
parent4c0be45b18a3bd5c215589c4b320648e35024f6e (diff)
serial: pl011: Avoid assumptions about buffer size when refilling TX DMA
The existing code assumed that PL011_DMA_BUFFER_SIZE == UART_XMIT_SIZE, which may not always be the case. This allows for these two being different sizes and not copying too much data. Signed-off-by: Andrew Jackson <Andrew.Jackson@arm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/tty/serial/amba-pl011.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
index 8654049a70c0..6153a42d68db 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -501,7 +501,11 @@ static int pl011_dma_tx_refill(struct uart_amba_port *uap)
501 memcpy(&dmatx->buf[0], &xmit->buf[xmit->tail], count); 501 memcpy(&dmatx->buf[0], &xmit->buf[xmit->tail], count);
502 else { 502 else {
503 size_t first = UART_XMIT_SIZE - xmit->tail; 503 size_t first = UART_XMIT_SIZE - xmit->tail;
504 size_t second = xmit->head; 504 size_t second;
505
506 if (first > count)
507 first = count;
508 second = count - first;
505 509
506 memcpy(&dmatx->buf[0], &xmit->buf[xmit->tail], first); 510 memcpy(&dmatx->buf[0], &xmit->buf[xmit->tail], first);
507 if (second) 511 if (second)