lkml.org 
[lkml]   [2020]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 186/388] serial: 8250: 8250_omap: Terminate DMA before pushing data on RX timeout
    Date
    From: Vignesh Raghavendra <vigneshr@ti.com>

    [ Upstream commit 7cf4df30a98175033e9849f7f16c46e96ba47f41 ]

    Terminate and flush DMA internal buffers, before pushing RX data to
    higher layer. Otherwise, this will lead to data corruption, as driver
    would end up pushing stale buffer data to higher layer while actual data
    is still stuck inside DMA hardware and has yet not arrived at the
    memory.
    While at that, replace deprecated dmaengine_terminate_all() with
    dmaengine_terminate_async().

    Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
    Link: https://lore.kernel.org/r/20200319110344.21348-2-vigneshr@ti.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/tty/serial/8250/8250_omap.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
    index 2624b5d083366..f2c6d9d3bb28f 100644
    --- a/drivers/tty/serial/8250/8250_omap.c
    +++ b/drivers/tty/serial/8250/8250_omap.c
    @@ -790,7 +790,10 @@ static void __dma_rx_do_complete(struct uart_8250_port *p)
    dmaengine_tx_status(dma->rxchan, dma->rx_cookie, &state);

    count = dma->rx_size - state.residue;
    -
    + if (count < dma->rx_size)
    + dmaengine_terminate_async(dma->rxchan);
    + if (!count)
    + goto unlock;
    ret = tty_insert_flip_string(tty_port, dma->rx_buf, count);

    p->port.icount.rx += ret;
    @@ -852,7 +855,6 @@ static void omap_8250_rx_dma_flush(struct uart_8250_port *p)
    spin_unlock_irqrestore(&priv->rx_dma_lock, flags);

    __dma_rx_do_complete(p);
    - dmaengine_terminate_all(dma->rxchan);
    }

    static int omap_8250_rx_dma(struct uart_8250_port *p)
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-09-29 13:39    [W:4.165 / U:0.852 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site