cpuidle: Single/Global registration of idle states

This patch makes the cpuidle_states structure global (single copy)
instead of per-cpu. The statistics needed on per-cpu basis
by the governor are kept per-cpu. This simplifies the cpuidle
subsystem as state registration is done by single cpu only.
Having single copy of cpuidle_states saves memory. Rare case
of asymmetric C-states can be handled within the cpuidle driver
and architectures such as POWER do not have asymmetric C-states.

Having single/global registration of all the idle states,
dynamic C-state transitions on x86 are handled by
the boot cpu. Here, the boot cpu  would disable all the devices,
re-populate the states and later enable all the devices,
irrespective of the cpu that would receive the notification first.

Reference:
https://lkml.org/lkml/2011/4/25/83

Signed-off-by: Deepthi Dharwar <[email protected]>
Signed-off-by: Trinabh Gupta <[email protected]>
Tested-by: Jean Pihet <[email protected]>
Reviewed-by: Kevin Hilman <[email protected]>
Acked-by: Arjan van de Ven <[email protected]>
Acked-by: Kevin Hilman <[email protected]>
Signed-off-by: Len Brown <[email protected]>
This commit is contained in:
Deepthi Dharwar 2011-10-28 16:20:42 +05:30 • committed by Len Brown
commit 46bcfad7a8
16 changed files with 439 additions and 207 deletions

View file

@ -329,6 +329,7 @@ extern void acpi_processor_throttling_init(void);
int acpi_processor_power_init(struct acpi_processor *pr,
struct acpi_device *device);
int acpi_processor_cst_has_changed(struct acpi_processor *pr);
int acpi_processor_hotplug(struct acpi_processor *pr);
int acpi_processor_power_exit(struct acpi_processor *pr,
struct acpi_device *device);
int acpi_processor_suspend(struct acpi_device * device, pm_message_t state);