]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
thermal/core: Allocate the thermal class dynamically
authorDaniel Lezcano <daniel.lezcano@oss.qualcomm.com>
Fri, 8 May 2026 18:05:10 +0000 (20:05 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 13 May 2026 19:03:22 +0000 (21:03 +0200)
Use class_create() instead of a statically allocated struct class.

This allows the thermal class to be managed through a dynamically
allocated class object and avoids keeping a static class instance
around.

Signed-off-by: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
[ rjw: Added __ro_after_init to thermal_class ]
[ rjw: Used temporary local var to store class_create() return value ]
Link: https://patch.msgid.link/20260508180511.1306659-4-daniel.lezcano@oss.qualcomm.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/thermal/thermal_core.c

index abbd20c8ac17643ffda28cfead31c557124448e5..06d8640819d2ba2115454e732d056ed339d19f8d 100644 (file)
@@ -889,9 +889,7 @@ unbind:
        kfree(pos);
 }
 
-static const struct class thermal_class = {
-       .name = "thermal",
-};
+static struct class *thermal_class __ro_after_init;
 static bool thermal_class_unavailable __ro_after_init = true;
 
 static inline
@@ -1018,7 +1016,7 @@ __thermal_cooling_device_register(struct device_node *np,
        cdev->np = np;
        cdev->ops = ops;
        cdev->updated = false;
-       cdev->device.class = &thermal_class;
+       cdev->device.class = thermal_class;
        cdev->device.release = thermal_cdev_release;
        cdev->devdata = devdata;
 
@@ -1514,7 +1512,7 @@ thermal_zone_device_register_with_trips(const char *type,
        if (!tz->ops.critical)
                tz->ops.critical = thermal_zone_device_critical;
 
-       tz->device.class = &thermal_class;
+       tz->device.class = thermal_class;
        tz->device.release = thermal_zone_device_release;
        tz->devdata = devdata;
        tz->num_trips = num_trips;
@@ -1820,6 +1818,7 @@ void thermal_pm_complete(void)
 
 static int __init thermal_init(void)
 {
+       struct class *tc;
        int result;
 
        thermal_debug_init();
@@ -1838,10 +1837,13 @@ static int __init thermal_init(void)
        if (result)
                goto unregister_governors;
 
-       result = class_register(&thermal_class);
-       if (result)
+       tc = class_create("thermal");
+       if (IS_ERR(tc)) {
+               result = PTR_ERR(tc);
                goto unregister_governors;
+       }
 
+       thermal_class = tc;
        thermal_class_unavailable = false;
 
        return 0;