]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
thermal/core: Use devm_add_action_or_reset() when registering a cooling device
authorDaniel Lezcano <daniel.lezcano@oss.qualcomm.com>
Wed, 29 Apr 2026 16:14:14 +0000 (18:14 +0200)
committerDaniel Lezcano <daniel.lezcano@kernel.org>
Tue, 26 May 2026 11:24:29 +0000 (13:24 +0200)
Use devm_add_action_or_reset() which does the replaced code. It
results in a simpler and more concise code.

Signed-off-by: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org>
Reviewed-by: Rafael J. Wysocki (Intel) <rafael@kernel.org>
Link: https://patch.msgid.link/20260429161430.3802970-2-daniel.lezcano@oss.qualcomm.com
drivers/thermal/thermal_core.c

index 7d7ce855ae88bf54d2a3a6cad886344978ed5391..db01361569d76739bb3463189abc588283a77b4a 100644 (file)
@@ -1140,10 +1140,11 @@ thermal_of_cooling_device_register(struct device_node *np,
 }
 EXPORT_SYMBOL_GPL(thermal_of_cooling_device_register);
 
-static void thermal_cooling_device_release(struct device *dev, void *res)
+static void thermal_cooling_device_release(void *data)
 {
-       thermal_cooling_device_unregister(
-                               *(struct thermal_cooling_device **)res);
+       struct thermal_cooling_device *cdev = data;
+
+       thermal_cooling_device_unregister(cdev);
 }
 
 /**
@@ -1169,23 +1170,18 @@ devm_thermal_of_cooling_device_register(struct device *dev,
                                const char *type, void *devdata,
                                const struct thermal_cooling_device_ops *ops)
 {
-       struct thermal_cooling_device **ptr, *tcd;
-
-       ptr = devres_alloc(thermal_cooling_device_release, sizeof(*ptr),
-                          GFP_KERNEL);
-       if (!ptr)
-               return ERR_PTR(-ENOMEM);
+       struct thermal_cooling_device *cdev;
+       int ret;
 
-       tcd = __thermal_cooling_device_register(np, type, devdata, ops);
-       if (IS_ERR(tcd)) {
-               devres_free(ptr);
-               return tcd;
-       }
+       cdev = __thermal_cooling_device_register(np, type, devdata, ops);
+       if (IS_ERR(cdev))
+               return cdev;
 
-       *ptr = tcd;
-       devres_add(dev, ptr);
+       ret = devm_add_action_or_reset(dev, thermal_cooling_device_release, cdev);
+       if (ret)
+               return ERR_PTR(ret);
 
-       return tcd;
+       return cdev;
 }
 EXPORT_SYMBOL_GPL(devm_thermal_of_cooling_device_register);