[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1418116296-12082-9-git-send-email-jiada_wang@mentor.com>
Date: Tue, 9 Dec 2014 18:11:29 +0900
From: Jiada Wang <jiada_wang@...tor.com>
To: <gregkh@...uxfoundation.org>, <jslaby@...e.cz>,
<linux-serial@...r.kernel.org>, <linux-kernel@...r.kernel.org>
CC: <jiada_wang@...tor.com>, <anton_bondarenko@...tor.com>,
<dirk.behme@...bosch.com>
Subject: [PATCH v1 08/15] Revert "serial: imx: always wake up the processes in the TX callback"
This reverts commit 2ad28e3efee21a5bbf940c83d1f0395b76bd3efb.
Instead of always wake up write_wait process in TX callback,
TX callback should call imx_dma_tx() again, and let imx_dma_tx
transfer the remaining data in circle buffer.
The issue with commit 2ad28e3 is, in case there is remaining
data in circle buffer, but no process is waiting on write_wait
queue, then as no following uart_write() will be called after
uart_write_wakeup(), thus cause data loss.
Moreover according to Documentation/serial/driver, uart_write_wakeup()
should be called in case the transmit buffer have dropped below
a threshold.
Signed-off-by: Jiada Wang <jiada_wang@...tor.com>
---
drivers/tty/serial/imx.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index 3db6a5b..3d86851 100644
--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -516,7 +516,8 @@ static void dma_tx_callback(void *data)
spin_unlock_irqrestore(&sport->port.lock, flags);
- uart_write_wakeup(&sport->port);
+ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
+ uart_write_wakeup(&sport->port);
if (waitqueue_active(&sport->dma_wait)) {
wake_up(&sport->dma_wait);
--
1.9.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists