]> git.hungrycats.org Git - linux/commitdiff
CPUFREQ: Make acpi-cpufreq more robust against BIOS freq changes behind our back.
authorVenkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Mon, 28 Apr 2008 19:13:43 +0000 (15:13 -0400)
committerChris Wright <chrisw@sous-sol.org>
Mon, 9 Jun 2008 18:27:03 +0000 (11:27 -0700)
upstream commit: e56a727b023d40d1adf660168883f30f2e6abe0a

We checked the hardware freq with OS cached freq value in get_cur_freqon_cpu().

Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Thomas Renninger <trenn@suse.de>
Signed-off-by: Dave Jones <davej@redhat.com>
Cc: Thomas Renninger <trenn@suse.de>
Cc: "Anthony L. Awtrey" <tony@awtrey.com>
[chrisw: backport to 2.6.25.4]
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c

index a962dcb9c408518add7154ac9757ad2ed2c08f7c..404ff26f4f6501c87bb9932ab9fded32109449d8 100644 (file)
@@ -339,6 +339,7 @@ static unsigned int get_cur_freq_on_cpu(unsigned int cpu)
 {
        struct acpi_cpufreq_data *data = per_cpu(drv_data, cpu);
        unsigned int freq;
+       unsigned int cached_freq;
 
        dprintk("get_cur_freq_on_cpu (%d)\n", cpu);
 
@@ -347,7 +348,16 @@ static unsigned int get_cur_freq_on_cpu(unsigned int cpu)
                return 0;
        }
 
+       cached_freq = data->freq_table[data->acpi_data->state].frequency;
        freq = extract_freq(get_cur_val(cpumask_of_cpu(cpu)), data);
+       if (freq != cached_freq) {
+               /*
+                * The dreaded BIOS frequency change behind our back.
+                * Force set the frequency on next target call.
+                */
+               data->resume = 1;
+       }
+
        dprintk("cur freq = %u\n", freq);
 
        return freq;