The core change in this series is to split the cpuidle_device structure into parts that can be global and parts that has to remain per-cpu. The per-cpu pieces are mostly generic statistics that can be independent of current running driver. As a result of these changes, there is single copy of cpuidle_states structure and single registration done by one cpu. The low level driver is free to set per-cpu driver data oneach cpu if needed using the cpuidle_set_statedata() as the casetoday. Only in very rare cases asymmetric C-states exist which can be handled within the cpuidle driver. Most architectures do not have asymmetric C-states.

This patch series along with Len Brown's pm_idle() cleanup (ref:https://lkml.org/lkml/2011/4/2/8) will simplify the cpuidle framework and make it easy to port to other architectures like POWER.

First two patches in the series facilitate splitting of cpuidle_statesand cpuidle_device structure and next two patches do the actual split,change the API's and make existing code follow the changed API.

[1/4] - Move the idle residency accounting part from cpuidle.c to the respective low level drivers, so that the accounting can be accurately maintained if the driver decides to demote the chosen (suggested) by the governor.

[2/4] - removes the cpuidle_device()->prepare API since is is not widely used and the only use case was to allow software demotion using CPUIDLE_FLAG_IGNORE flag. Both these functions can be absorbed within the cpuidle back-end driver ad hence deprecating the prepare routine and the CPUIDLE_FLAG_IGNORE flag.

2. Made ladder governor follow new changed API. Thus both menu and ladder governors work with these changes.

This patch series applies on top of 2.6.39-rc2 and is tested on x86 Nehalem system with multiple ACPI C-States with both acpi_idle and intel_idlecpuidle drivers. Note that this code is not tested for arm yet.