mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
dmaengine: edma: kill the tasklets upon exit
drivers should ensure that tasklets are killed, so that they can't be executed after driver remove is executed, so ensure they are killed. This driver used vchan tasklets, so those need to be killed. Signed-off-by: Vinod Koul <[email protected]> Acked-by: Peter Ujfalusi <[email protected]>
This commit is contained in:
parent
638001e0e0
commit
f4e0628ba3
1 changed files with 13 additions and 0 deletions
|
|
@ -2393,6 +2393,17 @@ err_reg1:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void edma_cleanupp_vchan(struct dma_device *dmadev)
|
||||
{
|
||||
struct edma_chan *echan, *_echan;
|
||||
|
||||
list_for_each_entry_safe(echan, _echan,
|
||||
&dmadev->channels, vchan.chan.device_node) {
|
||||
list_del(&echan->vchan.chan.device_node);
|
||||
tasklet_kill(&echan->vchan.task);
|
||||
}
|
||||
}
|
||||
|
||||
static int edma_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
|
|
@ -2401,6 +2412,8 @@ static int edma_remove(struct platform_device *pdev)
|
|||
devm_free_irq(dev, ecc->ccint, ecc);
|
||||
devm_free_irq(dev, ecc->ccerrint, ecc);
|
||||
|
||||
edma_cleanupp_vchan(&ecc->dma_slave);
|
||||
|
||||
if (dev->of_node)
|
||||
of_dma_controller_free(dev->of_node);
|
||||
dma_async_device_unregister(&ecc->dma_slave);
|
||||
|
|
|
|||
Loading…
Reference in a new issue