Re: [PATCH] thermal: change thermal_class to a const struct

"Rafael J. Wysocki (Intel)" <[email protected]>
Newsgroups org.kernel.vger.linux-pm,dev.linux.lists.driver-core,org.kernel.vger.linux-kernel
Message-ID <CAJZ5v0i0PQEMTOT6UqWO87jCdV539ns-KcP69n++eQsz_NG0zA@mail.gmail.com>
On Tue, Aug 11, 2026 at 8:17 AM Jori Koolstra <[email protected]> wrote:
>
> The class_create() call has been deprecated in favor of class_register()
> as the driver core now allows for a struct class to be in read-only
> memory. Change thermal_class to be a const struct class and drop the
> class_create() call.

This has been deliberately changed the other way around not too long
ago, in commit

34f54003643e thermal/core: Allocate the thermal class dynamically

and it was then argued that it would be better to allocate the class
dynamically.

You seem to have a differing opinion.

Is there any plan to remove class_create() from the kernel?  If there
isn't, I'd rather stop this back-and-forth dance and leave the code
as-is.

> Compile tested only.

That is, not tested.

> Suggested-by: Greg Kroah-Hartman <[email protected]>
> Signed-off-by: Jori Koolstra <[email protected]>
> ---
>  drivers/thermal/thermal_core.c | 24 +++++++++++-------------
>  1 file changed, 11 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index 28a20d4b475c..36220113ca8e 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -889,7 +889,9 @@ static void thermal_unbind_cdev_from_trip(struct thermal_zone_device *tz,
>         kfree(pos);
>  }
>
> -static struct class *thermal_class __ro_after_init;
> +static const struct class thermal_class = {
> +       .name   = "thermal"
> +};
>
>  static inline
>  void print_bind_err_msg(struct thermal_zone_device *tz,
> @@ -973,7 +975,7 @@ thermal_cooling_device_alloc(const char *type, const struct thermal_cooling_devi
>             !ops->set_cur_state)
>                 return ERR_PTR(-EINVAL);
>
> -       if (!thermal_class)
> +       if (!class_is_registered(&thermal_class))

Any chance to reduce the overhead of this check (in all places where
it is done)?

>                 return ERR_PTR(-ENODEV);
>
>         cdev = kzalloc_obj(*cdev);
> @@ -1010,7 +1012,7 @@ int thermal_cooling_device_add(struct thermal_cooling_device *cdev, void *devdat
>         mutex_init(&cdev->lock);
>         INIT_LIST_HEAD(&cdev->thermal_instances);
>         cdev->updated = false;
> -       cdev->device.class = thermal_class;
> +       cdev->device.class = &thermal_class;
>         cdev->device.release = thermal_cdev_release;
>         device_initialize(&cdev->device);
>         cdev->devdata = devdata;
> @@ -1447,7 +1449,7 @@ thermal_zone_device_register_with_trips(const char *type,
>         if (polling_delay && passive_delay > polling_delay)
>                 return ERR_PTR(-EINVAL);
>
> -       if (!thermal_class)
> +       if (!class_is_registered(&thermal_class))
>                 return ERR_PTR(-ENODEV);
>
>         tz = kzalloc_flex(*tz, trips, num_trips);
> @@ -1483,7 +1485,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;
> @@ -1745,7 +1747,7 @@ static void __thermal_pm_prepare(void)
>
>  void thermal_pm_prepare(void)
>  {
> -       if (!thermal_class)
> +       if (!class_is_registered(&thermal_class))
>                 return;
>
>         __thermal_pm_prepare();
> @@ -1776,7 +1778,7 @@ void thermal_pm_complete(void)
>  {
>         struct thermal_zone_device *tz;
>
> -       if (!thermal_class)
> +       if (!class_is_registered(&thermal_class))
>                 return;
>
>         guard(mutex)(&thermal_list_lock);
> @@ -1789,7 +1791,6 @@ void thermal_pm_complete(void)
>
>  static int __init thermal_init(void)
>  {
> -       struct class *tc;
>         int result;
>
>         thermal_debug_init();
> @@ -1808,13 +1809,10 @@ static int __init thermal_init(void)
>         if (result)
>                 goto unregister_governors;
>
> -       tc = class_create("thermal");
> -       if (IS_ERR(tc)) {
> -               result = PTR_ERR(tc);
> +       result = class_register(&thermal_class);
> +       if (result)
>                 goto unregister_governors;
> -       }
>
> -       thermal_class = tc;
>         return 0;
>
>  unregister_governors:
> --
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.