]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cpufreq: intel_pstate: Rearrange show_no_turbo() and store_no_turbo()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 25 Mar 2024 17:03:25 +0000 (18:03 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 2 Apr 2024 10:57:04 +0000 (12:57 +0200)
Now that global.turbo_disabled can only change at the cpufreq driver
registration time, initialize global.no_turbo at that time too so they
are in sync to start with (if the former is set, the latter cannot be
updated later anyway).

That allows show_no_turbo() to be simlified because it does not need
to check global.turbo_disabled and store_no_turbo() can be rearranged
to avoid doing anything if the new value of global.no_turbo is equal
to the current one and only return an error on attempts to clear
global.no_turbo when global.turbo_disabled.

While at it, eliminate the redundant ret variable from store_no_turbo().

No intentional functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
drivers/cpufreq/intel_pstate.c

index 7c00087e840d47d65b60267344517ab5310ef8bd..357993ae1454325b0ec5e462f259653c01cec679 100644 (file)
@@ -1262,10 +1262,7 @@ static ssize_t show_no_turbo(struct kobject *kobj,
                return -EAGAIN;
        }
 
-       if (global.turbo_disabled)
-               ret = sprintf(buf, "%u\n", global.turbo_disabled);
-       else
-               ret = sprintf(buf, "%u\n", global.no_turbo);
+       ret = sprintf(buf, "%u\n", global.no_turbo);
 
        mutex_unlock(&intel_pstate_driver_lock);
 
@@ -1276,31 +1273,34 @@ static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,
                              const char *buf, size_t count)
 {
        unsigned int input;
-       int ret;
+       bool no_turbo;
 
-       ret = sscanf(buf, "%u", &input);
-       if (ret != 1)
+       if (sscanf(buf, "%u", &input) != 1)
                return -EINVAL;
 
        mutex_lock(&intel_pstate_driver_lock);
 
        if (!intel_pstate_driver) {
-               mutex_unlock(&intel_pstate_driver_lock);
-               return -EAGAIN;
+               count = -EAGAIN;
+               goto unlock_driver;
        }
 
-       mutex_lock(&intel_pstate_limits_lock);
+       no_turbo = !!clamp_t(int, input, 0, 1);
+
+       if (no_turbo == global.no_turbo)
+               goto unlock_driver;
 
        if (global.turbo_disabled) {
                pr_notice_once("Turbo disabled by BIOS or unavailable on processor\n");
-               mutex_unlock(&intel_pstate_limits_lock);
-               mutex_unlock(&intel_pstate_driver_lock);
-               return -EPERM;
+               count = -EPERM;
+               goto unlock_driver;
        }
 
-       global.no_turbo = clamp_t(int, input, 0, 1);
+       global.no_turbo = no_turbo;
+
+       mutex_lock(&intel_pstate_limits_lock);
 
-       if (global.no_turbo) {
+       if (no_turbo) {
                struct cpudata *cpu = all_cpu_data[0];
                int pct = cpu->pstate.max_pstate * 100 / cpu->pstate.turbo_pstate;
 
@@ -1312,8 +1312,9 @@ static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,
        mutex_unlock(&intel_pstate_limits_lock);
 
        intel_pstate_update_policies();
-       arch_set_max_freq_ratio(global.no_turbo);
+       arch_set_max_freq_ratio(no_turbo);
 
+unlock_driver:
        mutex_unlock(&intel_pstate_driver_lock);
 
        return count;
@@ -3094,6 +3095,7 @@ static int intel_pstate_register_driver(struct cpufreq_driver *driver)
        memset(&global, 0, sizeof(global));
        global.max_perf_pct = 100;
        global.turbo_disabled = turbo_is_disabled();
+       global.no_turbo = global.turbo_disabled;
 
        arch_set_max_freq_ratio(global.turbo_disabled);