mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
thermal: core: Free thermal zone ID later during removal
commitdaae9c18feupstream. The thermal zone removal ordering is different from the thermal zone registration rollback path ordering and the former is arguably problematic because freeing a thermal zone ID prematurely may cause it to be used during the registration of another thermal zone which may fail as a result. Prevent that from occurring by changing the thermal zone removal ordering to reflect the thermal zone registration rollback path ordering. Also more the ida_destroy() call from thermal_zone_device_unregister() to thermal_release() for consistency. Fixes:b31ef8285b("thermal core: convert ID allocation to IDA") Cc: All applicable <stable@vger.kernel.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Link: https://patch.msgid.link/5063934.GXAFRqVoOG@rafael.j.wysocki Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
1873eb81c6
commit
eb295d2b6e
@@ -965,6 +965,7 @@ static void thermal_release(struct device *dev)
|
||||
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);
|
||||
} else if (!strncmp(dev_name(dev), "cooling_device",
|
||||
@@ -1726,8 +1727,6 @@ void thermal_zone_device_unregister(struct thermal_zone_device *tz)
|
||||
|
||||
thermal_thresholds_exit(tz);
|
||||
thermal_remove_hwmon_sysfs(tz);
|
||||
ida_free(&thermal_tz_ida, tz->id);
|
||||
ida_destroy(&tz->ida);
|
||||
|
||||
device_del(&tz->device);
|
||||
put_device(&tz->device);
|
||||
@@ -1735,6 +1734,9 @@ void thermal_zone_device_unregister(struct thermal_zone_device *tz)
|
||||
thermal_notify_tz_delete(tz);
|
||||
|
||||
wait_for_completion(&tz->removal);
|
||||
|
||||
ida_free(&thermal_tz_ida, tz->id);
|
||||
|
||||
kfree(tz->tzp);
|
||||
kfree(tz);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user