diff --git a/drivers/dma/tegra210-adma.c b/drivers/dma/tegra210-adma.c index 43431075c6442..73ba3ec8ced83 100644 --- a/drivers/dma/tegra210-adma.c +++ b/drivers/dma/tegra210-adma.c @@ -737,6 +737,15 @@ static void tegra_adma_terminate_all(struct dma_chan *dc) */ tdc->callback_count = 0; + /* Make sure the tasklet has stopped running before we return. */ + if (!in_interrupt()) { + tdc->busy = true; + spin_unlock_irqrestore(&tdc->lock, flags); + tasklet_kill(&tdc->tasklet); + spin_lock_irqsave(&tdc->lock, flags); + tdc->busy = false; + } + spin_unlock_irqrestore(&tdc->lock, flags); }