Switch to the new devm_of_reserved_mem_device_init_by_name() for both the nominal and derated reserved memory regions so they are released automatically on probe failure or device removal.
All six goto release paths in the probe function precede clock attach and debugfs initialization, so they become plain return statements. The release: label and its explicit of_reserved_mem_device_release() calls in both the probe error path and tegra210_emc_remove() are removed. Signed-off-by: Mukesh Ojha <[email protected]> --- drivers/memory/tegra/tegra210-emc-core.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/drivers/memory/tegra/tegra210-emc-core.c b/drivers/memory/tegra/tegra210-emc-core.c index e8d4cd8fdec2..07c7654dac63 100644 --- a/drivers/memory/tegra/tegra210-emc-core.c +++ b/drivers/memory/tegra/tegra210-emc-core.c @@ -1847,16 +1847,16 @@ static int tegra210_emc_probe(struct platform_device *pdev) np = pdev->dev.of_node; /* attach to the nominal and (optional) derated tables */ - err = of_reserved_mem_device_init_by_name(emc->dev, np, "nominal"); + err = devm_of_reserved_mem_device_init_by_name(emc->dev, np, "nominal"); if (err < 0) { dev_err(emc->dev, "failed to get nominal EMC table: %d\n", err); return err; } - err = of_reserved_mem_device_init_by_name(emc->dev, np, "derated"); + err = devm_of_reserved_mem_device_init_by_name(emc->dev, np, "derated"); if (err < 0 && err != -ENODEV) { dev_err(emc->dev, "failed to get derated EMC table: %d\n", err); - goto release; + return err; } /* validate the tables */ @@ -1864,14 +1864,14 @@ static int tegra210_emc_probe(struct platform_device *pdev) err = tegra210_emc_validate_timings(emc, emc->nominal, emc->num_timings); if (err < 0) - goto release; + return err; } if (emc->derated) { err = tegra210_emc_validate_timings(emc, emc->derated, emc->num_timings); if (err < 0) - goto release; + return err; } /* default to the nominal table */ @@ -1891,7 +1891,7 @@ static int tegra210_emc_probe(struct platform_device *pdev) dev_err(emc->dev, "no EMC table entry found for %lu kHz\n", current_rate); err = -ENOENT; - goto release; + return err; } /* pick a compatible clock change sequence for the EMC table */ @@ -1909,7 +1909,7 @@ static int tegra210_emc_probe(struct platform_device *pdev) dev_err(&pdev->dev, "sequence %u not supported\n", emc->timings[0].revision); err = -ENOTSUPP; - goto release; + return err; } emc->offsets = &tegra210_emc_table_register_offsets; @@ -1924,7 +1924,7 @@ static int tegra210_emc_probe(struct platform_device *pdev) GFP_KERNEL); if (!emc->provider.configs) { err = -ENOMEM; - goto release; + return err; } emc->provider.num_configs = emc->num_timings; @@ -1949,7 +1949,7 @@ static int tegra210_emc_probe(struct platform_device *pdev) err = tegra210_clk_emc_attach(emc->clk, &emc->provider); if (err < 0) { dev_err(&pdev->dev, "failed to attach to EMC clock: %d\n", err); - goto release; + return err; } emc->clkchange_delay = 100; @@ -1979,8 +1979,6 @@ static int tegra210_emc_probe(struct platform_device *pdev) detach: debugfs_remove_recursive(emc->debugfs.root); tegra210_clk_emc_detach(emc->clk); -release: - of_reserved_mem_device_release(emc->dev); return err; } @@ -1991,7 +1989,6 @@ static void tegra210_emc_remove(struct platform_device *pdev) debugfs_remove_recursive(emc->debugfs.root); tegra210_clk_emc_detach(emc->clk); - of_reserved_mem_device_release(emc->dev); } static int __maybe_unused tegra210_emc_suspend(struct device *dev) -- 2.53.0

