diff options
author | David Shaohua Li <shaohua.li@intel.com> | 2005-12-01 17:00:00 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2005-12-05 17:00:37 -0500 |
commit | 1e483969930a82e16767884449f3a121a817ef00 (patch) | |
tree | 9d110ed1c66f71762c88cbf5d83ea35467f46a14 /drivers | |
parent | 4c0335526c95d90a1d958e0059f40a5745fc7c5d (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')
-rw-r--r-- | drivers/acpi/processor_idle.c | 20 |
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 | ||