Message ID | 20240119113319.54158-1-mario.limonciello@amd.com (mailing list archive) |
---|---|
State | In Next |
Delegated to: | Rafael Wysocki |
Headers | show |
Series | cpufreq/amd-pstate: Fix setting scaling max/min freq values | expand |
On Sat, Jan 20, 2024 at 5:49 AM Mario Limonciello <mario.limonciello@amd.com> wrote: > > Scaling min/max freq values were being cached and lagging a setting > each time. Fix the ordering of the clamp call to ensure they work. > > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217931 > Cc: stable@vger.kernel.org > Cc: wkarny@gmail.com > Fixes: febab20caeba ("cpufreq/amd-pstate: Fix scaling_min_freq and scaling_max_freq update") > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Reviewed-by: Wyes Karny <wkarny@gmail.com> > --- > drivers/cpufreq/amd-pstate.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index 1f6186475715..1791d37fbc53 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -1232,14 +1232,13 @@ static void amd_pstate_epp_update_limit(struct cpufreq_policy *policy) > max_limit_perf = div_u64(policy->max * cpudata->highest_perf, cpudata->max_freq); > min_limit_perf = div_u64(policy->min * cpudata->highest_perf, cpudata->max_freq); > > + WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf); > + WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf); > + > max_perf = clamp_t(unsigned long, max_perf, cpudata->min_limit_perf, > cpudata->max_limit_perf); > min_perf = clamp_t(unsigned long, min_perf, cpudata->min_limit_perf, > cpudata->max_limit_perf); > - > - WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf); > - WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf); > - > value = READ_ONCE(cpudata->cppc_req_cached); > > if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE) > -- > 2.34.1 >
On Mon, Jan 22, 2024 at 3:57 PM Wyes Karny <wkarny@gmail.com> wrote: > > On Sat, Jan 20, 2024 at 5:49 AM Mario Limonciello > <mario.limonciello@amd.com> wrote: > > > > Scaling min/max freq values were being cached and lagging a setting > > each time. Fix the ordering of the clamp call to ensure they work. > > > > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217931 > > Cc: stable@vger.kernel.org > > Cc: wkarny@gmail.com > > Fixes: febab20caeba ("cpufreq/amd-pstate: Fix scaling_min_freq and scaling_max_freq update") > > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> > > Reviewed-by: Wyes Karny <wkarny@gmail.com> > > > --- > > drivers/cpufreq/amd-pstate.c | 7 +++---- > > 1 file changed, 3 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > > index 1f6186475715..1791d37fbc53 100644 > > --- a/drivers/cpufreq/amd-pstate.c > > +++ b/drivers/cpufreq/amd-pstate.c > > @@ -1232,14 +1232,13 @@ static void amd_pstate_epp_update_limit(struct cpufreq_policy *policy) > > max_limit_perf = div_u64(policy->max * cpudata->highest_perf, cpudata->max_freq); > > min_limit_perf = div_u64(policy->min * cpudata->highest_perf, cpudata->max_freq); > > > > + WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf); > > + WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf); > > + > > max_perf = clamp_t(unsigned long, max_perf, cpudata->min_limit_perf, > > cpudata->max_limit_perf); > > min_perf = clamp_t(unsigned long, min_perf, cpudata->min_limit_perf, > > cpudata->max_limit_perf); > > - > > - WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf); > > - WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf); > > - > > value = READ_ONCE(cpudata->cppc_req_cached); > > > > if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE) > > -- Applied as 6.8-rc material, thanks!
On Friday, January 19, 2024 6:33:19 A.M. EST Mario Limonciello wrote: > Scaling min/max freq values were being cached and lagging a setting > each time. Fix the ordering of the clamp call to ensure they work. > > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217931 > Cc: stable@vger.kernel.org > Cc: wkarny@gmail.com > Fixes: febab20caeba ("cpufreq/amd-pstate: Fix scaling_min_freq and > scaling_max_freq update") Signed-off-by: Mario Limonciello > <mario.limonciello@amd.com> > --- > drivers/cpufreq/amd-pstate.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index 1f6186475715..1791d37fbc53 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -1232,14 +1232,13 @@ static void amd_pstate_epp_update_limit(struct > cpufreq_policy *policy) max_limit_perf = div_u64(policy->max * > cpudata->highest_perf, cpudata->max_freq); min_limit_perf = > div_u64(policy->min * cpudata->highest_perf, cpudata->max_freq); > > + WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf); > + WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf); > + > max_perf = clamp_t(unsigned long, max_perf, cpudata- >min_limit_perf, > cpudata->max_limit_perf); > min_perf = clamp_t(unsigned long, min_perf, cpudata- >min_limit_perf, > cpudata->max_limit_perf); > - > - WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf); > - WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf); > - > value = READ_ONCE(cpudata->cppc_req_cached); > > if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE) Tested-by: Dan Martins <dan.martins@zoho.com>
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index 1f6186475715..1791d37fbc53 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -1232,14 +1232,13 @@ static void amd_pstate_epp_update_limit(struct cpufreq_policy *policy) max_limit_perf = div_u64(policy->max * cpudata->highest_perf, cpudata->max_freq); min_limit_perf = div_u64(policy->min * cpudata->highest_perf, cpudata->max_freq); + WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf); + WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf); + max_perf = clamp_t(unsigned long, max_perf, cpudata->min_limit_perf, cpudata->max_limit_perf); min_perf = clamp_t(unsigned long, min_perf, cpudata->min_limit_perf, cpudata->max_limit_perf); - - WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf); - WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf); - value = READ_ONCE(cpudata->cppc_req_cached); if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE)
Scaling min/max freq values were being cached and lagging a setting each time. Fix the ordering of the clamp call to ensure they work. Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217931 Cc: stable@vger.kernel.org Cc: wkarny@gmail.com Fixes: febab20caeba ("cpufreq/amd-pstate: Fix scaling_min_freq and scaling_max_freq update") Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> --- drivers/cpufreq/amd-pstate.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)