]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cpufreq: intel_pstate: Use mutex guard for driver locking
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 7 Nov 2025 18:18:26 +0000 (19:18 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 12 Nov 2025 19:54:57 +0000 (20:54 +0100)
Use guard(mutex)(&intel_pstate_driver_lock), or the scoped variant of
it, wherever intel_pstate_driver_lock needs to be held.

This allows some local variables and goto statements to be dropped as
they are not necessary any more.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
Link: https://patch.msgid.link/2807232.mvXUDI8C0e@rafael.j.wysocki
drivers/cpufreq/intel_pstate.c

index e05bd9c8ab85642e27891cff548ef76d3d27f270..2a126d7dae01abbabdd9ec3862c8462f848d7ae2 100644 (file)
@@ -1393,7 +1393,8 @@ static void set_power_ctl_ee_state(bool input)
 {
        u64 power_ctl;
 
-       mutex_lock(&intel_pstate_driver_lock);
+       guard(mutex)(&intel_pstate_driver_lock);
+
        rdmsrq(MSR_IA32_POWER_CTL, power_ctl);
        if (input) {
                power_ctl &= ~BIT(MSR_IA32_POWER_CTL_BIT_EE);
@@ -1403,7 +1404,6 @@ static void set_power_ctl_ee_state(bool input)
                power_ctl_ee_state = POWER_CTL_EE_DISABLE;
        }
        wrmsrq(MSR_IA32_POWER_CTL, power_ctl);
-       mutex_unlock(&intel_pstate_driver_lock);
 }
 
 static void intel_pstate_hwp_enable(struct cpudata *cpudata);
@@ -1525,13 +1525,9 @@ static int intel_pstate_update_status(const char *buf, size_t size);
 static ssize_t show_status(struct kobject *kobj,
                           struct kobj_attribute *attr, char *buf)
 {
-       ssize_t ret;
-
-       mutex_lock(&intel_pstate_driver_lock);
-       ret = intel_pstate_show_status(buf);
-       mutex_unlock(&intel_pstate_driver_lock);
+       guard(mutex)(&intel_pstate_driver_lock);
 
-       return ret;
+       return intel_pstate_show_status(buf);
 }
 
 static ssize_t store_status(struct kobject *a, struct kobj_attribute *b,
@@ -1540,11 +1536,13 @@ static ssize_t store_status(struct kobject *a, struct kobj_attribute *b,
        char *p = memchr(buf, '\n', count);
        int ret;
 
-       mutex_lock(&intel_pstate_driver_lock);
+       guard(mutex)(&intel_pstate_driver_lock);
+
        ret = intel_pstate_update_status(buf, p ? p - buf : count);
-       mutex_unlock(&intel_pstate_driver_lock);
+       if (ret < 0)
+               return ret;
 
-       return ret < 0 ? ret : count;
+       return count;
 }
 
 static ssize_t show_turbo_pct(struct kobject *kobj,
@@ -1554,12 +1552,10 @@ static ssize_t show_turbo_pct(struct kobject *kobj,
        int total, no_turbo, turbo_pct;
        uint32_t turbo_fp;
 
-       mutex_lock(&intel_pstate_driver_lock);
+       guard(mutex)(&intel_pstate_driver_lock);
 
-       if (!intel_pstate_driver) {
-               mutex_unlock(&intel_pstate_driver_lock);
+       if (!intel_pstate_driver)
                return -EAGAIN;
-       }
 
        cpu = all_cpu_data[0];
 
@@ -1568,8 +1564,6 @@ static ssize_t show_turbo_pct(struct kobject *kobj,
        turbo_fp = div_fp(no_turbo, total);
        turbo_pct = 100 - fp_toint(mul_fp(turbo_fp, int_tofp(100)));
 
-       mutex_unlock(&intel_pstate_driver_lock);
-
        return sprintf(buf, "%u\n", turbo_pct);
 }
 
@@ -1579,38 +1573,26 @@ static ssize_t show_num_pstates(struct kobject *kobj,
        struct cpudata *cpu;
        int total;
 
-       mutex_lock(&intel_pstate_driver_lock);
+       guard(mutex)(&intel_pstate_driver_lock);
 
-       if (!intel_pstate_driver) {
-               mutex_unlock(&intel_pstate_driver_lock);
+       if (!intel_pstate_driver)
                return -EAGAIN;
-       }
 
        cpu = all_cpu_data[0];
        total = cpu->pstate.turbo_pstate - cpu->pstate.min_pstate + 1;
 
-       mutex_unlock(&intel_pstate_driver_lock);
-
        return sprintf(buf, "%u\n", total);
 }
 
 static ssize_t show_no_turbo(struct kobject *kobj,
                             struct kobj_attribute *attr, char *buf)
 {
-       ssize_t ret;
+       guard(mutex)(&intel_pstate_driver_lock);
 
-       mutex_lock(&intel_pstate_driver_lock);
-
-       if (!intel_pstate_driver) {
-               mutex_unlock(&intel_pstate_driver_lock);
+       if (!intel_pstate_driver)
                return -EAGAIN;
-       }
-
-       ret = sprintf(buf, "%u\n", global.no_turbo);
 
-       mutex_unlock(&intel_pstate_driver_lock);
-
-       return ret;
+       return sprintf(buf, "%u\n", global.no_turbo);
 }
 
 static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,
@@ -1622,29 +1604,25 @@ static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,
        if (sscanf(buf, "%u", &input) != 1)
                return -EINVAL;
 
-       mutex_lock(&intel_pstate_driver_lock);
+       guard(mutex)(&intel_pstate_driver_lock);
 
-       if (!intel_pstate_driver) {
-               count = -EAGAIN;
-               goto unlock_driver;
-       }
+       if (!intel_pstate_driver)
+               return -EAGAIN;
 
        no_turbo = !!clamp_t(int, input, 0, 1);
 
        WRITE_ONCE(global.turbo_disabled, turbo_is_disabled());
        if (global.turbo_disabled && !no_turbo) {
                pr_notice("Turbo disabled by BIOS or unavailable on processor\n");
-               count = -EPERM;
                if (global.no_turbo)
-                       goto unlock_driver;
-               else
-                       no_turbo = 1;
-       }
+                       return -EPERM;
 
-       if (no_turbo == global.no_turbo) {
-               goto unlock_driver;
+               no_turbo = 1;
        }
 
+       if (no_turbo == global.no_turbo)
+               return count;
+
        WRITE_ONCE(global.no_turbo, no_turbo);
 
        mutex_lock(&intel_pstate_limits_lock);
@@ -1663,9 +1641,6 @@ static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,
        intel_pstate_update_limits_for_all();
        arch_set_max_freq_ratio(no_turbo);
 
-unlock_driver:
-       mutex_unlock(&intel_pstate_driver_lock);
-
        return count;
 }
 
@@ -1715,12 +1690,10 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct kobj_attribute *b,
        if (ret != 1)
                return -EINVAL;
 
-       mutex_lock(&intel_pstate_driver_lock);
+       guard(mutex)(&intel_pstate_driver_lock);
 
-       if (!intel_pstate_driver) {
-               mutex_unlock(&intel_pstate_driver_lock);
+       if (!intel_pstate_driver)
                return -EAGAIN;
-       }
 
        mutex_lock(&intel_pstate_limits_lock);
 
@@ -1733,8 +1706,6 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct kobj_attribute *b,
        else
                update_qos_requests(FREQ_QOS_MAX);
 
-       mutex_unlock(&intel_pstate_driver_lock);
-
        return count;
 }
 
@@ -1748,12 +1719,10 @@ static ssize_t store_min_perf_pct(struct kobject *a, struct kobj_attribute *b,
        if (ret != 1)
                return -EINVAL;
 
-       mutex_lock(&intel_pstate_driver_lock);
+       guard(mutex)(&intel_pstate_driver_lock);
 
-       if (!intel_pstate_driver) {
-               mutex_unlock(&intel_pstate_driver_lock);
+       if (!intel_pstate_driver)
                return -EAGAIN;
-       }
 
        mutex_lock(&intel_pstate_limits_lock);
 
@@ -1767,8 +1736,6 @@ static ssize_t store_min_perf_pct(struct kobject *a, struct kobj_attribute *b,
        else
                update_qos_requests(FREQ_QOS_MIN);
 
-       mutex_unlock(&intel_pstate_driver_lock);
-
        return count;
 }
 
@@ -1789,10 +1756,10 @@ static ssize_t store_hwp_dynamic_boost(struct kobject *a,
        if (ret)
                return ret;
 
-       mutex_lock(&intel_pstate_driver_lock);
+       guard(mutex)(&intel_pstate_driver_lock);
+
        hwp_boost = !!input;
        intel_pstate_update_policies();
-       mutex_unlock(&intel_pstate_driver_lock);
 
        return count;
 }
@@ -3914,9 +3881,9 @@ hwp_cpu_matched:
 
        }
 
-       mutex_lock(&intel_pstate_driver_lock);
-       rc = intel_pstate_register_driver(default_driver);
-       mutex_unlock(&intel_pstate_driver_lock);
+       scoped_guard(mutex, &intel_pstate_driver_lock) {
+               rc = intel_pstate_register_driver(default_driver);
+       }
        if (rc) {
                intel_pstate_sysfs_remove();
                return rc;