serial: fsl_lpuart: update RX timer on successful DMA transfer
authorStefan Agner <stefan@agner.ch>
Sat, 10 Jan 2015 08:33:46 +0000 (09:33 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 2 Feb 2015 18:09:55 +0000 (10:09 -0800)
To end a DMA transfer which did not consume a whole buffer (e.g. one
character only), a RX timer is used. When lots of data are received
the DMA transfer will complete and setup another DMA transfer, which
in turn might complete again. In this cases, it is not necessary to
abort the DMA transfers using the RX timer. This change pushes the
RX timer timeout into the future each time a DMA transfer completed.

Aborting the DMA was not very harmful, since the next received
character lead to setup of another RX DMA.

Signed-off-by: Stefan Agner <stefan@agner.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/fsl_lpuart.c

index 0ea0af76cb9aa5f4319cca3a9d717e744ffcb087..914f9a2a01576612684f2fd6eaeaa7f3ecda0070 100644 (file)
@@ -462,6 +462,7 @@ static void lpuart_dma_rx_complete(void *arg)
        unsigned long flags;
 
        async_tx_ack(sport->dma_rx_desc);
+       mod_timer(&sport->lpuart_timer, jiffies + sport->dma_rx_timeout);
 
        spin_lock_irqsave(&sport->port.lock, flags);