diff options
Diffstat (limited to 'arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c')
-rw-r--r-- | arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c index 23da96e57b1..19f6b9d27e8 100644 --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
@@ -33,7 +33,7 @@ | |||
33 | #include <linux/cpufreq.h> | 33 | #include <linux/cpufreq.h> |
34 | #include <linux/compiler.h> | 34 | #include <linux/compiler.h> |
35 | #include <linux/dmi.h> | 35 | #include <linux/dmi.h> |
36 | #include <linux/ftrace.h> | 36 | #include <trace/power.h> |
37 | 37 | ||
38 | #include <linux/acpi.h> | 38 | #include <linux/acpi.h> |
39 | #include <linux/io.h> | 39 | #include <linux/io.h> |
@@ -72,6 +72,8 @@ struct acpi_cpufreq_data { | |||
72 | 72 | ||
73 | static DEFINE_PER_CPU(struct acpi_cpufreq_data *, drv_data); | 73 | static DEFINE_PER_CPU(struct acpi_cpufreq_data *, drv_data); |
74 | 74 | ||
75 | DEFINE_TRACE(power_mark); | ||
76 | |||
75 | /* acpi_perf_data is a pointer to percpu data. */ | 77 | /* acpi_perf_data is a pointer to percpu data. */ |
76 | static struct acpi_processor_performance *acpi_perf_data; | 78 | static struct acpi_processor_performance *acpi_perf_data; |
77 | 79 | ||
@@ -680,6 +682,18 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) | |||
680 | perf->states[i].transition_latency * 1000; | 682 | perf->states[i].transition_latency * 1000; |
681 | } | 683 | } |
682 | 684 | ||
685 | /* Check for high latency (>20uS) from buggy BIOSes, like on T42 */ | ||
686 | if (perf->control_register.space_id == ACPI_ADR_SPACE_FIXED_HARDWARE && | ||
687 | policy->cpuinfo.transition_latency > 20 * 1000) { | ||
688 | static int print_once; | ||
689 | policy->cpuinfo.transition_latency = 20 * 1000; | ||
690 | if (!print_once) { | ||
691 | print_once = 1; | ||
692 | printk(KERN_INFO "Capping off P-state tranision latency" | ||
693 | " at 20 uS\n"); | ||
694 | } | ||
695 | } | ||
696 | |||
683 | data->max_freq = perf->states[0].core_frequency * 1000; | 697 | data->max_freq = perf->states[0].core_frequency * 1000; |
684 | /* table init */ | 698 | /* table init */ |
685 | for (i = 0; i < perf->state_count; i++) { | 699 | for (i = 0; i < perf->state_count; i++) { |