Skip to content

Commit

Permalink
cpufreq: intel_pstate: Update the maximum CPU frequency consistently
Browse files Browse the repository at this point in the history
There are 3 places at which the maximum CPU frequency may change,
store_no_turbo(), intel_pstate_update_limits() (when called by the
cpufreq core) and intel_pstate_notify_work() (when handling a HWP
change notification).  Currently, cpuinfo.max_freq is only updated by
store_no_turbo() and intel_pstate_notify_work(), although it principle
it may be necessary to update it in intel_pstate_update_limits() either.

Make all of them mutually consistent.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
  • Loading branch information
Rafael J. Wysocki committed Apr 2, 2024
1 parent f32587d commit e8217b4
Showing 1 changed file with 18 additions and 5 deletions.
23 changes: 18 additions & 5 deletions drivers/cpufreq/intel_pstate.c
Original file line number Diff line number Diff line change
Expand Up @@ -1153,18 +1153,32 @@ static void intel_pstate_update_policies(void)
static void __intel_pstate_update_max_freq(struct cpudata *cpudata,
struct cpufreq_policy *policy)
{
intel_pstate_get_hwp_cap(cpudata);

policy->cpuinfo.max_freq = READ_ONCE(global.no_turbo) ?
cpudata->pstate.max_freq : cpudata->pstate.turbo_freq;

refresh_frequency_limits(policy);
}

static void intel_pstate_update_limits(unsigned int cpu)
{
mutex_lock(&intel_pstate_driver_lock);
struct cpufreq_policy *policy = cpufreq_cpu_acquire(cpu);

cpufreq_update_policy(cpu);
if (!policy)
return;

mutex_unlock(&intel_pstate_driver_lock);
__intel_pstate_update_max_freq(all_cpu_data[cpu], policy);

cpufreq_cpu_release(policy);
}

static void intel_pstate_update_limits_for_all(void)
{
int cpu;

for_each_possible_cpu(cpu)
intel_pstate_update_limits(cpu);
}

/************************** sysfs begin ************************/
Expand Down Expand Up @@ -1311,7 +1325,7 @@ static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,

mutex_unlock(&intel_pstate_limits_lock);

intel_pstate_update_policies();
intel_pstate_update_limits_for_all();
arch_set_max_freq_ratio(no_turbo);

unlock_driver:
Expand Down Expand Up @@ -1595,7 +1609,6 @@ static void intel_pstate_notify_work(struct work_struct *work)
struct cpufreq_policy *policy = cpufreq_cpu_acquire(cpudata->cpu);

if (policy) {
intel_pstate_get_hwp_cap(cpudata);
__intel_pstate_update_max_freq(cpudata, policy);

cpufreq_cpu_release(policy);
Expand Down

0 comments on commit e8217b4

Please sign in to comment.