]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
Merge branch 'linus' into release
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / cpu / cpufreq / acpi-cpufreq.c
index 3babe1f1e912eba061378087b5d4211022e4f772..022222c76e3b689f6e8937e77a3923b9008947f6 100644 (file)
@@ -601,7 +601,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
        if (!data)
                return -ENOMEM;
 
-       data->acpi_data = percpu_ptr(acpi_perf_data, cpu);
+       data->acpi_data = per_cpu_ptr(acpi_perf_data, cpu);
        per_cpu(drv_data, cpu) = data;
 
        if (cpu_has(c, X86_FEATURE_CONSTANT_TSC))
@@ -680,6 +680,18 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
                            perf->states[i].transition_latency * 1000;
        }
 
+       /* Check for high latency (>20uS) from buggy BIOSes, like on T42 */
+       if (perf->control_register.space_id == ACPI_ADR_SPACE_FIXED_HARDWARE &&
+           policy->cpuinfo.transition_latency > 20 * 1000) {
+               static int print_once;
+               policy->cpuinfo.transition_latency = 20 * 1000;
+               if (!print_once) {
+                       print_once = 1;
+                       printk(KERN_INFO "Capping off P-state tranision latency"
+                               " at 20 uS\n");
+               }
+       }
+
        data->max_freq = perf->states[0].core_frequency * 1000;
        /* table init */
        for (i = 0; i < perf->state_count; i++) {