]> git.proxmox.com Git - mirror_ubuntu-kernels.git/blobdiff - drivers/acpi/processor_idle.c
Merge branches 'release', 'bugzilla-13032', 'bugzilla-13041+', 'bugzilla-13121',...
[mirror_ubuntu-kernels.git] / drivers / acpi / processor_idle.c
index c1d59cfdb5fb319022b429b0fde25428e9b7b380..72069ba5f1edc666d765f0131d509290e74244ab 100644 (file)
@@ -239,7 +239,7 @@ int acpi_processor_resume(struct acpi_device * device)
 }
 
 #if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
-static int tsc_halts_in_c(int state)
+static void tsc_check_state(int state)
 {
        switch (boot_cpu_data.x86_vendor) {
        case X86_VENDOR_AMD:
@@ -249,13 +249,17 @@ static int tsc_halts_in_c(int state)
                 * C/P/S0/S1 states when this bit is set.
                 */
                if (boot_cpu_has(X86_FEATURE_NONSTOP_TSC))
-                       return 0;
+                       return;
 
                /*FALL THROUGH*/
        default:
-               return state > ACPI_STATE_C1;
+               /* TSC could halt in idle, so notify users */
+               if (state > ACPI_STATE_C1)
+                       mark_tsc_unstable("TSC halts in idle");
        }
 }
+#else
+static void tsc_check_state(int state) { return; }
 #endif
 
 static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
@@ -601,14 +605,9 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
 
        pr->power.timer_broadcast_on_state = INT_MAX;
 
-       for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
+       for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
                struct acpi_processor_cx *cx = &pr->power.states[i];
 
-#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
-               /* TSC could halt in idle, so notify users */
-               if (tsc_halts_in_c(cx->type))
-                       mark_tsc_unstable("TSC halts in idle");;
-#endif
                switch (cx->type) {
                case ACPI_STATE_C1:
                        cx->valid = 1;
@@ -626,6 +625,8 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
                                acpi_timer_check_state(i, pr, cx);
                        break;
                }
+               if (cx->valid)
+                       tsc_check_state(cx->type);
 
                if (cx->valid)
                        working++;