thermal: core: Manage thermal_governor_lock using a mutex guard
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 10 Oct 2024 22:22:09 +0000 (00:22 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 24 Oct 2024 12:48:42 +0000 (14:48 +0200)
Switch over the thermal core to using a mutex guard for
thermal_governor_lock management.

No intentional functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://patch.msgid.link/3679429.R56niFO833@rjwysocki.net
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
drivers/thermal/thermal_core.c

index 6464be98df5f0ad08f7461434bff1f16ea0d1b7a..7f0d69b333a0373ded0e929d5ec6fb27ca5f05b7 100644 (file)
@@ -124,7 +124,7 @@ int thermal_register_governor(struct thermal_governor *governor)
        if (!governor)
                return -EINVAL;
 
-       mutex_lock(&thermal_governor_lock);
+       guard(mutex)(&thermal_governor_lock);
 
        err = -EBUSY;
        if (!__find_governor(governor->name)) {
@@ -163,8 +163,6 @@ int thermal_register_governor(struct thermal_governor *governor)
                }
        }
 
-       mutex_unlock(&thermal_governor_lock);
-
        return err;
 }
 
@@ -175,10 +173,10 @@ void thermal_unregister_governor(struct thermal_governor *governor)
        if (!governor)
                return;
 
-       mutex_lock(&thermal_governor_lock);
+       guard(mutex)(&thermal_governor_lock);
 
        if (!__find_governor(governor->name))
-               goto exit;
+               return;
 
        list_del(&governor->governor_list);
 
@@ -189,9 +187,6 @@ void thermal_unregister_governor(struct thermal_governor *governor)
                                 THERMAL_NAME_LENGTH))
                        thermal_set_governor(pos, NULL);
        }
-
-exit:
-       mutex_unlock(&thermal_governor_lock);
 }
 
 int thermal_zone_device_set_policy(struct thermal_zone_device *tz,
@@ -200,16 +195,13 @@ int thermal_zone_device_set_policy(struct thermal_zone_device *tz,
        struct thermal_governor *gov;
        int ret = -EINVAL;
 
-       mutex_lock(&thermal_governor_lock);
-
+       guard(mutex)(&thermal_governor_lock);
        guard(thermal_zone)(tz);
 
        gov = __find_governor(strim(policy));
        if (gov)
                ret = thermal_set_governor(tz, gov);
 
-       mutex_unlock(&thermal_governor_lock);
-
        thermal_notify_tz_gov_change(tz, policy);
 
        return ret;
@@ -220,15 +212,13 @@ int thermal_build_list_of_policies(char *buf)
        struct thermal_governor *pos;
        ssize_t count = 0;
 
-       mutex_lock(&thermal_governor_lock);
+       guard(mutex)(&thermal_governor_lock);
 
        list_for_each_entry(pos, &thermal_governor_list, governor_list) {
                count += sysfs_emit_at(buf, count, "%s ", pos->name);
        }
        count += sysfs_emit_at(buf, count, "\n");
 
-       mutex_unlock(&thermal_governor_lock);
-
        return count;
 }
 
@@ -670,17 +660,18 @@ int for_each_thermal_governor(int (*cb)(struct thermal_governor *, void *),
                              void *data)
 {
        struct thermal_governor *gov;
-       int ret = 0;
 
-       mutex_lock(&thermal_governor_lock);
+       guard(mutex)(&thermal_governor_lock);
+
        list_for_each_entry(gov, &thermal_governor_list, governor_list) {
+               int ret;
+
                ret = cb(gov, data);
                if (ret)
-                       break;
+                       return ret;
        }
-       mutex_unlock(&thermal_governor_lock);
 
-       return ret;
+       return 0;
 }
 
 int for_each_thermal_cooling_device(int (*cb)(struct thermal_cooling_device *,
@@ -1348,20 +1339,15 @@ EXPORT_SYMBOL_GPL(thermal_zone_get_crit_temp);
 static int thermal_zone_init_governor(struct thermal_zone_device *tz)
 {
        struct thermal_governor *governor;
-       int ret;
 
-       mutex_lock(&thermal_governor_lock);
+       guard(mutex)(&thermal_governor_lock);
 
        if (tz->tzp)
                governor = __find_governor(tz->tzp->governor_name);
        else
                governor = def_governor;
 
-       ret = thermal_set_governor(tz, governor);
-
-       mutex_unlock(&thermal_governor_lock);
-
-       return ret;
+       return thermal_set_governor(tz, governor);
 }
 
 static void thermal_zone_init_complete(struct thermal_zone_device *tz)