summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Smith <alex.smith@imgtec.com>2015-07-24 17:24:27 +0100
committerVinod Koul <vinod.koul@intel.com>2015-08-18 22:28:50 +0530
commitae9c02b421139c4c44340b019e250a9969a91613 (patch)
treea1a62adeffd8d80b74da68f147ef10f7a344a4e7
parentd509a83cea8a64478c7899f28e961543b6569cfc (diff)
downloadlinux-ae9c02b421139c4c44340b019e250a9969a91613.tar.bz2
dmaengine: jz4780: Kill tasklets before unregistering the device
Tasklets may have been scheduled as a result of an earlier interrupt that could still be running. Kill them before unregistering the device. Signed-off-by: Alex Smith <alex.smith@imgtec.com> Cc: Vinod Koul <vinod.koul@intel.com> Cc: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com> Cc: dmaengine@vger.kernel.org Signed-off-by: Vinod Koul <vinod.koul@intel.com>
-rw-r--r--drivers/dma/dma-jz4780.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/dma/dma-jz4780.c b/drivers/dma/dma-jz4780.c
index d6cae6cb5b7a..dade7c47ff18 100644
--- a/drivers/dma/dma-jz4780.c
+++ b/drivers/dma/dma-jz4780.c
@@ -866,9 +866,15 @@ err_free_irq:
static int jz4780_dma_remove(struct platform_device *pdev)
{
struct jz4780_dma_dev *jzdma = platform_get_drvdata(pdev);
+ int i;
of_dma_controller_free(pdev->dev.of_node);
+
free_irq(jzdma->irq, jzdma);
+
+ for (i = 0; i < JZ_DMA_NR_CHANNELS; i++)
+ tasklet_kill(&jzdma->chan[i].vchan.task);
+
dma_async_device_unregister(&jzdma->dma_device);
return 0;
}