]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
dmaengine: fsl-edma: cleanup chan after dma_async_device_unregister
authorPeng Fan <peng.fan@nxp.com>
Fri, 28 Feb 2025 07:17:19 +0000 (15:17 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Apr 2025 12:37:33 +0000 (14:37 +0200)
[ Upstream commit c9c59da76ce9cb3f215b66eb3708cda1134a5206 ]

There is kernel dump when do module test:
sysfs: cannot create duplicate filename
/devices/platform/soc@0/44000000.bus/44000000.dma-controller/dma/dma0chan0
 __dma_async_device_channel_register+0x128/0x19c
 dma_async_device_register+0x150/0x454
 fsl_edma_probe+0x6cc/0x8a0
 platform_probe+0x68/0xc8

fsl_edma_cleanup_vchan will unlink vchan.chan.device_node, while
dma_async_device_unregister  needs the link to do
__dma_async_device_channel_unregister. So need move fsl_edma_cleanup_vchan
after dma_async_device_unregister to make sure channel could be freed.

So clean up chan after dma_async_device_unregister to address this.

Fixes: 6f93b93b2a1b ("dmaengine: fsl-edma: kill the tasklets upon exit")
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Link: https://lore.kernel.org/r/20250228071720.3780479-1-peng.fan@oss.nxp.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/dma/fsl-edma-main.c

index cd394eae47d179958a9b440f0bd337accdd21c33..cc9923ab686dcd2b75c5e7c67cea337df8f4b2e6 100644 (file)
@@ -675,9 +675,9 @@ static int fsl_edma_remove(struct platform_device *pdev)
        struct fsl_edma_engine *fsl_edma = platform_get_drvdata(pdev);
 
        fsl_edma_irq_exit(pdev, fsl_edma);
-       fsl_edma_cleanup_vchan(&fsl_edma->dma_dev);
        of_dma_controller_free(np);
        dma_async_device_unregister(&fsl_edma->dma_dev);
+       fsl_edma_cleanup_vchan(&fsl_edma->dma_dev);
        fsl_disable_clocks(fsl_edma, fsl_edma->drvdata->dmamuxs);
 
        return 0;