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
parent
2191fda25c
commit
6446b3a523
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue