Re: [PATCH] thermal/core: Split __thermal_cooling_device_register() into two functions
From: Rafael J. Wysocki
Date: Fri May 08 2026 - 08:12:07 EST
On Fri, May 8, 2026 at 1:25 PM Daniel Lezcano
<daniel.lezcano@xxxxxxxxxxxxxxxx> wrote:
>
> On 5/8/26 12:35, Lukasz Luba wrote:
> >
> >
> > On 5/7/26 19:26, Daniel Lezcano wrote:
> >> On 5/7/26 12:02, Lukasz Luba wrote:
>
> [ ... ]
>
> > I would call them explicitly in case of 'if(ret)'
> > error from dev_set_name()...
> > Then the rest could end in case of error with that new
> > 'put_device()' logic at the bottom.
> > Would you agree?
> >
> > A different option would be to refactor thermal_release()
> > and somehow recognize the cooling device not based on name.
>
> This mechanism is not adequate.
>
> thermal_release should not be used this way, neither it should be needed.
>
> We should have:
>
> thermal_class = class_create("thermal");
> if (IS_ERR(thermal_class))
> ...
>
> No thermal_release needed.
>
>
> But,
>
> static void cooling_dev_release(struct device *dev)
> {
> thermal_cooling_device *cdev;
>
> cdev = to_cooling_device(dev);
> thermal_cooling_device_destroy_sysfs(cdev);
> kfree_const(cdev->type);
> ida_free(&thermal_cdev_ida, cdev->id);
> kfree(cdev);
> }
>
> static void tz_dev_release(struct device *dev)
> {
> thermal_zone_device *tz;
>
> tz = to_thermal_zone(dev);
> thermal_zone_destroy_device_groups(tz);
> thermal_set_governor(tz, NULL);
> ida_destroy(&tz->ida);
> mutex_destroy(&tz->lock);
> complete(&tz->removal);
> }
>
> In thermal_cooling_device_add()
> {
> ...
> cdev->device.release = cooling_dev_release
> ...
> }
>
>
> In thermal_zone_device_register_with_trips()
> {
> ...
> tz->device.release = tz_dev_release
> ...
> }
Right, so why don't we clean that up to start with?