Skip to content

Commit

Permalink
cpufreq/amd-pstate: Drop boost_state variable
Browse files Browse the repository at this point in the history
Currently boost_state is cached for every processor in cpudata structure
and driver boost state is set for every processor.

Both of these aren't necessary as the driver only needs to set once and
the policy stores whether boost is enabled.

Move the driver boost setting to registration and adjust all references
to cached value to pull from the policy instead.

Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Link: https://lore.kernel.org/r/20241209185248.16301-16-mario.limonciello@amd.com
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
  • Loading branch information
Mario Limonciello committed Dec 11, 2024
1 parent f9a378f commit 95fad7f
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 14 deletions.
26 changes: 13 additions & 13 deletions drivers/cpufreq/amd-pstate.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,9 +316,10 @@ static int shmem_set_epp(struct amd_cpudata *cpudata, u32 epp)
return ret;
}

static int amd_pstate_set_energy_pref_index(struct amd_cpudata *cpudata,
int pref_index)
static int amd_pstate_set_energy_pref_index(struct cpufreq_policy *policy,
int pref_index)
{
struct amd_cpudata *cpudata = policy->driver_data;
int epp;

if (!pref_index)
Expand All @@ -336,7 +337,7 @@ static int amd_pstate_set_energy_pref_index(struct amd_cpudata *cpudata,
epp,
FIELD_GET(AMD_CPPC_MIN_PERF_MASK, cpudata->cppc_req_cached),
FIELD_GET(AMD_CPPC_MAX_PERF_MASK, cpudata->cppc_req_cached),
cpudata->boost_state);
policy->boost_enabled);
}

return amd_pstate_set_epp(cpudata, epp);
Expand Down Expand Up @@ -746,7 +747,6 @@ static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state)
guard(mutex)(&amd_pstate_driver_lock);

ret = amd_pstate_cpu_boost_update(policy, state);
WRITE_ONCE(cpudata->boost_state, !ret ? state : false);
policy->boost_enabled = !ret ? state : false;
refresh_frequency_limits(policy);

Expand All @@ -768,9 +768,6 @@ static int amd_pstate_init_boost_support(struct amd_cpudata *cpudata)
goto exit_err;
}

/* at least one CPU supports CPB, even if others fail later on to set up */
current_pstate_driver->boost_enabled = true;

ret = rdmsrl_on_cpu(cpudata->cpu, MSR_K7_HWCR, &boost_val);
if (ret) {
pr_err_once("failed to read initial CPU boost state!\n");
Expand Down Expand Up @@ -1176,7 +1173,6 @@ static ssize_t show_energy_performance_available_preferences(
static ssize_t store_energy_performance_preference(
struct cpufreq_policy *policy, const char *buf, size_t count)
{
struct amd_cpudata *cpudata = policy->driver_data;
char str_preference[21];
ssize_t ret;

Expand All @@ -1190,7 +1186,7 @@ static ssize_t store_energy_performance_preference(

guard(mutex)(&amd_pstate_limits_lock);

ret = amd_pstate_set_energy_pref_index(cpudata, ret);
ret = amd_pstate_set_energy_pref_index(policy, ret);

return ret ? ret : count;
}
Expand Down Expand Up @@ -1265,6 +1261,9 @@ static int amd_pstate_register_driver(int mode)
return ret;
}

/* at least one CPU supports CPB */
current_pstate_driver->boost_enabled = cpu_feature_enabled(X86_FEATURE_CPB);

ret = cpufreq_register_driver(current_pstate_driver);
if (ret) {
amd_pstate_driver_cleanup();
Expand Down Expand Up @@ -1604,8 +1603,9 @@ static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy)
return 0;
}

static int amd_pstate_epp_reenable(struct amd_cpudata *cpudata)
static int amd_pstate_epp_reenable(struct cpufreq_policy *policy)
{
struct amd_cpudata *cpudata = policy->driver_data;
u64 max_perf;
int ret;

Expand All @@ -1619,7 +1619,7 @@ static int amd_pstate_epp_reenable(struct amd_cpudata *cpudata)
trace_amd_pstate_epp_perf(cpudata->cpu, cpudata->highest_perf,
cpudata->epp_cached,
FIELD_GET(AMD_CPPC_MIN_PERF_MASK, cpudata->cppc_req_cached),
max_perf, cpudata->boost_state);
max_perf, policy->boost_enabled);
}

return amd_pstate_update_perf(cpudata, 0, 0, max_perf, cpudata->epp_cached, false);
Expand All @@ -1632,7 +1632,7 @@ static int amd_pstate_epp_cpu_online(struct cpufreq_policy *policy)

pr_debug("AMD CPU Core %d going online\n", cpudata->cpu);

ret = amd_pstate_epp_reenable(cpudata);
ret = amd_pstate_epp_reenable(policy);
if (ret)
return ret;
cpudata->suspended = false;
Expand Down Expand Up @@ -1690,7 +1690,7 @@ static int amd_pstate_epp_resume(struct cpufreq_policy *policy)
guard(mutex)(&amd_pstate_limits_lock);

/* enable amd pstate from suspend state*/
amd_pstate_epp_reenable(cpudata);
amd_pstate_epp_reenable(policy);

cpudata->suspended = false;
}
Expand Down
1 change: 0 additions & 1 deletion drivers/cpufreq/amd-pstate.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ struct amd_cpudata {
u64 cppc_cap1_cached;
bool suspended;
s16 epp_default;
bool boost_state;
};

/*
Expand Down

0 comments on commit 95fad7f

Please sign in to comment.