]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cpufreq/amd-pstate: Catch failures for amd_pstate_epp_update_limit()
authorMario Limonciello <mario.limonciello@amd.com>
Sun, 1 Sep 2024 05:00:35 +0000 (00:00 -0500)
committerMario Limonciello <mario.limonciello@amd.com>
Wed, 4 Sep 2024 20:07:34 +0000 (15:07 -0500)
amd_pstate_set_epp() calls cppc_set_epp_perf() which can fail for
a variety of reasons but this is ignored.  Change the return flow
to allow failures.

Reviewed-by: Perry Yuan <perry.yuan@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
drivers/cpufreq/amd-pstate.c

index 89bda7a2bb8d131f981df2d39447a88854152ae2..b5fcde1bed32f104c8f1a376e4b96384179d7522 100644 (file)
@@ -1555,7 +1555,7 @@ static void amd_pstate_epp_cpu_exit(struct cpufreq_policy *policy)
        pr_debug("CPU %d exiting\n", policy->cpu);
 }
 
-static void amd_pstate_epp_update_limit(struct cpufreq_policy *policy)
+static int amd_pstate_epp_update_limit(struct cpufreq_policy *policy)
 {
        struct amd_cpudata *cpudata = policy->driver_data;
        u32 max_perf, min_perf, min_limit_perf, max_limit_perf;
@@ -1605,7 +1605,7 @@ static void amd_pstate_epp_update_limit(struct cpufreq_policy *policy)
                 * This return value can only be negative for shared_memory
                 * systems where EPP register read/write not supported.
                 */
-               return;
+               return epp;
        }
 
        if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE)
@@ -1618,12 +1618,13 @@ static void amd_pstate_epp_update_limit(struct cpufreq_policy *policy)
        }
 
        WRITE_ONCE(cpudata->cppc_req_cached, value);
-       amd_pstate_set_epp(cpudata, epp);
+       return amd_pstate_set_epp(cpudata, epp);
 }
 
 static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy)
 {
        struct amd_cpudata *cpudata = policy->driver_data;
+       int ret;
 
        if (!policy->cpuinfo.max_freq)
                return -ENODEV;
@@ -1633,7 +1634,9 @@ static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy)
 
        cpudata->policy = policy->policy;
 
-       amd_pstate_epp_update_limit(policy);
+       ret = amd_pstate_epp_update_limit(policy);
+       if (ret)
+               return ret;
 
        /*
         * policy->cur is never updated with the amd_pstate_epp driver, but it