public inbox for dmaengine@vger.kernel.org
 help / color / mirror / Atom feed
From: Jie Hai <haijie1@huawei.com>
To: <vkoul@kernel.org>, <wangzhou1@hisilicon.com>
Cc: <dmaengine@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: [RESEND PATCH v5 2/7] dmaengine: hisilicon: Fix CQ head update
Date: Tue, 30 Aug 2022 14:22:46 +0800	[thread overview]
Message-ID: <20220830062251.52993-3-haijie1@huawei.com> (raw)
In-Reply-To: <20220830062251.52993-1-haijie1@huawei.com>

After completion of data transfer of one or multiple descriptors,
the completion status and the current head pointer to submission
queue are written into the CQ and interrupt can be generated to
inform the software. In interrupt process CQ is read and cq_head
is updated.

hisi_dma_irq updates cq_head only when the completion status is
success. When an abnormal interrupt reports, cq_head will not update
which will cause subsequent interrupt processes read the error CQ
and never report the correct status.

This patch updates cq_head whenever CQ is accessed.

Fixes: e9f08b65250d ("dmaengine: hisilicon: Add Kunpeng DMA engine support")
Signed-off-by: Jie Hai <haijie1@huawei.com>
Acked-by: Zhou Wang <wangzhou1@hisilicon.com>
---
 drivers/dma/hisi_dma.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/hisi_dma.c b/drivers/dma/hisi_dma.c
index 98bc488893cc..837f7e4adfa6 100644
--- a/drivers/dma/hisi_dma.c
+++ b/drivers/dma/hisi_dma.c
@@ -436,12 +436,10 @@ static irqreturn_t hisi_dma_irq(int irq, void *data)
 	desc = chan->desc;
 	cqe = chan->cq + chan->cq_head;
 	if (desc) {
+		chan->cq_head = (chan->cq_head + 1) % hdma_dev->chan_depth;
+		hisi_dma_chan_write(hdma_dev->base, HISI_DMA_CQ_HEAD_PTR,
+				    chan->qp_num, chan->cq_head);
 		if (FIELD_GET(STATUS_MASK, cqe->w0) == STATUS_SUCC) {
-			chan->cq_head = (chan->cq_head + 1) %
-					hdma_dev->chan_depth;
-			hisi_dma_chan_write(hdma_dev->base,
-					    HISI_DMA_CQ_HEAD_PTR, chan->qp_num,
-					    chan->cq_head);
 			vchan_cookie_complete(&desc->vd);
 		} else {
 			dev_err(&hdma_dev->pdev->dev, "task error!\n");
-- 
2.33.0


  parent reply	other threads:[~2022-08-30  6:25 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-30  6:22 [RESEND PATCH v5 0/7] dmaengine: hisilicon: Add support for hisi dma driver Jie Hai
2022-08-30  6:22 ` [RESEND PATCH v5 1/7] dmaengine: hisilicon: Disable channels when unregister hisi_dma Jie Hai
2022-08-30  6:22 ` Jie Hai [this message]
2022-08-30  6:22 ` [RESEND PATCH v5 3/7] dmaengine: hisilicon: Add multi-thread support for a DMA channel Jie Hai
2022-08-30  6:22 ` [RESEND PATCH v5 4/7] dmaengine: hisilicon: Use macros instead of magic number Jie Hai
2022-08-30  6:22 ` [RESEND PATCH v5 5/7] dmaengine: hisilicon: Adapt DMA driver to HiSilicon IP09 Jie Hai
2022-08-30  6:22 ` [RESEND PATCH v5 6/7] dmaengine: hisilicon: Dump regs to debugfs Jie Hai
2022-08-30  6:22 ` [RESEND PATCH v5 7/7] MAINTAINERS: Add myself as maintainer for hisi_dma Jie Hai
2022-09-04 17:12 ` [RESEND PATCH v5 0/7] dmaengine: hisilicon: Add support for hisi dma driver Vinod Koul

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220830062251.52993-3-haijie1@huawei.com \
    --to=haijie1@huawei.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=vkoul@kernel.org \
    --cc=wangzhou1@hisilicon.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox