Several DMAengine drivers defer interrupt completion processing to tasklets, but release channel resources without draining tasklets that were already queued. Stopping or releasing an IRQ prevents new hard IRQ handlers, but does not synchronize the deferred tasklet.
Depending on the driver, a late tasklet can access freed descriptor storage or invoke a completion callback after its client data has been released. Ensure each producer is stopped before killing the tasklet and freeing the resources it can access. Each patch is independent and keeps the synchronization local to one driver's channel or device teardown path. Jiale Yao (7): dmaengine: ep93xx: drain tasklet before freeing channel resources dmaengine: fsldma: drain channel tasklet during removal dmaengine: mmp_pdma: drain channel tasklets during removal dmaengine: mmp_tdma: synchronize tasklet when freeing a channel dmaengine: mv_xor: drain IRQ tasklet before freeing channel memory dmaengine: mxs-dma: synchronize tasklet when freeing a channel dmaengine: ste_dma40: synchronize tasklet when releasing a channel drivers/dma/ep93xx_dma.c | 4 +++- drivers/dma/fsldma.c | 1 + drivers/dma/mmp_pdma.c | 4 ++++ drivers/dma/mmp_tdma.c | 2 ++ drivers/dma/mv_xor.c | 6 ++++-- drivers/dma/mxs-dma.c | 1 + drivers/dma/ste_dma40.c | 2 ++ 7 files changed, 17 insertions(+), 3 deletions(-) -- 2.34.1
