tty: serial: fsl_lpuart: Check the return value of dmaengine_tx_status
authorSherry Sun <sherry.sun@nxp.com>
Mon, 22 May 2023 02:51:11 +0000 (10:51 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 30 May 2023 10:50:24 +0000 (11:50 +0100)
Coverity reports the Unchecked return value (CHECKED_RETURN) warning:
Calling dmaengine_tx_status without checking return value.

So here add the return value check for dmaengine_tx_status() function to
make coverity happy.

Fixes: cf9aa72d2f91 ("tty: serial: fsl_lpuart: optimize the timer based EOP logic")
Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
Link: https://lore.kernel.org/r/20230522025111.3747-1-sherry.sun@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/fsl_lpuart.c

index 0e56fa6..0718c9f 100644 (file)
@@ -1286,13 +1286,19 @@ static void lpuart_dma_rx_complete(void *arg)
 static void lpuart_timer_func(struct timer_list *t)
 {
        struct lpuart_port *sport = from_timer(sport, t, lpuart_timer);
+       enum dma_status dmastat;
        struct dma_chan *chan = sport->dma_rx_chan;
        struct circ_buf *ring = &sport->rx_ring;
        struct dma_tx_state state;
        unsigned long flags;
        int count;
 
-       dmaengine_tx_status(chan, sport->dma_rx_cookie, &state);
+       dmastat = dmaengine_tx_status(chan, sport->dma_rx_cookie, &state);
+       if (dmastat == DMA_ERROR) {
+               dev_err(sport->port.dev, "Rx DMA transfer failed!\n");
+               return;
+       }
+
        ring->head = sport->rx_sgl.length - state.residue;
        count = CIRC_CNT(ring->head, ring->tail, sport->rx_sgl.length);