summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Lezcano <daniel.lezcano@oss.qualcomm.com>2026-05-08 21:05:10 +0300
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2026-05-13 22:03:22 +0300
commit34f54003643e907e2e5d0433e81a6fbfc419fd88 (patch)
tree839f5f24dbfc67335b69e477344311029017ca53
parentdc04e81fa2188d96af0c795ff45e4e5a209183b2 (diff)
downloadlinux-34f54003643e907e2e5d0433e81a6fbfc419fd88.tar.xz
thermal/core: Allocate the thermal class dynamically
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>
-rw-r--r--drivers/thermal/thermal_core.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index abbd20c8ac17..06d8640819d2 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -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;