29 Nov, 2019

1 commit


30 Jul, 2019

2 commits

  • The cpuidle_haltpoll governor, in conjunction with the haltpoll cpuidle
    driver, allows guest vcpus to poll for a specified amount of time before
    halting.
    This provides the following benefits to host side polling:

    1) The POLL flag is set while polling is performed, which allows
    a remote vCPU to avoid sending an IPI (and the associated
    cost of handling the IPI) when performing a wakeup.

    2) The VM-exit cost can be avoided.

    The downside of guest side polling is that polling is performed
    even with other runnable tasks in the host.

    Results comparing halt_poll_ns and server/client application
    where a small packet is ping-ponged:

    host --> 31.33
    halt_poll_ns=300000 / no guest busy spin --> 33.40 (93.8%)
    halt_poll_ns=0 / guest_halt_poll_ns=300000 --> 32.73 (95.7%)

    For the SAP HANA benchmarks (where idle_spin is a parameter
    of the previous version of the patch, results should be the
    same):

    hpns == halt_poll_ns

    idle_spin=0/ idle_spin=800/ idle_spin=0/
    hpns=200000 hpns=0 hpns=800000
    DeleteC06T03 (100 thread) 1.76 1.71 (-3%) 1.78 (+1%)
    InsertC16T02 (100 thread) 2.14 2.07 (-3%) 2.18 (+1.8%)
    DeleteC00T01 (1 thread) 1.34 1.28 (-4.5%) 1.29 (-3.7%)
    UpdateC00T03 (1 thread) 4.72 4.18 (-12%) 4.53 (-5%)

    Signed-off-by: Marcelo Tosatti
    Signed-off-by: Rafael J. Wysocki

    Marcelo Tosatti
     
  • Add a cpuidle driver that calls the architecture default_idle routine.

    To be used in conjunction with the haltpoll governor.

    Signed-off-by: Marcelo Tosatti
    Signed-off-by: Rafael J. Wysocki

    Marcelo Tosatti
     

21 May, 2019

1 commit


17 Jan, 2019

1 commit

  • The venerable menu governor does some things that are quite
    questionable in my view.

    First, it includes timer wakeups in the pattern detection data and
    mixes them up with wakeups from other sources which in some cases
    causes it to expect what essentially would be a timer wakeup in a
    time frame in which no timer wakeups are possible (because it knows
    the time until the next timer event and that is later than the
    expected wakeup time).

    Second, it uses the extra exit latency limit based on the predicted
    idle duration and depending on the number of tasks waiting on I/O,
    even though those tasks may run on a different CPU when they are
    woken up. Moreover, the time ranges used by it for the sleep length
    correction factors depend on whether or not there are tasks waiting
    on I/O, which again doesn't imply anything in particular, and they
    are not correlated to the list of available idle states in any way
    whatever.

    Also, the pattern detection code in menu may end up considering
    values that are too large to matter at all, in which cases running
    it is a waste of time.

    A major rework of the menu governor would be required to address
    these issues and the performance of at least some workloads (tuned
    specifically to the current behavior of the menu governor) is likely
    to suffer from that. It is thus better to introduce an entirely new
    governor without them and let everybody use the governor that works
    better with their actual workloads.

    The new governor introduced here, the timer events oriented (TEO)
    governor, uses the same basic strategy as menu: it always tries to
    find the deepest idle state that can be used in the given conditions.
    However, it applies a different approach to that problem.

    First, it doesn't use "correction factors" for the time till the
    closest timer, but instead it tries to correlate the measured idle
    duration values with the available idle states and use that
    information to pick up the idle state that is most likely to "match"
    the upcoming CPU idle interval.

    Second, it doesn't take the number of "I/O waiters" into account at
    all and the pattern detection code in it avoids taking timer wakeups
    into account. It also only uses idle duration values less than the
    current time till the closest timer (with the tick excluded) for that
    purpose.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Daniel Lezcano

    Rafael J. Wysocki
     

16 Jan, 2016

1 commit

  • Since commit d6f346f2d2 (cpuidle: improve governor Kconfig options)
    the best cpuidle governor is selected automatically. There is little
    point in additionally selecting the other one as it will not be used,
    so don't select both governors by default.

    Being able to select more than one governor is still good for
    developers booting with cpuidle_sysfs_switch, though.

    This fixes the second half of kernel BZ #65531.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=65531
    Signed-off-by: Jean Delvare
    Signed-off-by: Rafael J. Wysocki

    Jean Delvare
     

24 Mar, 2015

1 commit


25 Sep, 2014

2 commits

  • This patch implements a generic CPU idle driver for ARM64 machines.

    It relies on the DT idle states infrastructure to initialize idle
    states count and respective parameters. Current code assumes the driver
    is managing idle states on all possible CPUs but can be easily
    generalized to support heterogenous systems and build cpumasks at
    runtime using MIDRs or DT cpu nodes compatible properties.

    The driver relies on the arm64 CPU operations to call the idle
    initialization hook used to parse and save suspend back-end specific
    idle states information upon probing.

    Idle state index 0 is always initialized as a simple wfi state, ie always
    considered present and functional on all ARM64 platforms.

    Idle state indices higher than 0 trigger idle state entry by calling
    the cpu_suspend function, that triggers the suspend operation through
    the CPU operations suspend back-end hook. cpu_suspend passes the idle
    state index as a parameter so that the CPU operations suspend back-end
    can retrieve the required idle state data by using the idle state
    index to execute a look-up on its internal data structures.

    Reviewed-by: Ashwin Chaugule
    Reviewed-by: Catalin Marinas
    Signed-off-by: Lorenzo Pieralisi
    Signed-off-by: Daniel Lezcano

    Lorenzo Pieralisi
     
  • On most common ARM systems, the low-power states a CPU can be put into are
    not discoverable in HW and require device tree bindings to describe
    power down suspend operations and idle states parameters.

    In order to enable DT based idle states and configure idle drivers, this
    patch implements the bulk infrastructure required to parse the device tree
    idle states bindings and initialize the corresponding CPUidle driver states
    data.

    The parsing API accepts a start index that defines the first idle state
    that should be initialized by the parsing code in order to give new and
    legacy driver flexibility over which states should be parsed using the
    new DT mechanism.

    The idle states node(s) is obtained from the phandle list of the first cpu
    in the driver cpumask; the kernel checks that the idle state node phandle
    is the same for all CPUs in the driver cpumask before declaring the idle state
    as valid and start parsing its content.

    The idle state enter function pointer is initialized through DT match
    structures passed in by the CPUidle driver, so that ARM legacy code can
    cope with platform specific idle entry method based on compatible
    string matching and the code used to initialize the enter function pointer
    can be moved to the DT generic layer.

    Acked-by: Catalin Marinas
    Acked-by: Daniel Lezcano
    Signed-off-by: Lorenzo Pieralisi
    Signed-off-by: Daniel Lezcano

    Lorenzo Pieralisi
     

