x86/cpufreq: Rework APERF/MPERF handling

Currently, each feature_detect() (called on CPU add) hook for both cpufreq
drivers duplicates cpu_has_aperfmperf in a per-cpu datastructure, and edits
cpufreq_driver.getavg to point at get_measured_perf().

As all parts of this are vendor-neutral, drop the function pointer and
duplicated boolean, and call get_measured_perf() directly.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Andrew Cooper committed 2021-11-29 13:53:05 +00:00
1 parent eed4f94ddb
commit 4dd16c4415
4 files changed
+4 -21

No files matched your search

+1 -7
View File
@@ -275,7 +275,7 @@ unsigned int get_measured_perf(unsigned int cpu, unsigned int flag)
return 0;
policy = per_cpu(cpufreq_cpu_policy, cpu);
if (!policy || !policy->aperf_mperf)
if ( !policy || !cpu_has_aperfmperf )
return 0;
switch (flag)
@@ -345,12 +345,6 @@ static void feature_detect(void *info)
struct cpufreq_policy *policy = info;
unsigned int eax;
if ( cpu_has_aperfmperf )
{
policy->aperf_mperf = 1;
cpufreq_driver.getavg = get_measured_perf;
}
eax = cpuid_eax(6);
if (eax & 0x2) {
policy->turbo = CPUFREQ_TURBO_ENABLED;
-6
View File
@@ -205,12 +205,6 @@ static void feature_detect(void *info)
struct cpufreq_policy *policy = info;
unsigned int edx;
if ( cpu_has_aperfmperf )
{
policy->aperf_mperf = 1;
cpufreq_driver.getavg = get_measured_perf;
}
edx = cpuid_edx(CPUID_FREQ_VOLT_CAPABILITIES);
if ((edx & CPB_CAPABLE) == CPB_CAPABLE) {
policy->turbo = CPUFREQ_TURBO_ENABLED;
+3 -6
View File
@@ -381,12 +381,9 @@ int cpufreq_driver_getavg(unsigned int cpu, unsigned int flag)
if (!cpu_online(cpu) || !(policy = per_cpu(cpufreq_cpu_policy, cpu)))
return 0;
if (cpufreq_driver.getavg)
{
freq_avg = cpufreq_driver.getavg(cpu, flag);
if (freq_avg > 0)
return freq_avg;
}
freq_avg = get_measured_perf(cpu, flag);
if ( freq_avg > 0 )
return freq_avg;
return policy->cur;
}
-2
View File
@@ -72,7 +72,6 @@ struct cpufreq_policy {
s8 turbo; /* tristate flag: 0 for unsupported
* -1 for disable, 1 for enabled
* See CPUFREQ_TURBO_* below for defines */
bool_t aperf_mperf; /* CPU has APERF/MPERF MSRs */
};
DECLARE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_policy);
@@ -162,7 +161,6 @@ struct cpufreq_driver {
unsigned int target_freq,
unsigned int relation);
unsigned int (*get)(unsigned int cpu);
unsigned int (*getavg)(unsigned int cpu, unsigned int flag);
int (*exit)(struct cpufreq_policy *policy);
};
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.