drivers/thermal/tegra/soctherm: Use devm_add_action_or_reset() for clock disable
Subsystems (2)
PATCH 1/2 drivers/thermal/tegra/soctherm: Use devm_add_action_or_reset() for clock disable
Replace the manual error handling paths disabling the clocks with devm_add_action_or_reset(). This ensures the clocks are properly disabled on probe failure and driver removal, while simplifying the code by removing the explicit error paths.
--- drivers/thermal/tegra/soctherm.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-)
drivers/thermal/tegra/soctherm.c +15 -13
@@ -1499,6 +1499,13 @@ static int soctherm_clk_enable(struct platform_device *pdev, bool enable)return 0 ; } +static void soctherm_clk_disable (void *data) +{ +struct platform_device *pdev = data; + +soctherm_clk_enable (pdev, false); +} +static int throt_get_cdev_max_state (struct thermal_cooling_device *cdev,unsigned long *max_state) {
@@ -2175,6 +2182,10 @@ static int tegra_soctherm_probe(struct platform_device *pdev)if (err)return err; + err =devm_add_action_or_reset (&pdev->dev, soctherm_clk_disable, pdev); +if (err) +return err; +soctherm_thermtrips_parse (pdev);soctherm_init_hw_throt_cdev (pdev);
@@ -2184,10 +2195,8 @@ static int tegra_soctherm_probe(struct platform_device *pdev)for (i =0 ; i < soc->num_ttgs; ++i) {struct tegra_thermctl_zone *zone =devm_kzalloc (&pdev->dev,sizeof (*zone),GFP_KERNEL ); -if (!zone) { - err = -ENOMEM ; - goto disable_clocks; - } +if (!zone) +return -ENOMEM ; zone->reg = tegra->regs + soc->ttgs[i]->sensor_temp_offset; zone->dev = &pdev->dev;
@@ -2201,7 +2210,7 @@ static int tegra_soctherm_probe(struct platform_device *pdev) err =PTR_ERR (z);dev_err (&pdev->dev,"failed to register sensor: %d\n" , err); - goto disable_clocks; +return err; } zone->tz = z;
@@ -2210,7 +2219,7 @@ static int tegra_soctherm_probe(struct platform_device *pdev)/* Configure hw trip points */ err =tegra_soctherm_set_hwtrips (&pdev->dev, soc->ttgs[i], z);if (err) - goto disable_clocks; +return err; } err =soctherm_interrupts_init (pdev, tegra);
@@ -2218,11 +2227,6 @@ static int tegra_soctherm_probe(struct platform_device *pdev)soctherm_debug_init (pdev);return 0 ; - -disable_clocks: -soctherm_clk_enable (pdev, false); - -return err; }static void tegra_soctherm_remove (struct platform_device *pdev)
@@ -2230,8 +2234,6 @@ static void tegra_soctherm_remove(struct platform_device *pdev)struct tegra_soctherm *tegra =platform_get_drvdata (pdev);debugfs_remove_recursive (tegra->debugfs_dir); - -soctherm_clk_enable (pdev, false); }static int __maybe_unused soctherm_suspend (struct device *dev)
Signature · 1 line
2.43.0
PATCH 2/2 thermal/drivers/tegra/soctherma: Switch to devm cooling device registration
Use devm_thermal_of_cooling_device_register() to simplify resource management and avoid manual cleanup in error paths.
As a side effect this change has the benefit of solving an existing issue. Before, the function tegra_soctherm_remove() only called debugfs_remove_recursive() and never called thermal_cooling_device_unregister() for any of the cooling devices registered here.
After the driver removal, the thermal framework's cdev list would still hold references to thermal_cooling_device objects whose devdata pointer (ts) pointed to memory already freed by the platform device's devm cleanup.
With this change, the cooling device is unregistered when the driver is removed, thus fixing the issue above.
--- drivers/thermal/tegra/soctherm.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/thermal/tegra/soctherm.c +3 -3
@@ -1707,9 +1707,9 @@ static void soctherm_init_hw_throt_cdev(struct platform_device *pdev) stc->init = true; }else { - tcd =thermal_of_cooling_device_register (np_stcc, - (char *)name, ts, - &throt_cooling_ops); + tcd =devm_thermal_of_cooling_device_register (dev, np_stcc, + (char *)name, ts, + &throt_cooling_ops);if (IS_ERR_OR_NULL (tcd)) { dev_err(dev, "throttle-cfg: %s: failed to register cooling device\n",
Signature · 1 line
2.43.0
Quoted 7 lines · Daniel Lezcano
Replace the manual error handling paths disabling the clocks with
devm_add_action_or_reset(). This ensures the clocks are properly disabled on probe failure and driver removal, while simplifying the code by removing the explicit error paths.Signed-off-by Daniel Lezcano <[email protected]>---
If nobody is against these two changes, I'll apply them
Thanks
-- Daniel
Daniel Lezcano
AppliedQuoted 6 lines · Daniel Lezcano
Quoted 5 lines · Daniel Lezcano
Replace the manual error handling paths disabling the clocks with
devm_add_action_or_reset(). This ensures the clocks are properly disabled on probe failure and driver removal, while simplifying the code by removing the explicit error paths.
Quoted 9 lines
Quoted 2 lines
Signed-off-by Daniel Lezcano <[email protected]>---
If nobody is against these two changes, I'll apply them
Thanks
-- Daniel
Applied, thanks
Hi Daniel,
Quoted 10 lines · Daniel Lezcano
Quoted 9 lines · Daniel Lezcano
Quoted 7 lines · Daniel Lezcano
Replace the manual error handling paths disabling the clocks with
devm_add_action_or_reset(). This ensures the clocks are properly disabled on probe failure and driver removal, while simplifying the code by removing the explicit error paths.Signed-off-by Daniel Lezcano <[email protected]>---
Quoted 8 lines
Quoted 6 lines
If nobody is against these two changes, I'll apply them
Thanks
-- Daniel
Applied, thanks
My apologies for being late. The changes make perfect sense. Feel free to add to both patches:
Quoted 20 lines · Lukasz Luba
Hi Daniel,
Quoted 17 lines · Daniel Lezcano
Quoted 15 lines · Daniel Lezcano
Quoted 7 lines · Daniel Lezcano
Replace the manual error handling paths disabling the clocks with
devm_add_action_or_reset(). This ensures the clocks are properly disabled on probe failure and driver removal, while simplifying the code by removing the explicit error paths.Signed-off-by Daniel Lezcano <[email protected]>---
If nobody is against these two changes, I'll apply them
Thanks
-- Daniel
Quoted 6 lines
Quoted 1 line
Applied, thanks
My apologies for being late. The changes make perfect sense. Feel free to add to both patches:
Reviewed-by Lukasz Luba <[email protected]>
Thanks for the review