* [PATCH V3 1/2] dmaengine: fsl-edma: cleanup chan after dma_async_device_unregister
@ 2024-11-15 10:56 Peng Fan (OSS)
2024-11-15 10:56 ` [PATCH V3 2/2] dmaengine: fsl-edma: free irq correctly in remove path Peng Fan (OSS)
0 siblings, 1 reply; 5+ messages in thread
From: Peng Fan (OSS) @ 2024-11-15 10:56 UTC (permalink / raw)
To: Frank Li, Vinod Koul, open list:FREESCALE eDMA DRIVER,
open list:FREESCALE eDMA DRIVER, open list
Cc: Peng Fan
From: Peng Fan <peng.fan@nxp.com>
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>
---
V3:
Add R-b
V2:
Update commit log
drivers/dma/fsl-edma-main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c
index 60de1003193a..3966320c3d73 100644
--- a/drivers/dma/fsl-edma-main.c
+++ b/drivers/dma/fsl-edma-main.c
@@ -668,9 +668,9 @@ static void 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);
}
--
2.37.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH V3 2/2] dmaengine: fsl-edma: free irq correctly in remove path 2024-11-15 10:56 [PATCH V3 1/2] dmaengine: fsl-edma: cleanup chan after dma_async_device_unregister Peng Fan (OSS) @ 2024-11-15 10:56 ` Peng Fan (OSS) 2024-11-15 15:12 ` Frank Li 0 siblings, 1 reply; 5+ messages in thread From: Peng Fan (OSS) @ 2024-11-15 10:56 UTC (permalink / raw) To: Frank Li, Vinod Koul, open list:FREESCALE eDMA DRIVER, open list:FREESCALE eDMA DRIVER, open list Cc: Peng Fan From: Peng Fan <peng.fan@nxp.com> To i.MX9, there is no valid fsl_edma->txirq/errirq, so add a check in fsl_edma_irq_exit to avoid issues. Otherwise there will be kernel dump: WARNING: CPU: 0 PID: 11 at kernel/irq/devres.c:144 devm_free_irq+0x74/0x80 Modules linked in: CPU: 0 UID: 0 PID: 11 Comm: kworker/u8:0 Not tainted 6.12.0-rc7#18 Hardware name: NXP i.MX93 11X11 EVK board (DT) Workqueue: events_unbound deferred_probe_work_func pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : devm_free_irq+0x74/0x80 lr : devm_free_irq+0x48/0x80 Call trace: devm_free_irq+0x74/0x80 (P) devm_free_irq+0x48/0x80 (L) fsl_edma_remove+0xc4/0xc8 platform_remove+0x28/0x44 device_remove+0x4c/0x80 Fixes: 44eb827264de ("dmaengine: fsl-edma: request per-channel IRQ only when channel is allocated") Signed-off-by: Peng Fan <peng.fan@nxp.com> --- V3: Update commit log V2: None drivers/dma/fsl-edma-main.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c index 3966320c3d73..03b684d7358c 100644 --- a/drivers/dma/fsl-edma-main.c +++ b/drivers/dma/fsl-edma-main.c @@ -303,6 +303,7 @@ fsl_edma2_irq_init(struct platform_device *pdev, /* The last IRQ is for eDMA err */ if (i == count - 1) { + fsl_edma->errirq = irq; ret = devm_request_irq(&pdev->dev, irq, fsl_edma_err_handler, 0, "eDMA2-ERR", fsl_edma); @@ -322,10 +323,13 @@ static void fsl_edma_irq_exit( struct platform_device *pdev, struct fsl_edma_engine *fsl_edma) { if (fsl_edma->txirq == fsl_edma->errirq) { - devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); + if (fsl_edma->txirq >= 0) + devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); } else { - devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); - devm_free_irq(&pdev->dev, fsl_edma->errirq, fsl_edma); + if (fsl_edma->txirq >= 0) + devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); + if (fsl_edma->errirq >= 0) + devm_free_irq(&pdev->dev, fsl_edma->errirq, fsl_edma); } } @@ -485,6 +489,8 @@ static int fsl_edma_probe(struct platform_device *pdev) if (!fsl_edma) return -ENOMEM; + fsl_edma->errirq = -EINVAL; + fsl_edma->txirq = -EINVAL; fsl_edma->drvdata = drvdata; fsl_edma->n_chans = chans; mutex_init(&fsl_edma->fsl_edma_mutex); -- 2.37.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH V3 2/2] dmaengine: fsl-edma: free irq correctly in remove path 2024-11-15 10:56 ` [PATCH V3 2/2] dmaengine: fsl-edma: free irq correctly in remove path Peng Fan (OSS) @ 2024-11-15 15:12 ` Frank Li 2024-11-17 11:07 ` Peng Fan 0 siblings, 1 reply; 5+ messages in thread From: Frank Li @ 2024-11-15 15:12 UTC (permalink / raw) To: Peng Fan (OSS) Cc: Vinod Koul, open list:FREESCALE eDMA DRIVER, open list:FREESCALE eDMA DRIVER, open list, Peng Fan On Fri, Nov 15, 2024 at 06:56:29PM +0800, Peng Fan (OSS) wrote: > From: Peng Fan <peng.fan@nxp.com> > > To i.MX9, there is no valid fsl_edma->txirq/errirq, so add a check in > fsl_edma_irq_exit to avoid issues. Otherwise there will be kernel dump: Nik: Add fsl_edma->txirq/errirq check to avoid below warning because no errirq at i.MX9 platform. Reviewed-by: Frank Li <Frank.Li@nxp.com> > WARNING: CPU: 0 PID: 11 at kernel/irq/devres.c:144 devm_free_irq+0x74/0x80 > Modules linked in: > CPU: 0 UID: 0 PID: 11 Comm: kworker/u8:0 Not tainted 6.12.0-rc7#18 > Hardware name: NXP i.MX93 11X11 EVK board (DT) > Workqueue: events_unbound deferred_probe_work_func > pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) > pc : devm_free_irq+0x74/0x80 > lr : devm_free_irq+0x48/0x80 > Call trace: > devm_free_irq+0x74/0x80 (P) > devm_free_irq+0x48/0x80 (L) > fsl_edma_remove+0xc4/0xc8 > platform_remove+0x28/0x44 > device_remove+0x4c/0x80 > > Fixes: 44eb827264de ("dmaengine: fsl-edma: request per-channel IRQ only when channel is allocated") > Signed-off-by: Peng Fan <peng.fan@nxp.com> > --- > V3: > Update commit log > V2: > None > > drivers/dma/fsl-edma-main.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c > index 3966320c3d73..03b684d7358c 100644 > --- a/drivers/dma/fsl-edma-main.c > +++ b/drivers/dma/fsl-edma-main.c > @@ -303,6 +303,7 @@ fsl_edma2_irq_init(struct platform_device *pdev, > > /* The last IRQ is for eDMA err */ > if (i == count - 1) { > + fsl_edma->errirq = irq; > ret = devm_request_irq(&pdev->dev, irq, > fsl_edma_err_handler, > 0, "eDMA2-ERR", fsl_edma); > @@ -322,10 +323,13 @@ static void fsl_edma_irq_exit( > struct platform_device *pdev, struct fsl_edma_engine *fsl_edma) > { > if (fsl_edma->txirq == fsl_edma->errirq) { > - devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); > + if (fsl_edma->txirq >= 0) > + devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); > } else { > - devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); > - devm_free_irq(&pdev->dev, fsl_edma->errirq, fsl_edma); > + if (fsl_edma->txirq >= 0) > + devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); > + if (fsl_edma->errirq >= 0) > + devm_free_irq(&pdev->dev, fsl_edma->errirq, fsl_edma); > } > } > > @@ -485,6 +489,8 @@ static int fsl_edma_probe(struct platform_device *pdev) > if (!fsl_edma) > return -ENOMEM; > > + fsl_edma->errirq = -EINVAL; > + fsl_edma->txirq = -EINVAL; > fsl_edma->drvdata = drvdata; > fsl_edma->n_chans = chans; > mutex_init(&fsl_edma->fsl_edma_mutex); > -- > 2.37.1 > ^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH V3 2/2] dmaengine: fsl-edma: free irq correctly in remove path 2024-11-15 15:12 ` Frank Li @ 2024-11-17 11:07 ` Peng Fan 2024-12-04 12:47 ` Vinod Koul 0 siblings, 1 reply; 5+ messages in thread From: Peng Fan @ 2024-11-17 11:07 UTC (permalink / raw) To: Frank Li, Peng Fan (OSS) Cc: Vinod Koul, open list:FREESCALE eDMA DRIVER, open list:FREESCALE eDMA DRIVER, open list > Subject: Re: [PATCH V3 2/2] dmaengine: fsl-edma: free irq correctly in > remove path > > On Fri, Nov 15, 2024 at 06:56:29PM +0800, Peng Fan (OSS) wrote: > > From: Peng Fan <peng.fan@nxp.com> > > > > To i.MX9, there is no valid fsl_edma->txirq/errirq, so add a check in > > fsl_edma_irq_exit to avoid issues. Otherwise there will be kernel > dump: > > Nik: > > Add fsl_edma->txirq/errirq check to avoid below warning because no > errirq at i.MX9 platform. > > Reviewed-by: Frank Li <Frank.Li@nxp.com> Thanks, since this is minor commit update. Not sure Vinok could help to update, or need me to update and send v4. Thanks, Peng. > > > WARNING: CPU: 0 PID: 11 at kernel/irq/devres.c:144 > > devm_free_irq+0x74/0x80 Modules linked in: > > CPU: 0 UID: 0 PID: 11 Comm: kworker/u8:0 Not tainted 6.12.0- > rc7#18 > > Hardware name: NXP i.MX93 11X11 EVK board (DT) > > Workqueue: events_unbound deferred_probe_work_func > > pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) > pc : > > devm_free_irq+0x74/0x80 lr : devm_free_irq+0x48/0x80 Call trace: > > devm_free_irq+0x74/0x80 (P) > > devm_free_irq+0x48/0x80 (L) > > fsl_edma_remove+0xc4/0xc8 > > platform_remove+0x28/0x44 > > device_remove+0x4c/0x80 > > > > Fixes: 44eb827264de ("dmaengine: fsl-edma: request per-channel > IRQ > > only when channel is allocated") > > Signed-off-by: Peng Fan <peng.fan@nxp.com> > > --- > > V3: > > Update commit log > > V2: > > None > > > > drivers/dma/fsl-edma-main.c | 12 +++++++++--- > > 1 file changed, 9 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma- > main.c > > index 3966320c3d73..03b684d7358c 100644 > > --- a/drivers/dma/fsl-edma-main.c > > +++ b/drivers/dma/fsl-edma-main.c > > @@ -303,6 +303,7 @@ fsl_edma2_irq_init(struct platform_device > *pdev, > > > > /* The last IRQ is for eDMA err */ > > if (i == count - 1) { > > + fsl_edma->errirq = irq; > > ret = devm_request_irq(&pdev->dev, irq, > > > fsl_edma_err_handler, > > 0, "eDMA2-ERR", > fsl_edma); > > @@ -322,10 +323,13 @@ static void fsl_edma_irq_exit( > > struct platform_device *pdev, struct fsl_edma_engine > *fsl_edma) { > > if (fsl_edma->txirq == fsl_edma->errirq) { > > - devm_free_irq(&pdev->dev, fsl_edma->txirq, > fsl_edma); > > + if (fsl_edma->txirq >= 0) > > + devm_free_irq(&pdev->dev, fsl_edma->txirq, > fsl_edma); > > } else { > > - devm_free_irq(&pdev->dev, fsl_edma->txirq, > fsl_edma); > > - devm_free_irq(&pdev->dev, fsl_edma->errirq, > fsl_edma); > > + if (fsl_edma->txirq >= 0) > > + devm_free_irq(&pdev->dev, fsl_edma->txirq, > fsl_edma); > > + if (fsl_edma->errirq >= 0) > > + devm_free_irq(&pdev->dev, fsl_edma->errirq, > fsl_edma); > > } > > } > > > > @@ -485,6 +489,8 @@ static int fsl_edma_probe(struct > platform_device *pdev) > > if (!fsl_edma) > > return -ENOMEM; > > > > + fsl_edma->errirq = -EINVAL; > > + fsl_edma->txirq = -EINVAL; > > fsl_edma->drvdata = drvdata; > > fsl_edma->n_chans = chans; > > mutex_init(&fsl_edma->fsl_edma_mutex); > > -- > > 2.37.1 > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH V3 2/2] dmaengine: fsl-edma: free irq correctly in remove path 2024-11-17 11:07 ` Peng Fan @ 2024-12-04 12:47 ` Vinod Koul 0 siblings, 0 replies; 5+ messages in thread From: Vinod Koul @ 2024-12-04 12:47 UTC (permalink / raw) To: Peng Fan Cc: Frank Li, Peng Fan (OSS), open list:FREESCALE eDMA DRIVER, open list:FREESCALE eDMA DRIVER, open list On 17-11-24, 11:07, Peng Fan wrote: > > Subject: Re: [PATCH V3 2/2] dmaengine: fsl-edma: free irq correctly in > > remove path > > > > On Fri, Nov 15, 2024 at 06:56:29PM +0800, Peng Fan (OSS) wrote: > > > From: Peng Fan <peng.fan@nxp.com> > > > > > > To i.MX9, there is no valid fsl_edma->txirq/errirq, so add a check in > > > fsl_edma_irq_exit to avoid issues. Otherwise there will be kernel > > dump: > > > > Nik: > > > > Add fsl_edma->txirq/errirq check to avoid below warning because no > > errirq at i.MX9 platform. > > > > Reviewed-by: Frank Li <Frank.Li@nxp.com> > > Thanks, since this is minor commit update. Not sure Vinok could help > to update, or need me to update and send v4. Not sure about Vinok :-) but I would prefer an updated patch -- ~Vinod ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-12-04 12:47 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-11-15 10:56 [PATCH V3 1/2] dmaengine: fsl-edma: cleanup chan after dma_async_device_unregister Peng Fan (OSS) 2024-11-15 10:56 ` [PATCH V3 2/2] dmaengine: fsl-edma: free irq correctly in remove path Peng Fan (OSS) 2024-11-15 15:12 ` Frank Li 2024-11-17 11:07 ` Peng Fan 2024-12-04 12:47 ` Vinod Koul
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox