From 20ec397d694b05d3e7150e3ba15047c53e7e6b94 Mon Sep 17 00:00:00 2001 From: Sherry Sun Date: Mon, 22 May 2023 10:51:11 +0800 Subject: [PATCH] tty: serial: fsl_lpuart: Check the return value of dmaengine_tx_status 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 Link: https://lore.kernel.org/r/20230522025111.3747-1-sherry.sun@nxp.com Signed-off-by: Greg Kroah-Hartman --- drivers/tty/serial/fsl_lpuart.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index 0e56fa64b4ce9..0718c9f48d21a 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -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); -- 2.30.2