On 07/05/2016 05:54 PM, Vinod Koul wrote: > 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. Acked-by: Peter Ujfalusi <peter.ujfalusi@xxxxxx> > > Signed-off-by: Vinod Koul <vinod.koul@xxxxxxxxx> > Cc: Peter Ujfalusi <peter.ujfalusi@xxxxxx> > --- > drivers/dma/edma.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c > index dffbd4bb0d8b..3d277fa76c1a 100644 > --- a/drivers/dma/edma.c > +++ b/drivers/dma/edma.c > @@ -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); > -- Péter -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html