summaryrefslogtreecommitdiffstats
path: root/drivers/dma
diff options
context:
space:
mode:
authorVinod Koul <vinod.koul@intel.com>2018-04-10 05:25:30 +0200
committerVinod Koul <vinod.koul@intel.com>2018-04-10 05:25:30 +0200
commitf18b46190c62858fe04414e8ee9efea26f759e91 (patch)
tree7bd47311c76e444ccbb0a7aebdc0f0eb3cd4e8b0 /drivers/dma
parentMerge branch 'topic/mtek' into for-linus (diff)
parentdmaengine: pl330: fix a race condition in case of threaded irqs (diff)
downloadlinux-f18b46190c62858fe04414e8ee9efea26f759e91.tar.xz
linux-f18b46190c62858fe04414e8ee9efea26f759e91.zip
Merge branch 'topic/pl330' into for-linus
Diffstat (limited to 'drivers/dma')
-rw-r--r--drivers/dma/pl330.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index d7327fd5f445..de1fd59fe136 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -1510,7 +1510,7 @@ static void pl330_dotask(unsigned long data)
/* Returns 1 if state was updated, 0 otherwise */
static int pl330_update(struct pl330_dmac *pl330)
{
- struct dma_pl330_desc *descdone, *tmp;
+ struct dma_pl330_desc *descdone;
unsigned long flags;
void __iomem *regs;
u32 val;
@@ -1588,7 +1588,9 @@ static int pl330_update(struct pl330_dmac *pl330)
}
/* Now that we are in no hurry, do the callbacks */
- list_for_each_entry_safe(descdone, tmp, &pl330->req_done, rqd) {
+ while (!list_empty(&pl330->req_done)) {
+ descdone = list_first_entry(&pl330->req_done,
+ struct dma_pl330_desc, rqd);
list_del(&descdone->rqd);
spin_unlock_irqrestore(&pl330->lock, flags);
dma_pl330_rqcb(descdone, PL330_ERR_NONE);