Accesses to thermal zones, and with it the thermal zone device mutex,
are still possible after the thermal zone device has been unregistered.
For example, thermal_zone_get_temp() can be called from temp_show()
in thermal_sysfs.c if the sysfs attribute was opened before the thermal
device was unregistered.
Move the call to mutex_destroy from thermal_zone_device_unregister()
to thermal_release() to ensure that it is only destroyed after it is
guaranteed to be no longer accessed.
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
                     sizeof("thermal_zone") - 1)) {
                tz = to_thermal_zone(dev);
                thermal_zone_destroy_device_groups(tz);
+               mutex_destroy(&tz->lock);
                kfree(tz);
        } else if (!strncmp(dev_name(dev), "cooling_device",
                            sizeof("cooling_device") - 1)) {
        thermal_remove_hwmon_sysfs(tz);
        ida_free(&thermal_tz_ida, tz->id);
        ida_destroy(&tz->ida);
-       mutex_destroy(&tz->lock);
        device_unregister(&tz->device);
 
        thermal_notify_tz_delete(tz_id);