Message ID | 20240802182300.244055-3-afd@ti.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [1/7] remoteproc: keystone: Use devm_kasprintf() to build name string | expand |
On Fri, Aug 02, 2024 at 01:22:56PM -0500, Andrew Davis wrote: > This helps prevent mistakes like freeing out of order in cleanup functions > and forgetting to free on error paths. > > Signed-off-by: Andrew Davis <afd@ti.com> > --- > drivers/remoteproc/keystone_remoteproc.c | 17 ++++++++++++++--- > 1 file changed, 14 insertions(+), 3 deletions(-) > > diff --git a/drivers/remoteproc/keystone_remoteproc.c b/drivers/remoteproc/keystone_remoteproc.c > index 8f0f7a4cfef26..033e573544fef 100644 > --- a/drivers/remoteproc/keystone_remoteproc.c > +++ b/drivers/remoteproc/keystone_remoteproc.c > @@ -358,6 +358,13 @@ static int keystone_rproc_of_get_dev_syscon(struct platform_device *pdev, > return 0; > } > > +static void keystone_rproc_mem_release(void *data) > +{ > + struct device *dev = data; > + > + of_reserved_mem_device_release(dev); > +} > + > static int keystone_rproc_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > @@ -434,8 +441,14 @@ static int keystone_rproc_probe(struct platform_device *pdev) > goto disable_clk; > } > > - if (of_reserved_mem_device_init(dev)) > + ret = of_reserved_mem_device_init(dev); > + if (ret) { > dev_warn(dev, "device does not have specific CMA pool\n"); > + } else { > + ret = devm_add_action_or_reset(dev, keystone_rproc_mem_release, dev); > + if (ret) > + return ret; It gets sorted out in the next patches but we still need to "goto disable_clk" to avoid git-bisect problems. I have applied the first two patches of this set so no need to resend them. Thanks, Mathieu > + } > > /* ensure the DSP is in reset before loading firmware */ > ret = reset_control_status(ksproc->reset); > @@ -459,7 +472,6 @@ static int keystone_rproc_probe(struct platform_device *pdev) > return 0; > > release_mem: > - of_reserved_mem_device_release(dev); > gpiod_put(ksproc->kick_gpio); > disable_clk: > pm_runtime_put_sync(dev); > @@ -476,7 +488,6 @@ static void keystone_rproc_remove(struct platform_device *pdev) > gpiod_put(ksproc->kick_gpio); > pm_runtime_put_sync(&pdev->dev); > pm_runtime_disable(&pdev->dev); > - of_reserved_mem_device_release(&pdev->dev); > } > > static const struct of_device_id keystone_rproc_of_match[] = { > -- > 2.39.2 >
diff --git a/drivers/remoteproc/keystone_remoteproc.c b/drivers/remoteproc/keystone_remoteproc.c index 8f0f7a4cfef26..033e573544fef 100644 --- a/drivers/remoteproc/keystone_remoteproc.c +++ b/drivers/remoteproc/keystone_remoteproc.c @@ -358,6 +358,13 @@ static int keystone_rproc_of_get_dev_syscon(struct platform_device *pdev, return 0; } +static void keystone_rproc_mem_release(void *data) +{ + struct device *dev = data; + + of_reserved_mem_device_release(dev); +} + static int keystone_rproc_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -434,8 +441,14 @@ static int keystone_rproc_probe(struct platform_device *pdev) goto disable_clk; } - if (of_reserved_mem_device_init(dev)) + ret = of_reserved_mem_device_init(dev); + if (ret) { dev_warn(dev, "device does not have specific CMA pool\n"); + } else { + ret = devm_add_action_or_reset(dev, keystone_rproc_mem_release, dev); + if (ret) + return ret; + } /* ensure the DSP is in reset before loading firmware */ ret = reset_control_status(ksproc->reset); @@ -459,7 +472,6 @@ static int keystone_rproc_probe(struct platform_device *pdev) return 0; release_mem: - of_reserved_mem_device_release(dev); gpiod_put(ksproc->kick_gpio); disable_clk: pm_runtime_put_sync(dev); @@ -476,7 +488,6 @@ static void keystone_rproc_remove(struct platform_device *pdev) gpiod_put(ksproc->kick_gpio); pm_runtime_put_sync(&pdev->dev); pm_runtime_disable(&pdev->dev); - of_reserved_mem_device_release(&pdev->dev); } static const struct of_device_id keystone_rproc_of_match[] = {
This helps prevent mistakes like freeing out of order in cleanup functions and forgetting to free on error paths. Signed-off-by: Andrew Davis <afd@ti.com> --- drivers/remoteproc/keystone_remoteproc.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-)