aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/processor_throttling.c
diff options
context:
space:
mode:
authorZhao Yakui <yakui.zhao@intel.com>2011-01-10 03:35:45 -0500
committerLen Brown <len.brown@intel.com>2011-01-10 12:35:28 -0500
commit5a344a505093dd65f82f338ffdb7208321b3630e (patch)
tree398d26e9108e54537be840e658cbe7972a810fb4 /drivers/acpi/processor_throttling.c
parentdaef1f35ea1e2cca125eecd5f078f40b55eb9105 (diff)
ACPI: Reevaluate whether the T-state is supported or not after cpu is online/offline
After one CPU is offlined, it is unnecessary to switch T-state for it. So it will be better that the throttling is disabled after the cpu is offline. At the same time after one cpu is online, we should check whether the T-state is supported and then set the corresponding T-state flag. Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/processor_throttling.c')
-rw-r--r--drivers/acpi/processor_throttling.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/drivers/acpi/processor_throttling.c b/drivers/acpi/processor_throttling.c
index ffc859c61393..4305d560b065 100644
--- a/drivers/acpi/processor_throttling.c
+++ b/drivers/acpi/processor_throttling.c
@@ -370,6 +370,58 @@ int acpi_processor_tstate_has_changed(struct acpi_processor *pr)
370} 370}
371 371
372/* 372/*
373 * This function is used to reevaluate whether the T-state is valid
374 * after one CPU is onlined/offlined.
375 * It is noted that it won't reevaluate the following properties for
376 * the T-state.
377 * 1. Control method.
378 * 2. the number of supported T-state
379 * 3. TSD domain
380 */
381void acpi_processor_reevaluate_tstate(struct acpi_processor *pr,
382 unsigned long action)
383{
384 int result = 0;
385
386 if (action == CPU_DEAD) {
387 /* When one CPU is offline, the T-state throttling
388 * will be invalidated.
389 */
390 pr->flags.throttling = 0;
391 return;
392 }
393 /* the following is to recheck whether the T-state is valid for
394 * the online CPU
395 */
396 if (!pr->throttling.state_count) {
397 /* If the number of T-state is invalid, it is
398 * invalidated.
399 */
400 pr->flags.throttling = 0;
401 return;
402 }
403 pr->flags.throttling = 1;
404
405 /* Disable throttling (if enabled). We'll let subsequent
406 * policy (e.g.thermal) decide to lower performance if it
407 * so chooses, but for now we'll crank up the speed.
408 */
409
410 result = acpi_processor_get_throttling(pr);
411 if (result)
412 goto end;
413
414 if (pr->throttling.state) {
415 result = acpi_processor_set_throttling(pr, 0, false);
416 if (result)
417 goto end;
418 }
419
420end:
421 if (result)
422 pr->flags.throttling = 0;
423}
424/*
373 * _PTC - Processor Throttling Control (and status) register location 425 * _PTC - Processor Throttling Control (and status) register location
374 */ 426 */
375static int acpi_processor_get_throttling_control(struct acpi_processor *pr) 427static int acpi_processor_get_throttling_control(struct acpi_processor *pr)