[prev in list] [next in list] [prev in thread] [next in thread]
List: dmaengine
Subject: Re: [PATCH 2/2] serial: sh-sci: Terminate TX DMA during buffer flushing
From: Eugeniu Rosca <erosca () de ! adit-jv ! com>
Date: 2019-06-28 14:04:25
Message-ID: 20190628140425.GB11231 () vmlxhi-102 ! adit-jv ! com
[Download RAW message or body]
On Mon, Jun 24, 2019 at 02:35:40PM +0200, Geert Uytterhoeven wrote:
[..]
> diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> index d4504daff99263f5..d18c680aa64b3427 100644
> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -1656,11 +1656,18 @@ static void sci_free_dma(struct uart_port *port)
>
> static void sci_flush_buffer(struct uart_port *port)
> {
> + struct sci_port *s = to_sci_port(port);
> +
> /*
> * In uart_flush_buffer(), the xmit circular buffer has just been
> - * cleared, so we have to reset tx_dma_len accordingly.
> + * cleared, so we have to reset tx_dma_len accordingly, and stop any
> + * pending transfers
> */
> - to_sci_port(port)->tx_dma_len = 0;
> + s->tx_dma_len = 0;
> + if (s->chan_tx) {
> + dmaengine_terminate_async(s->chan_tx);
> + s->cookie_tx = -EINVAL;
> + }
I am seeing a similar solution being employed by other tty/serial
drivers [1]. One major difference is that those drivers make use of
dmaengine_terminate_all(). Since the latter is deprecated starting
with commit [2], the API choice looks reasonable to me.
Reviewed-by: Eugeniu Rosca <erosca@de.adit-jv.com>
Tested-by: Eugeniu Rosca <erosca@de.adit-jv.com>
[1] git grep -W "static void.*flush_buffer" -- drivers/tty/serial/ | grep dmaengine_terminate
drivers/tty/serial/fsl_lpuart.c- dmaengine_terminate_all(sport->dma_tx_chan);
drivers/tty/serial/imx.c- dmaengine_terminate_all(sport->dma_chan_tx);
drivers/tty/serial/serial-tegra.c- dmaengine_terminate_all(tup->tx_dma_chan);
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b36f09c3c441a6
("dmaengine: Add transfer termination synchronization support")
--
Best Regards,
Eugeniu.
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic