1
0
Fork 0

MLK-23652-2: dmagengine: fsl-edma-v3: fix race condition

Add spinlock for 'tcd_pool', otherwise, in some race condition,
'tcd_pool = NULL' cause ISR never clear edma channel INT anymore which
cause interrupt storm. Besides, clear interrupt directly before poweroff
for safe.

Signed-off-by: Robin Gong <yibin.gong@nxp.com>
Reviewed-by: Fugang Duan <fugang.duan@nxp.com>
(cherry picked from commit 37149f29a631f074ac65889375cd1b077284edf8)
5.4-rM2-2.2.x-imx-squashed
Robin Gong 2020-04-28 00:48:30 +08:00
parent 2191fda25c
commit 6446b3a523
1 changed files with 7 additions and 0 deletions

View File

@ -838,8 +838,15 @@ static void fsl_edma3_free_chan_resources(struct dma_chan *chan)
vchan_dma_desc_free_list(&fsl_chan->vchan, &head);
dma_pool_destroy(fsl_chan->tcd_pool);
spin_lock_irqsave(&fsl_chan->vchan.lock, flags);
fsl_chan->tcd_pool = NULL;
fsl_chan->used = false;
/* Clear interrupt before power off */
if (readl(fsl_chan->membase + EDMA_CH_INT))
writel(1, fsl_chan->membase + EDMA_CH_INT);
spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags);
pm_runtime_put_sync(fsl_chan->dev);
}