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@xxxxxx> > --- > 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 >