[PATCH 00/18] cpuidle: code consolidation
Daniel Lezcano
daniel.lezcano at linaro.org
Wed Apr 10 16:01:30 EDT 2013
On 04/10/2013 09:12 PM, Rafael J. Wysocki wrote:
> On Wednesday, April 10, 2013 04:22:05 PM Daniel Lezcano wrote:
>> This patchset series provide some code consolidation across the different
>> cpuidle drivers. It contains two parts, the first one is the removal of
>> the time keeping flag and the second one, is a common initialization routine.
>>
>> All the drivers use the en_core_tk_irqen flag, which means it is not necessary
>> to make the time computation optional. We can remove this flag and assume the
>> cpuidle framework always manage this operation.
>>
>> The cpuidle code initialization is duplicated across the different drivers in
>> the same manner.
>>
>> The repeating pattern is:
>>
>> SMP:
>>
>> cpuidle_register_driver(drv);
>> for_each_possible_cpu(cpu) {
>> dev = per_cpu(cpuidle_device, cpu);
>> cpuidle_register_device(dev);
>> }
>>
>> UP:
>>
>> cpuidle_register_driver(drv);
>> cpuidle_register_device(dev);
>>
>> As on a UP machine the macro 'for_each_cpu' is a one iteration loop, using the
>> initialization loop from SMP to UP works.
>>
>> The patchset does some cleanup for different drivers in order to make the init
>> code the same. Then it introduces a generic function:
>>
>> cpuidle_register(struct cpuidle_driver *drv, struct cpumask *cpumask)
>>
>> The cpumask is for the coupled idle states.
>>
>> The drivers are then modified to take into account this new function and
>> to remove the duplicated code.
>>
>> The benefit is observable in the diffstat: 332 lines of code removed.
>>
>> Tested-on: u8500
>> Tested-on: at91
>> Tested-on: intel i5
>> Tested-on: OMAP4
>>
>> Compiled with and without CPU_IDLE for:
>> u8500, at91, davinci, exynos, imx5, imx6, kirkwood, multi_v7 (for calxeda),
>> omap2plus, s3c64, tegra1, tegra2, tegra3
>>
>>
>> Daniel Lezcano (18):
>> ARM: OMAP3: remove cpuidle_wrap_enter
>> cpuidle: remove en_core_tk_irqen flag
>> ARM: ux500: cpuidle: replace for_each_online_cpu by
>> for_each_possible_cpu
>> ARM: imx: cpuidle: create separate drivers for imx5/imx6
>> cpuidle: make a single register function for all
>> ARM: ux500: cpuidle: use init/exit common routine
>> ARM: at91: cpuidle: use init/exit common routine
>> ARM: OMAP3: cpuidle: use init/exit common routine
>> ARM: s3c64xx: cpuidle: use init/exit common routine
>> ARM: tegra1: cpuidle: use init/exit common routine
>> ARM: shmobile: cpuidle: use init/exit common routine
>> ARM: OMAP4: cpuidle: use init/exit common routine
>> ARM: tegra2: cpuidle: use init/exit common routine
>> ARM: tegra3: cpuidle: use init/exit common routine
>> ARM: calxeda: cpuidle: use init/exit common routine
>> ARM: kirkwood: cpuidle: use init/exit common routine
>> ARM: davinci: cpuidle: use init/exit common routine
>> ARM: imx: cpuidle: use init/exit common routine
>>
>> arch/arm/mach-at91/cpuidle.c | 18 +--
>> arch/arm/mach-davinci/cpuidle.c | 21 +---
>> arch/arm/mach-exynos/cpuidle.c | 1 -
>> arch/arm/mach-imx/Makefile | 1 +
>> arch/arm/mach-imx/cpuidle-imx5.c | 40 +++++++
>> arch/arm/mach-imx/cpuidle-imx6q.c | 3 +-
>> arch/arm/mach-imx/cpuidle.c | 80 -------------
>> arch/arm/mach-imx/cpuidle.h | 10 +-
>> arch/arm/mach-imx/pm-imx5.c | 30 +----
>> arch/arm/mach-omap2/cpuidle34xx.c | 49 ++------
>> arch/arm/mach-omap2/cpuidle44xx.c | 23 +---
>> arch/arm/mach-s3c64xx/cpuidle.c | 15 +--
>> arch/arm/mach-shmobile/cpuidle.c | 11 +-
>> arch/arm/mach-shmobile/pm-sh7372.c | 1 -
>> arch/arm/mach-tegra/cpuidle-tegra114.c | 27 +----
>> arch/arm/mach-tegra/cpuidle-tegra20.c | 34 +-----
>> arch/arm/mach-tegra/cpuidle-tegra30.c | 28 +----
>> arch/arm/mach-ux500/cpuidle.c | 33 +-----
>> arch/powerpc/platforms/pseries/processor_idle.c | 1 -
>> arch/sh/kernel/cpu/shmobile/cpuidle.c | 1 -
>> arch/x86/kernel/apm_32.c | 1 -
>> drivers/acpi/processor_idle.c | 1 -
>> drivers/cpuidle/cpuidle-calxeda.c | 53 +--------
>> drivers/cpuidle/cpuidle-kirkwood.c | 18 +--
>> drivers/cpuidle/cpuidle.c | 137 ++++++++++++++---------
>> drivers/idle/intel_idle.c | 1 -
>> include/linux/cpuidle.h | 20 ++--
>> 27 files changed, 162 insertions(+), 496 deletions(-)
>> create mode 100644 arch/arm/mach-imx/cpuidle-imx5.c
>> delete mode 100644 arch/arm/mach-imx/cpuidle.c
>
> I will be traveling from Saturday onwards pretty much until the beginning of
> the 3.10 merge window, so I'm afraid this will have to wait for the next
> release cycle. At least I'm not going to take patches that haven't been
> ACKed before tomorrow evening (CEST).
Ok, thanks for the heads-up.
-- Daniel
--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
More information about the linux-arm-kernel
mailing list