Merge tag 'kvm-x86-svm-6.5' of https://github.com/kvm-x86/linux into HEAD
[linux-block.git] / drivers / acpi / thermal.c
index ec002ecfe4cf4fb7f02bc211415eaa3b21b26ce7..4720a3649a61bcc8e61cca40f0444a52ba95567b 100644 (file)
@@ -786,6 +786,32 @@ static struct thermal_zone_device_ops acpi_thermal_zone_ops = {
        .critical = acpi_thermal_zone_device_critical,
 };
 
+static int acpi_thermal_zone_sysfs_add(struct acpi_thermal *tz)
+{
+       struct device *tzdev = thermal_zone_device(tz->thermal_zone);
+       int ret;
+
+       ret = sysfs_create_link(&tz->device->dev.kobj,
+                               &tzdev->kobj, "thermal_zone");
+       if (ret)
+               return ret;
+
+       ret = sysfs_create_link(&tzdev->kobj,
+                                  &tz->device->dev.kobj, "device");
+       if (ret)
+               sysfs_remove_link(&tz->device->dev.kobj, "thermal_zone");
+
+       return ret;
+}
+
+static void acpi_thermal_zone_sysfs_remove(struct acpi_thermal *tz)
+{
+       struct device *tzdev = thermal_zone_device(tz->thermal_zone);
+
+       sysfs_remove_link(&tz->device->dev.kobj, "thermal_zone");
+       sysfs_remove_link(&tzdev->kobj, "device");
+}
+
 static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
 {
        int trips = 0;
@@ -819,21 +845,15 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
        if (IS_ERR(tz->thermal_zone))
                return -ENODEV;
 
-       result = sysfs_create_link(&tz->device->dev.kobj,
-                                  &tz->thermal_zone->device.kobj, "thermal_zone");
+       result = acpi_thermal_zone_sysfs_add(tz);
        if (result)
                goto unregister_tzd;
 
-       result = sysfs_create_link(&tz->thermal_zone->device.kobj,
-                                  &tz->device->dev.kobj, "device");
-       if (result)
-               goto remove_tz_link;
-
        status =  acpi_bus_attach_private_data(tz->device->handle,
                                               tz->thermal_zone);
        if (ACPI_FAILURE(status)) {
                result = -ENODEV;
-               goto remove_dev_link;
+               goto remove_links;
        }
 
        result = thermal_zone_device_enable(tz->thermal_zone);
@@ -847,10 +867,8 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
 
 acpi_bus_detach:
        acpi_bus_detach_private_data(tz->device->handle);
-remove_dev_link:
-       sysfs_remove_link(&tz->thermal_zone->device.kobj, "device");
-remove_tz_link:
-       sysfs_remove_link(&tz->device->dev.kobj, "thermal_zone");
+remove_links:
+       acpi_thermal_zone_sysfs_remove(tz);
 unregister_tzd:
        thermal_zone_device_unregister(tz->thermal_zone);
 
@@ -859,8 +877,7 @@ unregister_tzd:
 
 static void acpi_thermal_unregister_thermal_zone(struct acpi_thermal *tz)
 {
-       sysfs_remove_link(&tz->device->dev.kobj, "thermal_zone");
-       sysfs_remove_link(&tz->thermal_zone->device.kobj, "device");
+       acpi_thermal_zone_sysfs_remove(tz);
        thermal_zone_device_unregister(tz->thermal_zone);
        tz->thermal_zone = NULL;
        acpi_bus_detach_private_data(tz->device->handle);