aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/processor_idle.c
diff options
context:
space:
mode:
authorDavid Shaohua Li <shaohua.li@intel.com>2005-12-01 17:00:00 -0500
committerLen Brown <len.brown@intel.com>2005-12-05 17:00:37 -0500
commit1e483969930a82e16767884449f3a121a817ef00 (patch)
tree9d110ed1c66f71762c88cbf5d83ea35467f46a14 /drivers/acpi/processor_idle.c
parent4c0335526c95d90a1d958e0059f40a5745fc7c5d (diff)
[ACPI] correct earlier SMP deep C-states on HT patch
http://bugzilla.kernel.org/show_bug.cgi?id=5165 Change polarity of test for PLVL2_UP flag. Skip promotion/demotion code when not needed. Signed-off-by: Shaohua Li <shaohua.li@intel.com> Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/processor_idle.c')
-rw-r--r--drivers/acpi/processor_idle.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 83fd1b6c10c4..800f99c4c0ef 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -278,8 +278,6 @@ static void acpi_processor_idle(void)
278 } 278 }
279 } 279 }
280 280
281 cx->usage++;
282
283#ifdef CONFIG_HOTPLUG_CPU 281#ifdef CONFIG_HOTPLUG_CPU
284 /* 282 /*
285 * Check for P_LVL2_UP flag before entering C2 and above on 283 * Check for P_LVL2_UP flag before entering C2 and above on
@@ -287,9 +285,12 @@ static void acpi_processor_idle(void)
287 * detection phase, to work cleanly with logical CPU hotplug. 285 * detection phase, to work cleanly with logical CPU hotplug.
288 */ 286 */
289 if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) && 287 if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) &&
290 !pr->flags.has_cst && acpi_fadt.plvl2_up) 288 !pr->flags.has_cst && !acpi_fadt.plvl2_up)
291 cx->type = ACPI_STATE_C1; 289 cx = &pr->power.states[ACPI_STATE_C1];
292#endif 290#endif
291
292 cx->usage++;
293
293 /* 294 /*
294 * Sleep: 295 * Sleep:
295 * ------ 296 * ------
@@ -378,6 +379,15 @@ static void acpi_processor_idle(void)
378 379
379 next_state = pr->power.state; 380 next_state = pr->power.state;
380 381
382#ifdef CONFIG_HOTPLUG_CPU
383 /* Don't do promotion/demotion */
384 if ((cx->type == ACPI_STATE_C1) && (num_online_cpus() > 1) &&
385 !pr->flags.has_cst && !acpi_fadt.plvl2_up) {
386 next_state = cx;
387 goto end;
388 }
389#endif
390
381 /* 391 /*
382 * Promotion? 392 * Promotion?
383 * ---------- 393 * ----------
@@ -549,7 +559,7 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
549 * Check for P_LVL2_UP flag before entering C2 and above on 559 * Check for P_LVL2_UP flag before entering C2 and above on
550 * an SMP system. 560 * an SMP system.
551 */ 561 */
552 if ((num_online_cpus() > 1) && acpi_fadt.plvl2_up) 562 if ((num_online_cpus() > 1) && !acpi_fadt.plvl2_up)
553 return_VALUE(-ENODEV); 563 return_VALUE(-ENODEV);
554#endif 564#endif
555 565