Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1701426 > unrolled thread
| Started by | Antonio Borneo <borneo.antonio@gmail.com> |
|---|---|
| First post | 2017-08-01 22:20 +0200 |
| Last post | 2017-08-01 22:20 +0200 |
| Articles | 4 — 1 participant |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH v2 0/3] dmaengine: k3dma: Fix non-cyclic mode Antonio Borneo <borneo.antonio@gmail.com> - 2017-08-01 22:20 +0200
[PATCH v2 1/3] dmaengine: k3dma: fix non-cyclic mode Antonio Borneo <borneo.antonio@gmail.com> - 2017-08-01 22:20 +0200
[PATCH v2 2/3] dmaengine: k3dma: fix double free of descriptor Antonio Borneo <borneo.antonio@gmail.com> - 2017-08-01 22:20 +0200
[PATCH v2 3/3] dmaengine: k3dma: remove useless ON_WARN_ONCE() Antonio Borneo <borneo.antonio@gmail.com> - 2017-08-01 22:20 +0200
| From | Antonio Borneo <borneo.antonio@gmail.com> |
|---|---|
| Date | 2017-08-01 22:20 +0200 |
| Subject | [PATCH v2 0/3] dmaengine: k3dma: Fix non-cyclic mode |
| Message-ID | <u9LO2-9K-15@gated-at.bofh.it> |
Commit 36387a2b1f62b5c087c5fe6f0f7b23b94f722ad7 ("k3dma: Fix
memory handling in preparation for cyclic mode") broke the
logic around ds_run/ds_done in case of non-cyclic DMA.
This v2 splits the initial patch in three parts:
- the real fix for non-cyclic mode
- another fix for a double free introduced in the same commit
- cosmetic removal of useless ON_WARN_ONCE()
Thread in https://patchwork.kernel.org/patch/9833791/
v1 -> v2
- split the patch
- change patch title to "dmaengine: ..."
Antonio Borneo (3):
dmaengine: k3dma: fix non-cyclic mode
dmaengine: k3dma: fix double free of descriptor
dmaengine: k3dma: remove useless ON_WARN_ONCE()
drivers/dma/k3dma.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
--
1.9.1
[toc] | [next] | [standalone]
| From | Antonio Borneo <borneo.antonio@gmail.com> |
|---|---|
| Date | 2017-08-01 22:20 +0200 |
| Subject | [PATCH v2 1/3] dmaengine: k3dma: fix non-cyclic mode |
| Message-ID | <u9LO2-9K-23@gated-at.bofh.it> |
| In reply to | #1701426 |
Commit 36387a2b1f62b5c087c5fe6f0f7b23b94f722ad7 ("k3dma: Fix
memory handling in preparation for cyclic mode") broke the
logic around ds_run/ds_done in case of non-cyclic DMA.
This went unnoticed as the only user of k3dma was the i2s
audio driver but, with a patch set to enable dma on SPI, the
issue popped out.
The fix re-applies the initialization to ds_run/ds_done in
k3_dma_start_txd() that were removed by the commit above.
Also, one of the calls to k3_dma_start_txd() is triggered by
(ds_done != NULL), so remove the noisy and useless call to
WARN_ON_ONCE().
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
---
To: dmaengine@vger.kernel.org
To: Vinod Koul <vinod.koul@intel.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: linux-kernel@vger.kernel.org
Cc: John Stultz <john.stultz@linaro.org>
Cc: Zhangfei Gao <zhangfei.gao@linaro.org>
---
drivers/dma/k3dma.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index 01e25c6..c00eb12 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -275,12 +275,14 @@ static int k3_dma_start_txd(struct k3_dma_chan *c)
list_del(&ds->vd.node);
WARN_ON_ONCE(c->phy->ds_run);
- WARN_ON_ONCE(c->phy->ds_done);
c->phy->ds_run = ds;
+ c->phy->ds_done = NULL;
/* start dma */
k3_dma_set_desc(c->phy, &ds->desc_hw[0]);
return 0;
}
+ c->phy->ds_run = NULL;
+ c->phy->ds_done = NULL;
return -EAGAIN;
}
--
1.9.1
[toc] | [prev] | [next] | [standalone]
| From | Antonio Borneo <borneo.antonio@gmail.com> |
|---|---|
| Date | 2017-08-01 22:20 +0200 |
| Subject | [PATCH v2 2/3] dmaengine: k3dma: fix double free of descriptor |
| Message-ID | <u9LO2-9K-25@gated-at.bofh.it> |
| In reply to | #1701426 |
Commit 36387a2b1f62b5c087c5fe6f0f7b23b94f722ad7 ("k3dma: Fix
memory handling in preparation for cyclic mode") adds code
to free the descriptor in ds_done.
In cyclic mode, ds_done is never used and it's always NULL,
so the added code is not executed.
In non-cyclic mode, ds_done is used as a flag: when not NULL
it signals that the descriptor has been consumed. No need to
free it because it would be free by vchan_complete().
The fix takes back the code changed by the commit above:
- remove the free on the descriptor;
- initialize ds_done to NULL for the next run.
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
---
To: dmaengine@vger.kernel.org
To: Vinod Koul <vinod.koul@intel.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: linux-kernel@vger.kernel.org
Cc: John Stultz <john.stultz@linaro.org>
Cc: Zhangfei Gao <zhangfei.gao@linaro.org>
---
drivers/dma/k3dma.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index c00eb12..b769623 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -724,11 +724,7 @@ static int k3_dma_terminate_all(struct dma_chan *chan)
k3_dma_free_desc(&p->ds_run->vd);
p->ds_run = NULL;
}
- if (p->ds_done) {
- k3_dma_free_desc(&p->ds_done->vd);
- p->ds_done = NULL;
- }
-
+ p->ds_done = NULL;
}
spin_unlock_irqrestore(&c->vc.lock, flags);
vchan_dma_desc_free_list(&c->vc, &head);
--
1.9.1
[toc] | [prev] | [next] | [standalone]
| From | Antonio Borneo <borneo.antonio@gmail.com> |
|---|---|
| Date | 2017-08-01 22:20 +0200 |
| Subject | [PATCH v2 3/3] dmaengine: k3dma: remove useless ON_WARN_ONCE() |
| Message-ID | <u9LO2-9K-31@gated-at.bofh.it> |
| In reply to | #1701426 |
Commit 36387a2b1f62b5c087c5fe6f0f7b23b94f722ad7 ("k3dma: Fix
memory handling in preparation for cyclic mode") adds few
calls to ON_WARN_ONCE() to track the use of ds_run/ds_done.
After the two fixes:
- dmaengine: k3dma: fix non-cyclic mode
- dmaengine: k3dma: fix re-free of the same descriptor
the behaviour of ds_run/ds_done is properly fixed.
The remaining ON_WARN_ONCE() are never triggered and can be
removed.
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
---
To: dmaengine@vger.kernel.org
To: Vinod Koul <vinod.koul@intel.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: linux-kernel@vger.kernel.org
Cc: John Stultz <john.stultz@linaro.org>
Cc: Zhangfei Gao <zhangfei.gao@linaro.org>
---
drivers/dma/k3dma.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index b769623..01d2a75 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -223,7 +223,6 @@ static irqreturn_t k3_dma_int_handler(int irq, void *dev_id)
if (c && (tc1 & BIT(i))) {
spin_lock_irqsave(&c->vc.lock, flags);
vchan_cookie_complete(&p->ds_run->vd);
- WARN_ON_ONCE(p->ds_done);
p->ds_done = p->ds_run;
p->ds_run = NULL;
spin_unlock_irqrestore(&c->vc.lock, flags);
@@ -274,7 +273,6 @@ static int k3_dma_start_txd(struct k3_dma_chan *c)
*/
list_del(&ds->vd.node);
- WARN_ON_ONCE(c->phy->ds_run);
c->phy->ds_run = ds;
c->phy->ds_done = NULL;
/* start dma */
--
1.9.1
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web