diff options
author | Vinod Koul <vinod.koul@intel.com> | 2018-04-10 05:25:30 +0200 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2018-04-10 05:25:30 +0200 |
commit | f18b46190c62858fe04414e8ee9efea26f759e91 (patch) | |
tree | 7bd47311c76e444ccbb0a7aebdc0f0eb3cd4e8b0 /drivers/dma | |
parent | Merge branch 'topic/mtek' into for-linus (diff) | |
parent | dmaengine: pl330: fix a race condition in case of threaded irqs (diff) | |
download | linux-f18b46190c62858fe04414e8ee9efea26f759e91.tar.xz linux-f18b46190c62858fe04414e8ee9efea26f759e91.zip |
Merge branch 'topic/pl330' into for-linus
Diffstat (limited to 'drivers/dma')
-rw-r--r-- | drivers/dma/pl330.c | 6 |
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); |