[RFC PATCH V6 0/4] cpuidle: Global registration of idle states with per-cpu statistics

Jean Pihet jean.pihet at newoldbits.com
Thu Sep 22 15:37:27 EDT 2011


Hi,

On Thu, Sep 22, 2011 at 10:28 AM, Deepthi Dharwar
<deepthi at linux.vnet.ibm.com> wrote:
> The following patch series implements global registration of cpuidle
> states, and also has the necessary data structure changes to
> accommodate the per-cpu writable members of the cpuidle_states
> structure.
>
> This patch series had been in discussion earlier and
> following are the links to the previous discussions.
>
> v1 --> https://lkml.org/lkml/2011/3/22/161
> v2 --> https://lkml.org/lkml/2011/1/13/98
> v3 --> https://lkml.org/lkml/2011/2/8/73
> v4 --> https://lkml.org/lkml/2011/4/28/312
> v5 --> https://lkml.org/lkml/2011/6/6/259
>
> Changes from previous version (V5):
>
>    Rebased the series to 3.1-rc7
>
> Tests done:
>
>    1. Compile tested for ARM using the following configs: da8xx_omapl_defconfig,
>    exynos4_defconfig, kirkwood_defconfig, omap2plus_defconfig,
>    at91rm9200_defconfig

Tested OK on OMAP3:
Signed-off-by: Jean Pihet <j-pihet at ti.com>

>
>    2. Boot tested on x86 nehalem with multiple C-states for both intel_idle
>    and acpi_idle drivers.
>
>    3. Boot tested on T60p thinkpad that has T2600 cpu with multiple C-states.
>    Also tested the case when there is dynamic changes in C-states
>    AC <-> Battery Power switch.
>
> Brief description of the patches:
>
> Core change in this series is to split the cpuidle_device structure
> into two parts, i.e  global and per-cpu basis.
>
> 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 on
> each cpu if needed using the cpuidle_set_statedata() as the case
> today. 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.
>
> First two patches in the series facilitate splitting of cpuidle_states
> and 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.
This is a nice improvement since OMAP heavily uses the state demotion
in the cpuidle driver, and will use it even more with the per-device
PM QoS support added.

Thanks & regards,
Jean

>
> [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.
>
>    - Ref: https://lkml.org/lkml/2011/3/25/52
>
> [3/4] - Splits the usage statistics (read/write) part out of
> cpuidle_state structure, so that the states can become read
> only and hence made global.
>
> [4/4] - Most APIs will now need to pass pointer to both global
> cpuidle_driver and per-cpu cpuidle_device structure.
>
>  arch/arm/mach-at91/cpuidle.c          |   41 +++--
>  arch/arm/mach-davinci/cpuidle.c       |   51 ++++---
>  arch/arm/mach-exynos4/cpuidle.c       |   30 ++--
>  arch/arm/mach-kirkwood/cpuidle.c      |   42 +++---
>  arch/arm/mach-omap2/cpuidle34xx.c     |  133 +++++++++++------
>  arch/sh/kernel/cpu/shmobile/cpuidle.c |   28 ++--
>  drivers/acpi/processor_driver.c       |   20 ---
>  drivers/acpi/processor_idle.c         |  251 +++++++++++++++++++++++++++------
>  drivers/cpuidle/cpuidle.c             |   86 ++++-------
>  drivers/cpuidle/driver.c              |   25 +++
>  drivers/cpuidle/governors/ladder.c    |   41 ++++-
>  drivers/cpuidle/governors/menu.c      |   29 ++--
>  drivers/cpuidle/sysfs.c               |   22 ++-
>  drivers/idle/intel_idle.c             |  130 +++++++++++++----
>  include/acpi/processor.h              |    1
>  include/linux/cpuidle.h               |   52 ++++---
>  16 files changed, 650 insertions(+), 332 deletions(-)
>
>
> --
>
> Thanks
>  -Deepthi
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>



More information about the linux-arm-kernel mailing list