[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] [retry 3] 3/3 Add support for AMD MPERF/APERF
# HG changeset patch # User mark.langsdorf@xxxxxxx # Date 1270061976 18000 # Node ID 9bde2053016569af994540ec11b9fa45d3d1a8d7 # Parent c00eb5a678e61f4da0db7b4bdeab1660060376d2 Starting with Family 0x10, model 10 processors, some AMD processors will have support for the APERF/MPERF MSRs. This patch adds the checks necessary to support those MSRs. It also makes the get_measured_perf function defined inside cpufreq.c driver independent. The max_freq is passed to the function by the caller instead of being taking from the acpi-cpufreq only drv_data structure. Signed-off-by: Mark Langsdorf <mark.langsdorf@xxxxxxx> diff -r c00eb5a678e6 -r 9bde20530165 xen/arch/x86/acpi/cpufreq/cpufreq.c --- a/xen/arch/x86/acpi/cpufreq/cpufreq.c Wed Mar 31 13:58:45 2010 -0500 +++ b/xen/arch/x86/acpi/cpufreq/cpufreq.c Wed Mar 31 13:59:36 2010 -0500 @@ -269,7 +269,7 @@ * Only IA32_APERF/IA32_MPERF ratio is architecturally defined and * no meaning should be associated with absolute values of these MSRs. */ -static unsigned int get_measured_perf(unsigned int cpu, unsigned int flag) +unsigned int get_measured_perf(unsigned int cpu, unsigned int flag) { struct cpufreq_policy *policy; struct perf_pair readin, cur, *saved; @@ -353,7 +353,7 @@ #endif - retval = drv_data[policy->cpu]->max_freq * perf_percent / 100; + retval = policy->cpuinfo.max_freq * perf_percent / 100; return retval; } diff -r c00eb5a678e6 -r 9bde20530165 xen/arch/x86/acpi/cpufreq/powernow.c --- a/xen/arch/x86/acpi/cpufreq/powernow.c Wed Mar 31 13:58:45 2010 -0500 +++ b/xen/arch/x86/acpi/cpufreq/powernow.c Wed Mar 31 13:59:36 2010 -0500 @@ -38,6 +38,7 @@ #include <acpi/acpi.h> #include <acpi/cpufreq/cpufreq.h> +#define CPUID_6_ECX_APERFMPERF_CAPABILITY (0x1) #define CPUID_FREQ_VOLT_CAPABILITIES 0x80000007 #define CPB_CAPABLE 0x00000200 #define USE_HW_PSTATE 0x00000080 @@ -61,6 +62,8 @@ static struct powernow_cpufreq_data *drv_data[NR_CPUS]; +static struct cpufreq_driver powernow_cpufreq_driver; + struct drv_cmd { unsigned int type; cpumask_t mask; @@ -249,6 +252,10 @@ if (c->cpuid_level >= 6) { unsigned int edx; + unsigned int ecx; + ecx = cpuid_ecx(6); + if (ecx & CPUID_6_ECX_APERFMPERF_CAPABILITY) + powernow_cpufreq_driver.getavg = get_measured_perf; edx = cpuid_edx(CPUID_FREQ_VOLT_CAPABILITIES); if ((edx & CPB_CAPABLE) == CPB_CAPABLE) { policy->turbo = CPUFREQ_TURBO_ENABLED; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |