mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
thermal: core: Free thermal zone ID later during removal
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
This commit is contained in:
parent
41ff66baf8
commit
daae9c18fe
|
|
@ -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",
|
||||
|
|
@ -1729,8 +1730,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);
|
||||
|
|
@ -1738,6 +1737,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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user