From 2f31401e715f387050af1b1d09da26a949ad3396 Mon Sep 17 00:00:00 2001 From: Chengwen Feng Date: Fri, 27 May 2022 11:40:52 +0800 Subject: [PATCH] dma/hisilicon: fix index returned when no DMA completed [ upstream commit 2301dee9709fe07f79f92a032bf510a206397cc4 ] If no DMA request is completed, the ring_idx of the last completed operation need returned by last_idx parameter. This patch fixes it. Fixes: 2db4f0b82360 ("dma/hisilicon: add data path") Signed-off-by: Chengwen Feng --- drivers/dma/hisilicon/hisi_dmadev.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/dma/hisilicon/hisi_dmadev.c b/drivers/dma/hisilicon/hisi_dmadev.c index ff80622ec0..ef4c7b18f7 100644 --- a/drivers/dma/hisilicon/hisi_dmadev.c +++ b/drivers/dma/hisilicon/hisi_dmadev.c @@ -649,12 +649,12 @@ hisi_dma_completed(void *dev_private, } sq_head = (sq_head + 1) & hw->sq_depth_mask; } + *last_idx = hw->cridx + i - 1; if (i > 0) { hw->cridx += i; - *last_idx = hw->cridx - 1; hw->sq_head = sq_head; + hw->completed += i; } - hw->completed += i; return i; } @@ -708,12 +708,12 @@ hisi_dma_completed_status(void *dev_private, hw->status[sq_head] = HISI_DMA_STATUS_SUCCESS; sq_head = (sq_head + 1) & hw->sq_depth_mask; } + *last_idx = hw->cridx + cpl_num - 1; if (likely(cpl_num > 0)) { hw->cridx += cpl_num; - *last_idx = hw->cridx - 1; hw->sq_head = sq_head; + hw->completed += cpl_num; } - hw->completed += cpl_num; return cpl_num; }