29 Jul, 2014

1 commit


28 May, 2014

1 commit

  • This patch adds a cpuidle driver for systems based around the MIPS
    Coherent Processing System (CPS) architecture. It supports four idle
    states:

    - The standard MIPS wait instruction.

    - The non-coherent wait, clock gated & power gated states exposed by
    the recently added pm-cps layer.

    The pm-cps layer is used to enter all the deep idle states. Since cores
    in the clock or power gated states cannot service interrupts, the
    gic_send_ipi_single function is modified to send a power up command for
    the appropriate core to the CPC in cases where the target CPU has marked
    itself potentially incoherent.

    Signed-off-by: Paul Burton

    Paul Burton
     

29 Jan, 2014

1 commit


27 Jul, 2013

1 commit


04 Jul, 2013

1 commit

  • Pull power management and ACPI updates from Rafael Wysocki:
    "This time the total number of ACPI commits is slightly greater than
    the number of cpufreq commits, but Viresh Kumar (who works on cpufreq)
    remains the most active patch submitter.

    To me, the most significant change is the addition of offline/online
    device operations to the driver core (with the Greg's blessing) and
    the related modifications of the ACPI core hotplug code. Next are the
    freezer updates from Colin Cross that should make the freezing of
    tasks a bit less heavy weight.

    We also have a couple of regression fixes, a number of fixes for
    issues that have not been identified as regressions, two new drivers
    and a bunch of cleanups all over.

    Highlights:

    - Hotplug changes to support graceful hot-removal failures.

    It sometimes is necessary to fail device hot-removal operations
    gracefully if they cannot be carried out completely. For example,
    if memory from a memory module being hot-removed has been allocated
    for the kernel's own use and cannot be moved elsewhere, it's
    desirable to fail the hot-removal operation in a graceful way
    rather than to crash the kernel, but currenty a success or a kernel
    crash are the only possible outcomes of an attempted memory
    hot-removal. Needless to say, that is not a very attractive
    alternative and it had to be addressed.

    However, in order to make it work for memory, I first had to make
    it work for CPUs and for this purpose I needed to modify the ACPI
    processor driver. It's been split into two parts, a resident one
    handling the low-level initialization/cleanup and a modular one
    playing the actual driver's role (but it binds to the CPU system
    device objects rather than to the ACPI device objects representing
    processors). That's been sort of like a live brain surgery on a
    patient who's riding a bike.

    So this is a little scary, but since we found and fixed a couple of
    regressions it caused to happen during the early linux-next testing
    (a month ago), nobody has complained.

    As a bonus we remove some duplicated ACPI hotplug code, because the
    ACPI-based CPU hotplug is now going to use the common ACPI hotplug
    code.

    - Lighter weight freezing of tasks.

    These changes from Colin Cross and Mandeep Singh Baines are
    targeted at making the freezing of tasks a bit less heavy weight
    operation. They reduce the number of tasks woken up every time
    during the freezing, by using the observation that the freezer
    simply doesn't need to wake up some of them and wait for them all
    to call refrigerator(). The time needed for the freezer to decide
    to report a failure is reduced too.

    Also reintroduced is the check causing a lockdep warining to
    trigger when try_to_freeze() is called with locks held (which is
    generally unsafe and shouldn't happen).

    - cpufreq updates

    First off, a commit from Srivatsa S Bhat fixes a resume regression
    introduced during the 3.10 cycle causing some cpufreq sysfs
    attributes to return wrong values to user space after resume. The
    fix is kind of fresh, but also it's pretty obvious once Srivatsa
    has identified the root cause.

    Second, we have a new freqdomain_cpus sysfs attribute for the
    acpi-cpufreq driver to provide information previously available via
    related_cpus. From Lan Tianyu.

    Finally, we fix a number of issues, mostly related to the
    CPUFREQ_POSTCHANGE notifier and cpufreq Kconfig options and clean
    up some code. The majority of changes from Viresh Kumar with bits
    from Jacob Shin, Heiko Stübner, Xiaoguang Chen, Ezequiel Garcia,
    Arnd Bergmann, and Tang Yuantian.

    - ACPICA update

    A usual bunch of updates from the ACPICA upstream.

    During the 3.4 cycle we introduced support for ACPI 5 extended
    sleep registers, but they are only supposed to be used if the
    HW-reduced mode bit is set in the FADT flags and the code attempted
    to use them without checking that bit. That caused suspend/resume
    regressions to happen on some systems. Fix from Lv Zheng causes
    those registers to be used only if the HW-reduced mode bit is set.

    Apart from this some other ACPICA bugs are fixed and code cleanups
    are made by Bob Moore, Tomasz Nowicki, Lv Zheng, Chao Guan, and
    Zhang Rui.

    - cpuidle updates

    New driver for Xilinx Zynq processors is added by Michal Simek.

    Multidriver support simplification, addition of some missing
    kerneldoc comments and Kconfig-related fixes come from Daniel
    Lezcano.

    - ACPI power management updates

    Changes to make suspend/resume work correctly in Xen guests from
    Konrad Rzeszutek Wilk, sparse warning fix from Fengguang Wu and
    cleanups and fixes of the ACPI device power state selection
    routine.

    - ACPI documentation updates

    Some previously missing pieces of ACPI documentation are added by
    Lv Zheng and Aaron Lu (hopefully, that will help people to
    uderstand how the ACPI subsystem works) and one outdated doc is
    updated by Hanjun Guo.

    - Assorted ACPI updates

    We finally nailed down the IA-64 issue that was the reason for
    reverting commit 9f29ab11ddbf ("ACPI / scan: do not match drivers
    against objects having scan handlers"), so we can fix it and move
    the ACPI scan handler check added to the ACPI video driver back to
    the core.

    A mechanism for adding CMOS RTC address space handlers is
    introduced by Lan Tianyu to allow some EC-related breakage to be
    fixed on some systems.

    A spec-compliant implementation of acpi_os_get_timer() is added by
    Mika Westerberg.

    The evaluation of _STA is added to do_acpi_find_child() to avoid
    situations in which a pointer to a disabled device object is
    returned instead of an enabled one with the same _ADR value. From
    Jeff Wu.

    Intel BayTrail PCH (Platform Controller Hub) support is added to
    the ACPI driver for Intel Low-Power Subsystems (LPSS) and that
    driver is modified to work around a couple of known BIOS issues.
    Changes from Mika Westerberg and Heikki Krogerus.

    The EC driver is fixed by Vasiliy Kulikov to use get_user() and
    put_user() instead of dereferencing user space pointers blindly.

    Code cleanups are made by Bjorn Helgaas, Nicholas Mazzuca and Toshi
    Kani.

    - Assorted power management updates

    The "runtime idle" helper routine is changed to take the return
    values of the callbacks executed by it into account and to call
    rpm_suspend() if they return 0, which allows us to reduce the
    overall code bloat a bit (by dropping some code that's not
    necessary any more after that modification).

    The runtime PM documentation is updated by Alan Stern (to reflect
    the "runtime idle" behavior change).

    New trace points for PM QoS are added by Sahara
    ().

    PM QoS documentation is updated by Lan Tianyu.

    Code cleanups are made and minor issues are addressed by Bernie
    Thompson, Bjorn Helgaas, Julius Werner, and Shuah Khan.

    - devfreq updates

    New driver for the Exynos5-bus device from Abhilash Kesavan.

    Minor cleanups, fixes and MAINTAINERS update from MyungJoo Ham,
    Abhilash Kesavan, Paul Bolle, Rajagopal Venkat, and Wei Yongjun.

    - OMAP power management updates

    Adaptive Voltage Scaling (AVS) SmartReflex voltage control driver
    updates from Andrii Tseglytskyi and Nishanth Menon."

    * tag 'pm+acpi-3.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (162 commits)
    cpufreq: Fix cpufreq regression after suspend/resume
    ACPI / PM: Fix possible NULL pointer deref in acpi_pm_device_sleep_state()
    PM / Sleep: Warn about system time after resume with pm_trace
    cpufreq: don't leave stale policy pointer in cdbs->cur_policy
    acpi-cpufreq: Add new sysfs attribute freqdomain_cpus
    cpufreq: make sure frequency transitions are serialized
    ACPI: implement acpi_os_get_timer() according the spec
    ACPI / EC: Add HP Folio 13 to ec_dmi_table in order to skip DSDT scan
    ACPI: Add CMOS RTC Operation Region handler support
    ACPI / processor: Drop unused variable from processor_perflib.c
    cpufreq: tegra: call CPUFREQ_POSTCHANGE notfier in error cases
    cpufreq: s3c64xx: call CPUFREQ_POSTCHANGE notfier in error cases
    cpufreq: omap: call CPUFREQ_POSTCHANGE notfier in error cases
    cpufreq: imx6q: call CPUFREQ_POSTCHANGE notfier in error cases
    cpufreq: exynos: call CPUFREQ_POSTCHANGE notfier in error cases
    cpufreq: dbx500: call CPUFREQ_POSTCHANGE notfier in error cases
    cpufreq: davinci: call CPUFREQ_POSTCHANGE notfier in error cases
    cpufreq: arm-big-little: call CPUFREQ_POSTCHANGE notfier in error cases
    cpufreq: powernow-k8: call CPUFREQ_POSTCHANGE notfier in error cases
    cpufreq: pcc: call CPUFREQ_POSTCHANGE notfier in error cases
    ...

    Linus Torvalds
     

24 Jun, 2013

1 commit

  • Like other ARM specific drivers, this one requires ARM_CPU_SUSPEND,
    as shown by this linker error:

    drivers/built-in.o: In function `calxeda_pwrdown_idle':
    drivers/cpuidle/cpuidle-calxeda.c:84: undefined reference to `cpu_suspend'
    drivers/cpuidle/cpuidle-calxeda.c:86: undefined reference to `cpu_resume'

    Signed-off-by: Arnd Bergmann
    Acked-by: Rafael J. Wysocki
    Acked-by: Rob Herring
    Acked-by: Daniel Lezcano
    Cc: linux-pm@vger.kernel.org

    Arnd Bergmann
     

11 Jun, 2013

1 commit

  • Before commit d6f346f (cpuidle: improve governor Kconfig options),
    the CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED option didn't depend on
    CONFIG_CPU_IDLE but now it has been moved under the CPU_IDLE
    menuconfig.

    That raises the following warnings:

    warning: (ARCH_OMAP4 && ARCH_TEGRA_2x_SOC) selects ARCH_NEEDS_CPU_IDLE_COUPLED
    which has unmet direct dependencies (CPU_IDLE)
    warning: (ARCH_OMAP4 && ARCH_TEGRA_2x_SOC) selects ARCH_NEEDS_CPU_IDLE_COUPLED
    which has unmet direct dependencies (CPU_IDLE)

    because the tegra2 and omap4 Kconfig files select this option
    without checking if CPU_IDLE is set.

    Fix that by moving ARCH_NEEDS_CPU_IDLE_COUPLED outside of CPU_IDLE.

    [rjw: Changelog]
    Signed-off-by: Daniel Lezcano
    Signed-off-by: Rafael J. Wysocki

    Daniel Lezcano
     

05 Jun, 2013

1 commit


04 Jun, 2013

1 commit

  • Each governor is suitable for different kernel configurations: the menu
    governor suits better for a tickless system, while the ladder governor fits
    better for a periodic timer tick system.

    The Kconfig does not allow to [un]select a governor, thus both are compiled in
    the kernel but the init order makes the menu governor to be the last one to be
    registered, so becoming the default. The only way to switch back to the ladder
    governor is to enable the sysfs governor switch in the kernel command line.

    Because it seems nobody complained about this, the menu governor is used by
    default most of the time on the system, having both governors is not really
    necessary on a tickless system but there isn't a config option to disable one
    or another governor.

    Create a submenu for cpuidle and add a label for each governor, so we can see
    the option in the menu config and enable/disable it.

    The governors will be enabled depending on the CONFIG_NO_HZ option:
    - If CONFIG_NO_HZ is set, then the menu governor is selected and the ladder
    governor is optional, defaulting to 'yes'
    - If CONFIG_NO_HZ is not set, then the ladder governor is selected and the
    menu governor is optional, defaulting to 'yes'

    Signed-off-by: Daniel Lezcano
    Signed-off-by: Rafael J. Wysocki

    Daniel Lezcano
     

01 Apr, 2013

1 commit

  • When the CPU_IDLE and the ARCH_KIRKWOOD options are set it is
    pointless to define a new option CPU_IDLE_KIRKWOOD because it
    is redundant.

    The Makefile drivers directory contains a condition to compile
    the cpuidle drivers:

    obj-$(CONFIG_CPU_IDLE) += cpuidle/

    Hence, if CPU_IDLE is not set we won't enter this directory.

    This patch removes the useless Kconfig option and replaces the
    condition in the Makefile by CONFIG_ARCH_KIRKWOOD.

    Signed-off-by: Daniel Lezcano
    Acked-by: Jason Cooper
    Signed-off-by: Rafael J. Wysocki

    Daniel Lezcano
     

01 Feb, 2013

1 commit


13 Dec, 2012

1 commit

  • Pull ARM SoC updates from Olof Johansson:
    "This contains the bulk of new SoC development for this merge window.

    Two new platforms have been added, the sunxi platforms (Allwinner A1x
    SoCs) by Maxime Ripard, and a generic Broadcom platform for a new
    series of ARMv7 platforms from them, where the hope is that we can
    keep the platform code generic enough to have them all share one mach
    directory. The new Broadcom platform is contributed by Christian
    Daudt.

    Highbank has grown support for Calxeda's next generation of hardware,
    ECX-2000.

    clps711x has seen a lot of cleanup from Alexander Shiyan, and he's
    also taken on maintainership of the platform.

    Beyond this there has been a bunch of work from a number of people on
    converting more platforms to IRQ domains, pinctrl conversion, cleanup
    and general feature enablement across most of the active platforms."

    Fix up trivial conflicts as per Olof.

    * tag 'soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (174 commits)
    mfd: vexpress-sysreg: Remove LEDs code
    irqchip: irq-sunxi: Add terminating entry for sunxi_irq_dt_ids
    clocksource: sunxi_timer: Add terminating entry for sunxi_timer_dt_ids
    irq: versatile: delete dangling variable
    ARM: sunxi: add missing include for mdelay()
    ARM: EXYNOS: Avoid early use of of_machine_is_compatible()
    ARM: dts: add node for PL330 MDMA1 controller for exynos4
    ARM: EXYNOS: Add support for secondary CPU bring-up on Exynos4412
    ARM: EXYNOS: add UART3 to DEBUG_LL ports
    ARM: S3C24XX: Add clkdev entry for camif-upll clock
    ARM: SAMSUNG: Add s3c24xx/s3c64xx CAMIF GPIO setup helpers
    ARM: sunxi: Add missing sun4i.dtsi file
    pinctrl: samsung: Do not initialise statics to 0
    ARM i.MX6: remove gate_mask from pllv3
    ARM i.MX6: Fix ethernet PLL clocks
    ARM i.MX6: rename PLLs according to datasheet
    ARM i.MX6: Add pwm support
    ARM i.MX51: Add pwm support
    ARM i.MX53: Add pwm support
    ARM: mx5: Replace clk_register_clkdev with clock DT lookup
    ...

    Linus Torvalds
     

15 Nov, 2012

1 commit

  • With the tegra3 and the big.LITTLE [1] new architectures, several cpus
    with different characteristics (latencies and states) can co-exists on the
    system.

    The cpuidle framework has the limitation of handling only identical cpus.

    This patch removes this limitation by introducing the multiple driver support
    for cpuidle.

    This option is configurable at compile time and should be enabled for the
    architectures mentioned above. So there is no impact for the other platforms
    if the option is disabled. The option defaults to 'n'. Note the multiple drivers
    support is also compatible with the existing drivers, even if just one driver is
    needed, all the cpu will be tied to this driver using an extra small chunk of
    processor memory.

    The multiple driver support use a per-cpu driver pointer instead of a global
    variable and the accessor to this variable are done from a cpu context.

    In order to keep the compatibility with the existing drivers, the function
    'cpuidle_register_driver' and 'cpuidle_unregister_driver' will register
    the specified driver for all the cpus.

    The semantic for the output of /sys/devices/system/cpu/cpuidle/current_driver
    remains the same except the driver name will be related to the current cpu.

    The /sys/devices/system/cpu/cpu[0-9]/cpuidle/driver/name files are added
    allowing to read the per cpu driver name.

    [1] http://lwn.net/Articles/481055/

    Signed-off-by: Daniel Lezcano
    Acked-by: Peter De Schrijver
    Signed-off-by: Rafael J. Wysocki

    Daniel Lezcano
     

08 Nov, 2012

1 commit


02 Jun, 2012

1 commit

  • On some ARM SMP SoCs (OMAP4460, Tegra 2, and probably more), the
    cpus cannot be independently powered down, either due to
    sequencing restrictions (on Tegra 2, cpu 0 must be the last to
    power down), or due to HW bugs (on OMAP4460, a cpu powering up
    will corrupt the gic state unless the other cpu runs a work
    around). Each cpu has a power state that it can enter without
    coordinating with the other cpu (usually Wait For Interrupt, or
    WFI), and one or more "coupled" power states that affect blocks
    shared between the cpus (L2 cache, interrupt controller, and
    sometimes the whole SoC). Entering a coupled power state must
    be tightly controlled on both cpus.

    The easiest solution to implementing coupled cpu power states is
    to hotplug all but one cpu whenever possible, usually using a
    cpufreq governor that looks at cpu load to determine when to
    enable the secondary cpus. This causes problems, as hotplug is an
    expensive operation, so the number of hotplug transitions must be
    minimized, leading to very slow response to loads, often on the
    order of seconds.

    This file implements an alternative solution, where each cpu will
    wait in the WFI state until all cpus are ready to enter a coupled
    state, at which point the coupled state function will be called
    on all cpus at approximately the same time.

    Once all cpus are ready to enter idle, they are woken by an smp
    cross call. At this point, there is a chance that one of the
    cpus will find work to do, and choose not to enter idle. A
    final pass is needed to guarantee that all cpus will call the
    power state enter function at the same time. During this pass,
    each cpu will increment the ready counter, and continue once the
    ready counter matches the number of online coupled cpus. If any
    cpu exits idle, the other cpus will decrement their counter and
    retry.

    To use coupled cpuidle states, a cpuidle driver must:

    Set struct cpuidle_device.coupled_cpus to the mask of all
    coupled cpus, usually the same as cpu_possible_mask if all cpus
    are part of the same cluster. The coupled_cpus mask must be
    set in the struct cpuidle_device for each cpu.

    Set struct cpuidle_device.safe_state to a state that is not a
    coupled state. This is usually WFI.

    Set CPUIDLE_FLAG_COUPLED in struct cpuidle_state.flags for each
    state that affects multiple cpus.

    Provide a struct cpuidle_state.enter function for each state
    that affects multiple cpus. This function is guaranteed to be
    called on all cpus at approximately the same time. The driver
    should ensure that the cpus all abort together if any cpu tries
    to abort once the function is called.

    update1:

    cpuidle: coupled: fix count of online cpus

    online_count was never incremented on boot, and was also counting
    cpus that were not part of the coupled set. Fix both issues by
    introducting a new function that counts online coupled cpus, and
    call it from register as well as the hotplug notifier.

    update2:

    cpuidle: coupled: fix decrementing ready count

    cpuidle_coupled_set_not_ready sometimes refuses to decrement the
    ready count in order to prevent a race condition. This makes it
    unsuitable for use when finished with idle. Add a new function
    cpuidle_coupled_set_done that decrements both the ready count and
    waiting count, and call it after idle is complete.

    Cc: Amit Kucheria
    Cc: Arjan van de Ven
    Cc: Trinabh Gupta
    Cc: Deepthi Dharwar
    Reviewed-by: Santosh Shilimkar
    Tested-by: Santosh Shilimkar
    Reviewed-by: Kevin Hilman
    Tested-by: Kevin Hilman
    Signed-off-by: Colin Cross
    Acked-by: Rafael J. Wysocki
    Signed-off-by: Len Brown

    Colin Cross
     

22 Feb, 2012

1 commit


20 Nov, 2007

1 commit


10 Oct, 2007

1 commit

  • commit e5a16b1f9eec0af7cfa0830304b41c1c0833cf9f
    Author: Len Brown
    Date: Tue Oct 2 23:44:44 2007 -0400

    cpuidle: shrink diff

    processor_idle.c | 440 +++++++++++++++++++++++++++++++++++++++++--
    1 file changed, 429 insertions(+), 11 deletions(-)

    Signed-off-by: Len Brown

    commit dfbb9d5aedfb18848a3e0d6f6e3e4969febb209c
    Author: Len Brown
    Date: Wed Sep 26 02:17:55 2007 -0400

    cpuidle: reduce diff size

    Reduces the cpuidle processor_idle.c diff vs 2.6.22 from this
    processor_idle.c | 2006 ++++++++++++++++++++++++++-----------------
    1 file changed, 1219 insertions(+), 787 deletions(-)

    to this:
    processor_idle.c | 502 +++++++++++++++++++++++++++++++++++++++----
    1 file changed, 458 insertions(+), 44 deletions(-)

    ...for the purpose of making the cpuilde patch less invasive
    and easier to review.

    no functional changes. build tested only.

    Signed-off-by: Len Brown

    commit 889172fc915f5a7fe20f35b133cbd205ce69bf6c
    Author: Venki Pallipadi
    Date: Thu Sep 13 13:40:05 2007 -0700

    cpuidle: Retain old ACPI policy for !CONFIG_CPU_IDLE

    Retain the old policy in processor_idle, so that when CPU_IDLE is not
    configured, old C-state policy will still be used. This provides a
    clean gradual migration path from old ACPI policy to new cpuidle
    based policy.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 9544a8181edc7ecc33b3bfd69271571f98ed08bc
    Author: Venki Pallipadi
    Date: Thu Sep 13 13:39:17 2007 -0700

    cpuidle: Configure governors by default

    Quoting Len "Do not give an option to users to shoot themselves in the foot".

    Remove the configurability of ladder and menu governors as they are
    needed for default policy of cpuidle. That way users will not be able to
    have cpuidle without any policy loosing all C-state power savings.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 8975059a2c1e56cfe83d1bcf031bcf4cb39be743
    Author: Adam Belay
    Date: Tue Aug 21 18:27:07 2007 -0400

    CPUIDLE: load ACPI properly when CPUIDLE is disabled

    Change the registration return codes for when CPUIDLE
    support is not compiled into the kernel. As a result, the ACPI
    processor driver will load properly even if CPUIDLE is unavailable.
    However, it may be possible to cleanup the ACPI processor driver further
    and eliminate some dead code paths.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit e0322e2b58dd1b12ec669bf84693efe0dc2414a8
    Author: Adam Belay
    Date: Tue Aug 21 18:26:06 2007 -0400

    CPUIDLE: remove cpuidle_get_bm_activity()

    Remove cpuidle_get_bm_activity() and updates governors
    accordingly.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 18a6e770d5c82ba26653e53d240caa617e09e9ab
    Author: Adam Belay
    Date: Tue Aug 21 18:25:58 2007 -0400

    CPUIDLE: max_cstate fix

    Currently max_cstate is limited to 0, resulting in no idle processor
    power management on ACPI platforms. This patch restores the value to
    the array size.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 1fdc0887286179b40ce24bcdbde663172e205ef0
    Author: Adam Belay
    Date: Tue Aug 21 18:25:40 2007 -0400

    CPUIDLE: handle BM detection inside the ACPI Processor driver

    Update the ACPI processor driver to detect BM activity and
    limit state entry depth internally, rather than exposing such
    requirements to CPUIDLE. As a result, CPUIDLE can drop this
    ACPI-specific interface and become more platform independent. BM
    activity is now handled much more aggressively than it was in the
    original implementation, so some testing coverage may be needed to
    verify that this doesn't introduce any DMA buffer under-run issues.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 0ef38840db666f48e3cdd2b769da676c57228dd9
    Author: Adam Belay
    Date: Tue Aug 21 18:25:14 2007 -0400

    CPUIDLE: menu governor updates

    Tweak the menu governor to more effectively handle non-timer
    break events. Non-timer break events are detected by comparing the
    actual sleep time to the expected sleep time. In future revisions, it
    may be more reliable to use the timer data structures directly.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit bb4d74fca63fa96cf3ace644b15ae0f12b7df5a1
    Author: Adam Belay
    Date: Tue Aug 21 18:24:40 2007 -0400

    CPUIDLE: fix 'current_governor' sysfs entry

    Allow the "current_governor" sysfs entry to properly handle
    input terminated with '\n'.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit df3c71559bb69b125f1a48971bf0d17f78bbdf47
    Author: Len Brown
    Date: Sun Aug 12 02:00:45 2007 -0400

    cpuidle: fix IA64 build (again)

    Signed-off-by: Len Brown

    commit a02064579e3f9530fd31baae16b1fc46b5a7bca8
    Author: Venkatesh Pallipadi
    Date: Sun Aug 12 01:39:27 2007 -0400

    cpuidle: Remove support for runtime changing of max_cstate

    Remove support for runtime changeability of max_cstate. Drivers can use
    use latency APIs.

    max_cstate can still be used as a boot time option and dmi override.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 0912a44b13adf22f5e3f607d263aed23b4910d7e
    Author: Venkatesh Pallipadi
    Date: Sun Aug 12 01:39:16 2007 -0400

    cpuidle: Remove ACPI cstate_limit calls from ipw2100

    ipw2100 already has code to use accetable_latency interfaces to limit the
    C-state. Remove the calls to acpi_set_cstate_limit and acpi_get_cstate_limit
    as they are redundant.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit c649a76e76be6bff1fd770d0a775798813a3f6e0
    Author: Venkatesh Pallipadi
    Date: Sun Aug 12 01:35:39 2007 -0400

    cpuidle: compile fix for pause and resume functions

    Fix the compilation failure when cpuidle is not compiled in.

    Signed-off-by: Venkatesh Pallipadi
    Acked-by: Adam Belay
    Signed-off-by: Len Brown

    commit 2305a5920fb8ee6ccec1c62ade05aa8351091d71
    Author: Adam Belay
    Date: Thu Jul 19 00:49:00 2007 -0400

    cpuidle: re-write

    Some portions have been rewritten to make the code cleaner and lighter
    weight. The following is a list of changes:

    1.) the state name is now included in the sysfs interface
    2.) detection, hotplug, and available state modifications are handled by
    CPUIDLE drivers directly
    3.) the CPUIDLE idle handler is only ever installed when at least one
    cpuidle_device is enabled and ready
    4.) the menu governor BM code no longer overflows
    5.) the sysfs attributes are now printed as unsigned integers, avoiding
    negative values
    6.) a variety of other small cleanups

    Also, Idle drivers are no longer swappable during runtime through the
    CPUIDLE sysfs inteface. On i386 and x86_64 most idle handlers (e.g.
    poll, mwait, halt, etc.) don't benefit from an infrastructure that
    supports multiple states, so I think using a more general case idle
    handler selection mechanism would be cleaner.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Acked-by: Shaohua Li
    Signed-off-by: Len Brown

    commit df25b6b56955714e6e24b574d88d1fd11f0c3ee5
    Author: Len Brown
    Date: Tue Jul 24 17:08:21 2007 -0400

    cpuidle: fix IA64 buid

    Signed-off-by: Len Brown

    commit fd6ada4c14488755ff7068860078c437431fbccd
    Author: Adrian Bunk
    Date: Mon Jul 9 11:33:13 2007 -0700

    cpuidle: static

    make cpuidle_replace_governor() static

    Signed-off-by: Adrian Bunk
    Cc: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit c1d4a2cebcadf2429c0c72e1d29aa2a9684c32e0
    Author: Adrian Bunk
    Date: Tue Jul 3 00:54:40 2007 -0400

    cpuidle: static

    This patch makes the needlessly global struct menu_governor static.

    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit dbf8780c6e8d572c2c273da97ed1cca7608fd999
    Author: Andrew Morton
    Date: Tue Jul 3 00:49:14 2007 -0400

    export symbol tick_nohz_get_sleep_length

    ERROR: "tick_nohz_get_sleep_length" [drivers/cpuidle/governors/menu.ko] undefined!
    ERROR: "tick_nohz_get_idle_jiffies" [drivers/cpuidle/governors/menu.ko] undefined!

    And please be sure to get your changes to core kernel suitably reviewed.

    Cc: Adam Belay
    Cc: Venki Pallipadi
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: john stultz
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 29f0e248e7017be15f99febf9143a2cef00b2961
    Author: Andrew Morton
    Date: Tue Jul 3 00:43:04 2007 -0400

    tick.h needs hrtimer.h

    It uses hrtimers.

    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit e40cede7d63a029e92712a3fe02faee60cc38fb4
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:40:34 2007 -0400

    cpuidle: first round of documentation updates

    Documentation changes based on Pavel's feedback.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 83b42be2efece386976507555c29e7773a0dfcd1
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:39:25 2007 -0400

    cpuidle: add rating to the governors and pick the one with highest rating by default

    Introduce a governor rating scheme to pick the right governor by default.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit d2a74b8c5e8f22def4709330d4bfc4a29209b71c
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:38:08 2007 -0400

    cpuidle: make cpuidle sysfs driver governor switch off by default

    Make default cpuidle sysfs to show current_governor and current_driver in
    read-only mode. More elaborate available_governors and available_drivers with
    writeable current_governor and current_driver interface only appear with
    "cpuidle_sysfs_switch" boot parameter.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 1f60a0e80bf83cf6b55c8845bbe5596ed8f6307b
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:37:00 2007 -0400

    cpuidle: menu governor: change the early break condition

    Change the C-state early break out algorithm in menu governor.

    We only look at early breakouts that result in wakeups shorter than idle
    state's target_residency. If such a breakout is frequent enough, eliminate
    the particular idle state upto a timeout period.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 45a42095cf64b003b4a69be3ce7f434f97d7af51
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:35:38 2007 -0400

    cpuidle: fix uninitialized variable in sysfs routine

    Fix the uninitialized usage of ret.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 80dca7cdba3e6ee13eae277660873ab9584eb3be
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:34:16 2007 -0400

    cpuidle: reenable /proc/acpi//power interface for the time being

    Keep /proc/acpi/processor/CPU*/power around for a while as powertop depends
    on it. It will be marked deprecated and removed in future. powertop can use
    cpuidle interfaces instead.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 589c37c2646c5e3813a51255a5ee1159cb4c33fc
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:32:37 2007 -0400

    cpuidle: menu governor and hrtimer compile fix

    Compile fix for menu governor.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 0ba80bd9ab3ed304cb4f19b722e4cc6740588b5e
    Author: Len Brown
    Date: Thu May 31 22:51:43 2007 -0400

    cpuidle: build fix - cpuidle vs ipw2100 module

    ERROR: "acpi_set_cstate_limit" [drivers/net/wireless/ipw2100.ko] undefined!

    Signed-off-by: Len Brown

    commit d7d8fa7f96a7f7682be7c6cc0cc53fa7a18c3b58
    Author: Adam Belay
    Date: Sat Mar 24 03:47:07 2007 -0400

    cpuidle: add the 'menu' governor

    Here is my first take at implementing an idle PM governor that takes
    full advantage of NO_HZ. I call it the 'menu' governor because it
    considers the full list of idle states before each entry.

    I've kept the implementation fairly simple. It attempts to guess the
    next residency time and then chooses a state that would meet at least
    the break-even point between power savings and entry cost. To this end,
    it selects the deepest idle state that satisfies the following
    constraints:
    1. If the idle time elapsed since bus master activity was detected
    is below a threshold (currently 20 ms), then limit the selection
    to C2-type or above.
    2. Do not choose a state with a break-even residency that exceeds
    the expected time remaining until the next timer interrupt.
    3. Do not choose a state with a break-even residency that exceeds
    the elapsed time between the last pair of break events,
    excluding timer interrupts.

    This governor has an advantage over "ladder" governor because it
    proactively checks how much time remains until the next timer interrupt
    using the tick infrastructure. Also, it handles device interrupt
    activity more intelligently by not including timer interrupts in break
    event calculations. Finally, it doesn't make policy decisions using the
    number of state entries, which can have variable residency times (NO_HZ
    makes these potentially very large), and instead only considers sleep
    time deltas.

    The menu governor can be selected during runtime using the cpuidle sysfs
    interface like so:
    "echo "menu" > /sys/devices/system/cpu/cpuidle/current_governor"

    Signed-off-by: Adam Belay
    Signed-off-by: Len Brown

    commit a4bec7e65aa3b7488b879d971651cc99a6c410fe
    Author: Adam Belay
    Date: Sat Mar 24 03:47:03 2007 -0400

    cpuidle: export time until next timer interrupt using NO_HZ

    Expose information about the time remaining until the next
    timer interrupt expires by utilizing the dynticks infrastructure.
    Also modify the main idle loop to allow dynticks to handle
    non-interrupt break events (e.g. DMA). Finally, expose sleep ticks
    information to external code. Thomas Gleixner is responsible for much
    of the code in this patch. However, I've made some additional changes,
    so I'm probably responsible if there are any bugs or oversights :)

    Signed-off-by: Adam Belay
    Signed-off-by: Len Brown

    commit 2929d8996fbc77f41a5ff86bb67cdde3ca7d2d72
    Author: Adam Belay
    Date: Sat Mar 24 03:46:58 2007 -0400

    cpuidle: governor API changes

    This patch prepares cpuidle for the menu governor. It adds an optional
    stage after idle state entry to give the governor an opportunity to
    check why the state was exited. Also it makes sure the idle loop
    returns after each state entry, allowing the appropriate dynticks code
    to run.

    Signed-off-by: Adam Belay
    Signed-off-by: Len Brown

    commit 3a7fd42f9825c3b03e364ca59baa751bb350775f
    Author: Venki Pallipadi
    Date: Thu Apr 26 00:03:59 2007 -0700

    cpuidle: hang fix

    Prevent hang on x86-64, when ACPI processor driver is added as a module on
    a system that does not support C-states.

    x86-64 expects all idle handlers to enable interrupts before returning from
    idle handler. This is due to enter_idle(), exit_idle() races. Make
    cpuidle_idle_call() confirm to this when there is no pm_idle_old.

    Also, cpuidle look at the return values of attch_driver() and set
    current_driver to NULL if attach fails on all CPUs.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 4893339a142afbd5b7c01ffadfd53d14746e858e
    Author: Shaohua Li
    Date: Thu Apr 26 10:40:09 2007 +0800

    cpuidle: add support for max_cstate limit

    With CPUIDLE framework, the max_cstate (to limit max cpu c-state)
    parameter is ingored. Some systems require it to ignore C2/C3
    and some drivers like ipw require it too.

    Signed-off-by: Shaohua Li
    Signed-off-by: Len Brown

    commit 43bbbbe1cb998cbd2df656f55bb3bfe30f30e7d1
    Author: Shaohua Li
    Date: Thu Apr 26 10:40:13 2007 +0800

    cpuidle: add cpuidle_fore_redetect_devices API

    add cpuidle_force_redetect_devices API,
    which forces all CPU redetect idle states.
    Next patch will use it.

    Signed-off-by: Shaohua Li
    Signed-off-by: Len Brown

    commit d1edadd608f24836def5ec483d2edccfb37b1d19
    Author: Shaohua Li
    Date: Thu Apr 26 10:40:01 2007 +0800

    cpuidle: fix sysfs related issue

    Fix the cpuidle sysfs issue.
    a. make kobject dynamicaly allocated
    b. fixed sysfs init issue to avoid suspend/resume issue

    Signed-off-by: Shaohua Li
    Signed-off-by: Len Brown

    commit 7169a5cc0d67b263978859672e86c13c23a5570d
    Author: Randy Dunlap
    Date: Wed Mar 28 22:52:53 2007 -0400

    cpuidle: 1-bit field must be unsigned

    A 1-bit bitfield has no room for a sign bit.
    drivers/cpuidle/governors/ladder.c:54:16: error: dubious bitfield without explicit `signed' or `unsigned'

    Signed-off-by: Randy Dunlap
    Cc: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 4658620158dc2fbd9e4bcb213c5b6fb5d05ba7d4
    Author: Venkatesh Pallipadi
    Date: Wed Mar 28 22:52:41 2007 -0400

    cpuidle: fix boot hang

    Patch for cpuidle boot hang reported by Larry Finger here.
    http://www.ussg.iu.edu/hypermail/linux/kernel/0703.2/2025.html

    Signed-off-by: Venkatesh Pallipadi
    Cc: Larry Finger
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit c17e168aa6e5fe3851baaae8df2fbc1cf11443a9
    Author: Len Brown
    Date: Wed Mar 7 04:37:53 2007 -0500

    cpuidle: ladder does not depend on ACPI

    build fix for CONFIG_ACPI=n

    In file included from drivers/cpuidle/governors/ladder.c:21:
    include/acpi/processor.h:88: error: expected specifier-qualifier-list before ‘acpi_integer’
    include/acpi/processor.h:106: error: expected specifier-qualifier-list before ‘acpi_integer’
    include/acpi/processor.h:168: error: expected specifier-qualifier-list before ‘acpi_handle’

    Signed-off-by: Len Brown

    commit 8c91d958246bde68db0c3f0c57b535962ce861cb
    Author: Adrian Bunk
    Date: Tue Mar 6 02:29:40 2007 -0800

    cpuidle: make code static

    This patch makes the following needlessly global code static:
    - driver.c: __cpuidle_find_driver()
    - governor.c: __cpuidle_find_governor()
    - ladder.c: struct ladder_governor

    Signed-off-by: Adrian Bunk
    Cc: Venkatesh Pallipadi
    Cc: Adam Belay
    Cc: Shaohua Li
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 0c39dc3187094c72c33ab65a64d2017b21f372d2
    Author: Venkatesh Pallipadi
    Date: Wed Mar 7 02:38:22 2007 -0500

    cpu_idle: fix build break

    This patch fixes a build breakage with !CONFIG_HOTPLUG_CPU and
    CONFIG_CPU_IDLE.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 8112e3b115659b07df340ef170515799c0105f82
    Author: Venkatesh Pallipadi
    Date: Tue Mar 6 02:29:39 2007 -0800

    cpuidle: build fix for !CPU_IDLE

    Fix the compile issues when CPU_IDLE is not configured.

    Signed-off-by: Venkatesh Pallipadi
    Cc: Adam Belay
    Cc: Shaohua Li
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 1eb4431e9599cd25e0d9872f3c2c8986821839dd
    Author: Venkatesh Pallipadi
    Date: Thu Feb 22 13:54:57 2007 -0800

    cpuidle take2: Basic documentation for cpuidle

    Documentation for cpuidle infrastructure

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Adam Belay
    Signed-off-by: Shaohua Li
    Signed-off-by: Len Brown

    commit ef5f15a8b79123a047285ec2e3899108661df779
    Author: Venkatesh Pallipadi
    Date: Thu Feb 22 13:54:03 2007 -0800

    cpuidle take2: Hookup ACPI C-states driver with cpuidle

    Hookup ACPI C-states onto generic cpuidle infrastructure.

    drivers/acpi/procesor_idle.c is now a ACPI C-states driver that registers as
    a driver in cpuidle infrastructure and the policy part is removed from
    drivers/acpi/processor_idle.c. We use governor in cpuidle instead.

    Signed-off-by: Shaohua Li
    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Adam Belay
    Signed-off-by: Len Brown

    commit 987196fa82d4db52c407e8c9d5dec884ba602183
    Author: Venkatesh Pallipadi
    Date: Thu Feb 22 13:52:57 2007 -0800

    cpuidle take2: Core cpuidle infrastructure

    Announcing 'cpuidle', a new CPU power management infrastructure to manage
    idle CPUs in a clean and efficient manner.
    cpuidle separates out the drivers that can provide support for multiple types
    of idle states and policy governors that decide on what idle state to use
    at run time.
    A cpuidle driver can support multiple idle states based on parameters like
    varying power consumption, wakeup latency, etc (ACPI C-states for example).
    A cpuidle governor can be usage model specific (laptop, server,
    laptop on battery etc).
    Main advantage of the infrastructure being, it allows independent development
    of drivers and governors and allows for better CPU power management.

    A huge thanks to Adam Belay and Shaohua Li who were part of this mini-project
    since its beginning and are greatly responsible for this patchset.

    This patch:

    Core cpuidle infrastructure.
    Introduces a new abstraction layer for cpuidle:
    * which manages drivers that can support multiple idles states. Drivers
    can be generic or particular to specific hardware/platform
    * allows pluging in multiple policy governors that can take idle state policy
    decision
    * The core also has a set of sysfs interfaces with which administrato can know
    about supported drivers and governors and switch them at run time.

    Signed-off-by: Adam Belay
    Signed-off-by: Shaohua Li
    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    Signed-off-by: Len Brown

    Len Brown