17 Dec, 2014
1 commit
-
When the ladder governor sees the CPUIDLE_FLAG_TIME_INVALID flag,
it unconditionally causes a state promotion by setting last_residency
to a number higher than the state's promotion_time:last_residency = last_state->threshold.promotion_time + 1
It does this for fear that cpuidle_get_last_residency()
will be in-accurate, because cpuidle_enter_state() invoked
a state with CPUIDLE_FLAG_TIME_INVALID.But the only state with CPUIDLE_FLAG_TIME_INVALID is
acpi_safe_halt(), which may return well after its actual
idle duration because it enables interrupts, so cpuidle_enter_state()
also measures interrupt service time.So what? In ladder, a huge invalid last_residency has exactly
the same effect as the current code -- it unconditionally
causes a state promotion.In the case where the idle residency plus measured interrupt
handling time is less than the state's demotion_time -- we should
use that timestamp to give ladder a chance to demote, rather than
unconditionally promoting.This can be done by simply ignoring the CPUIDLE_FLAG_TIME_INVALID,
and using the "invalid" time, as it is either equal to what we are
doing today, or better.Signed-off-by: Len Brown
Acked-by: Daniel Lezcano
Signed-off-by: Rafael J. Wysocki
13 Nov, 2014
1 commit
-
The only place where the time is invalid is when the ACPI_CSTATE_FFH entry
method is not set. Otherwise for all the drivers, the time can be correctly
measured.Instead of duplicating the CPUIDLE_FLAG_TIME_VALID flag in all the drivers
for all the states, just invert the logic by replacing it by the flag
CPUIDLE_FLAG_TIME_INVALID, hence we can set this flag only for the acpi idle
driver, remove the former flag from all the drivers and invert the logic with
this flag in the different governor.Signed-off-by: Daniel Lezcano
Signed-off-by: Rafael J. Wysocki
27 Aug, 2014
1 commit
-
All of these are for address calculation. Replace with
this_cpu_ptr().Cc: Daniel Lezcano
Cc: linux-pm@vger.kernel.org
Acked-by: Rafael J. Wysocki
[cpufreq changes]
Signed-off-by: Christoph Lameter
Signed-off-by: Tejun Heo
29 Jul, 2014
1 commit
-
use CPUIDLE_DRIVER_STATE_START, instead of hardcoded value 0. As,
CPUIDLE_DRIVER_STATE_START can be 1/0 based on
CONFIG_ARCH_HAS_CPU_RELAX is defined or not.Signed-off-by: Mohammad Merajul Islam Molla
Signed-off-by: Rafael J. Wysocki
15 Jul, 2013
1 commit
-
cpufreq governors are defined as modules in the code, but the Kconfig
options do not allow them to be built as modules. This is not really
a problem, but the cpuidle init ordering is: the cpuidle init
functions (framework and driver) and then the governors. That leads
to some weirdness in the cpuidle framework.Namely, cpuidle_register_device() calls cpuidle_enable_device() which
fails at the first attempt, because governors have not been registered
yet. When a governor is registered, the framework calls
cpuidle_enable_device() again which runs __cpuidle_register_device()
only then. Of course, for that to work, the cpuidle_enable_device()
return value has to be ignored by cpuidle_register_device().Instead of having this cyclic call graph and relying on a positive
side effects of the hackish back and forth cpuidle_enable_device()
calls it is better to fix the cpuidle init ordering.To that end, replace the module init code with postcore_initcall()
so we have:* cpuidle framework : core_initcall
* cpuidle governors : postcore_initcall
* cpuidle drivers : device_initcalland remove the corresponding module exit code as it is dead anyway
(governors can't be built as modules).[rjw: Changelog]
Signed-off-by: Daniel Lezcano
Signed-off-by: Rafael J. Wysocki
04 Sep, 2012
2 commits
-
For the mechanism introduced by commit cbc9ef0 (PM / Domains: Add
preliminary support for cpuidle, v2) to work with the ladder
governor, that governor should respect the "disabled" state flag
added by that commit. Change the ladder governor accordingly.Signed-off-by: Rafael J. Wysocki
-
There are two cpuidle governors ladder and menu. While the ladder
governor is always available, if CONFIG_CPU_IDLE is selected, the
menu governor additionally requires CONFIG_NO_HZ.A particular C state can be disabled by writing to the sysfs file
/sys/devices/system/cpu/cpuN/cpuidle/stateN/disable, but this mechanism
is only implemented in the menu governor. Thus, in a system where
CONFIG_NO_HZ is not selected, the ladder governor becomes default and
always will walk through all sleep states - irrespective of whether the
C state was disabled via sysfs or not. The only way to select a specific
C state was to write the related latency to /dev/cpu_dma_latency and
keep the file open as long as this setting was required - not very
practical and not suitable for setting a single core in an SMP system.With this patch, the ladder governor only will promote to the next
C state, if it has not been disabled, and it will demote, if the
current C state was disabled.Note that the patch does not make the setting of the sysfs variable
"disable" coherent, i.e. if one is disabling a light state, then all
deeper states are disabled as well, but the "disable" variable does not
reflect it. Likewise, if one enables a deep state but a lighter state
still is disabled, then this has no effect. A related section has been
added to the documentation.Signed-off-by: Carsten Emde
Signed-off-by: Rafael J. Wysocki
08 Nov, 2011
1 commit
-
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux:
cpuidle: Single/Global registration of idle states
cpuidle: Split cpuidle_state structure and move per-cpu statistics fields
cpuidle: Remove CPUIDLE_FLAG_IGNORE and dev->prepare()
cpuidle: Move dev->last_residency update to driver enter routine; remove dev->last_state
ACPI: Fix CONFIG_ACPI_DOCK=n compiler warning
ACPI: Export FADT pm_profile integer value to userspace
thermal: Prevent polling from happening during system suspend
ACPI: Drop ACPI_NO_HARDWARE_INIT
ACPI atomicio: Convert width in bits to bytes in __acpi_ioremap_fast()
PNPACPI: Simplify disabled resource registration
ACPI: Fix possible recursive locking in hwregs.c
ACPI: use kstrdup()
mrst pmu: update comment
tools/power turbostat: less verbose debugging
07 Nov, 2011
2 commits
-
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/83Signed-off-by: Deepthi Dharwar
Signed-off-by: Trinabh Gupta
Tested-by: Jean Pihet
Reviewed-by: Kevin Hilman
Acked-by: Arjan van de Ven
Acked-by: Kevin Hilman
Signed-off-by: Len Brown -
Cpuidle governor only suggests the state to enter using the
governor->select() interface, but allows the low level driver to
override the recommended state. The actual entered state
may be different because of software or hardware demotion. Software
demotion is done by the back-end cpuidle driver and can be accounted
correctly. Current cpuidle code uses last_state field to capture the
actual state entered and based on that updates the statistics for the
state entered.Ideally the driver enter routine should update the counters,
and it should return the state actually entered rather than the time
spent there. The generic cpuidle code should simply handle where
the counters live in the sysfs namespace, not updating the counters.Reference:
https://lkml.org/lkml/2011/3/25/52Signed-off-by: Deepthi Dharwar
Signed-off-by: Trinabh Gupta
Tested-by: Jean Pihet
Reviewed-by: Kevin Hilman
Acked-by: Arjan van de Ven
Acked-by: Kevin Hilman
Signed-off-by: Len Brown
01 Nov, 2011
1 commit
-
This file has module_init/exit and MODULE_LICENSE, and so it
needs the full module.h header.Signed-off-by: Paul Gortmaker
25 Aug, 2011
1 commit
-
The PM QoS implementation files are better named
kernel/power/qos.c and include/linux/pm_qos.h.The PM QoS support is compiled under the CONFIG_PM option.
Signed-off-by: Jean Pihet
Acked-by: markgross
Reviewed-by: Kevin Hilman
Signed-off-by: Rafael J. Wysocki
11 May, 2010
1 commit
-
This patch changes the string based list management to a handle base
implementation to help with the hot path use of pm-qos, it also renames
much of the API to use "request" as opposed to "requirement" that was
used in the initial implementation. I did this because request more
accurately represents what it actually does.Also, I added a string based ABI for users wanting to use a string
interface. So if the user writes 0xDDDDDDDD formatted hex it will be
accepted by the interface. (someone asked me for it and I don't think
it hurts anything.)This patch updates some documentation input I got from Randy.
Signed-off-by: markgross
Signed-off-by: Rafael J. Wysocki
16 Dec, 2009
1 commit
-
It does not seem possible that ldev can be NULL, so drop the unnecessary
test. If ldev can somehow be NULL, then the initialization of last_idx
should be moved below the test.A simplified version of the semantic match that detects this problem is as
follows (http://coccinelle.lip6.fr/)://
@match exists@
expression x, E;
identifier fld;
@@* x->fld
... when != \(x = E\|&x\)
* x == NULL
//Signed-off-by: Julia Lawall
Acked-by: Arjan van de Ven
Cc: Ingo Molnar
Cc: Venkatesh Pallipadi
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
16 Aug, 2008
2 commits
-
ladder governor only honored latency requirement when promoting C-states.
Instead. it should check for latency requirement on each idle call,
and demote to appropriate C-state when there is a latency requirement change.Signed-off-by: Venkatesh Pallipadi
Signed-off-by: Andi Kleen -
poll_idle was added to CPUIDLE, just as a low latency idle handler, to be
used in cases when user desires CPUs not to enter any idle state at all. It
was supposed to be a run time idle=poll option to the user. But, it was indeed
getting used during normal menu and ladder governor default case, with no
special user setting (Reported by Linus Torvalds).Change below ensures that poll_idle will not be used unless user explicitly
asks pm_qos infrastructure for zero latency requirement.Signed-off-by: Venkatesh Pallipadi
Signed-off-by: Andi Kleen
06 Feb, 2008
1 commit
-
The following patch is a generalization of the latency.c implementation done
by Arjan last year. It provides infrastructure for more than one parameter,
and exposes a user mode interface for processes to register pm_qos
expectations of processes.This interface provides a kernel and user mode interface for registering
performance expectations by drivers, subsystems and user space applications on
one of the parameters.Currently we have {cpu_dma_latency, network_latency, network_throughput} as
the initial set of pm_qos parameters.The infrastructure exposes multiple misc device nodes one per implemented
parameter. The set of parameters implement is defined by pm_qos_power_init()
and pm_qos_params.h. This is done because having the available parameters
being runtime configurable or changeable from a driver was seen as too easy to
abuse.For each parameter a list of performance requirements is maintained along with
an aggregated target value. The aggregated target value is updated with
changes to the requirement list or elements of the list. Typically the
aggregated target value is simply the max or min of the requirement values
held in the parameter list elements.>From kernel mode the use of this interface is simple:
pm_qos_add_requirement(param_id, name, target_value):
Will insert a named element in the list for that identified PM_QOS
parameter with the target value. Upon change to this list the new target is
recomputed and any registered notifiers are called only if the target value
is now different.pm_qos_update_requirement(param_id, name, new_target_value):
Will search the list identified by the param_id for the named list element
and then update its target value, calling the notification tree if the
aggregated target is changed. with that name is already registered.pm_qos_remove_requirement(param_id, name):
Will search the identified list for the named element and remove it, after
removal it will update the aggregate target and call the notification tree
if the target was changed as a result of removing the named requirement.>From user mode:
Only processes can register a pm_qos requirement. To provide for
automatic cleanup for process the interface requires the process to register
its parameter requirements in the following way:To register the default pm_qos target for the specific parameter, the
process must open one of /dev/[cpu_dma_latency, network_latency,
network_throughput]As long as the device node is held open that process has a registered
requirement on the parameter. The name of the requirement is
"process_" derived from the current->pid from within the open system
call.To change the requested target value the process needs to write a s32
value to the open device node. This translates to a
pm_qos_update_requirement call.To remove the user mode request for a target value simply close the device
node.[akpm@linux-foundation.org: fix warnings]
[akpm@linux-foundation.org: fix build]
[akpm@linux-foundation.org: fix build again]
[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: mark gross
Cc: "John W. Linville"
Cc: Len Brown
Cc: Jaroslav Kysela
Cc: Takashi Iwai
Cc: Arjan van de Ven
Cc: Venki Pallipadi
Cc: Adam Belay
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
10 Oct, 2007
1 commit
-
commit e5a16b1f9eec0af7cfa0830304b41c1c0833cf9f
Author: Len Brown
Date: Tue Oct 2 23:44:44 2007 -0400cpuidle: 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 -0400cpuidle: 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 -0700cpuidle: 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 Browncommit 9544a8181edc7ecc33b3bfd69271571f98ed08bc
Author: Venki Pallipadi
Date: Thu Sep 13 13:39:17 2007 -0700cpuidle: 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 Browncommit 8975059a2c1e56cfe83d1bcf031bcf4cb39be743
Author: Adam Belay
Date: Tue Aug 21 18:27:07 2007 -0400CPUIDLE: 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 Browncommit e0322e2b58dd1b12ec669bf84693efe0dc2414a8
Author: Adam Belay
Date: Tue Aug 21 18:26:06 2007 -0400CPUIDLE: 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 Browncommit 18a6e770d5c82ba26653e53d240caa617e09e9ab
Author: Adam Belay
Date: Tue Aug 21 18:25:58 2007 -0400CPUIDLE: 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 Browncommit 1fdc0887286179b40ce24bcdbde663172e205ef0
Author: Adam Belay
Date: Tue Aug 21 18:25:40 2007 -0400CPUIDLE: 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 Browncommit 0ef38840db666f48e3cdd2b769da676c57228dd9
Author: Adam Belay
Date: Tue Aug 21 18:25:14 2007 -0400CPUIDLE: 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 Browncommit bb4d74fca63fa96cf3ace644b15ae0f12b7df5a1
Author: Adam Belay
Date: Tue Aug 21 18:24:40 2007 -0400CPUIDLE: 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 Browncommit df3c71559bb69b125f1a48971bf0d17f78bbdf47
Author: Len Brown
Date: Sun Aug 12 02:00:45 2007 -0400cpuidle: fix IA64 build (again)
Signed-off-by: Len Brown
commit a02064579e3f9530fd31baae16b1fc46b5a7bca8
Author: Venkatesh Pallipadi
Date: Sun Aug 12 01:39:27 2007 -0400cpuidle: 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 Browncommit 0912a44b13adf22f5e3f607d263aed23b4910d7e
Author: Venkatesh Pallipadi
Date: Sun Aug 12 01:39:16 2007 -0400cpuidle: 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 Browncommit c649a76e76be6bff1fd770d0a775798813a3f6e0
Author: Venkatesh Pallipadi
Date: Sun Aug 12 01:35:39 2007 -0400cpuidle: 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 Browncommit 2305a5920fb8ee6ccec1c62ade05aa8351091d71
Author: Adam Belay
Date: Thu Jul 19 00:49:00 2007 -0400cpuidle: 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 cleanupsAlso, 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 Browncommit df25b6b56955714e6e24b574d88d1fd11f0c3ee5
Author: Len Brown
Date: Tue Jul 24 17:08:21 2007 -0400cpuidle: fix IA64 buid
Signed-off-by: Len Brown
commit fd6ada4c14488755ff7068860078c437431fbccd
Author: Adrian Bunk
Date: Mon Jul 9 11:33:13 2007 -0700cpuidle: static
make cpuidle_replace_governor() static
Signed-off-by: Adrian Bunk
Cc: Venkatesh Pallipadi
Signed-off-by: Andrew Morton
Signed-off-by: Len Browncommit c1d4a2cebcadf2429c0c72e1d29aa2a9684c32e0
Author: Adrian Bunk
Date: Tue Jul 3 00:54:40 2007 -0400cpuidle: 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 Browncommit dbf8780c6e8d572c2c273da97ed1cca7608fd999
Author: Andrew Morton
Date: Tue Jul 3 00:49:14 2007 -0400export 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 Browncommit 29f0e248e7017be15f99febf9143a2cef00b2961
Author: Andrew Morton
Date: Tue Jul 3 00:43:04 2007 -0400tick.h needs hrtimer.h
It uses hrtimers.
Signed-off-by: Andrew Morton
Signed-off-by: Len Browncommit e40cede7d63a029e92712a3fe02faee60cc38fb4
Author: Venki Pallipadi
Date: Tue Jul 3 00:40:34 2007 -0400cpuidle: 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 Browncommit 83b42be2efece386976507555c29e7773a0dfcd1
Author: Venki Pallipadi
Date: Tue Jul 3 00:39:25 2007 -0400cpuidle: 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 Browncommit d2a74b8c5e8f22def4709330d4bfc4a29209b71c
Author: Venki Pallipadi
Date: Tue Jul 3 00:38:08 2007 -0400cpuidle: 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 Browncommit 1f60a0e80bf83cf6b55c8845bbe5596ed8f6307b
Author: Venki Pallipadi
Date: Tue Jul 3 00:37:00 2007 -0400cpuidle: 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 Browncommit 45a42095cf64b003b4a69be3ce7f434f97d7af51
Author: Venki Pallipadi
Date: Tue Jul 3 00:35:38 2007 -0400cpuidle: 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 Browncommit 80dca7cdba3e6ee13eae277660873ab9584eb3be
Author: Venki Pallipadi
Date: Tue Jul 3 00:34:16 2007 -0400cpuidle: 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 Browncommit 589c37c2646c5e3813a51255a5ee1159cb4c33fc
Author: Venki Pallipadi
Date: Tue Jul 3 00:32:37 2007 -0400cpuidle: 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 Browncommit 0ba80bd9ab3ed304cb4f19b722e4cc6740588b5e
Author: Len Brown
Date: Thu May 31 22:51:43 2007 -0400cpuidle: 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 -0400cpuidle: 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 Browncommit a4bec7e65aa3b7488b879d971651cc99a6c410fe
Author: Adam Belay
Date: Sat Mar 24 03:47:03 2007 -0400cpuidle: 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 Browncommit 2929d8996fbc77f41a5ff86bb67cdde3ca7d2d72
Author: Adam Belay
Date: Sat Mar 24 03:46:58 2007 -0400cpuidle: 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 Browncommit 3a7fd42f9825c3b03e364ca59baa751bb350775f
Author: Venki Pallipadi
Date: Thu Apr 26 00:03:59 2007 -0700cpuidle: 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 Browncommit 4893339a142afbd5b7c01ffadfd53d14746e858e
Author: Shaohua Li
Date: Thu Apr 26 10:40:09 2007 +0800cpuidle: 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 Browncommit 43bbbbe1cb998cbd2df656f55bb3bfe30f30e7d1
Author: Shaohua Li
Date: Thu Apr 26 10:40:13 2007 +0800cpuidle: 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 Browncommit d1edadd608f24836def5ec483d2edccfb37b1d19
Author: Shaohua Li
Date: Thu Apr 26 10:40:01 2007 +0800cpuidle: fix sysfs related issue
Fix the cpuidle sysfs issue.
a. make kobject dynamicaly allocated
b. fixed sysfs init issue to avoid suspend/resume issueSigned-off-by: Shaohua Li
Signed-off-by: Len Browncommit 7169a5cc0d67b263978859672e86c13c23a5570d
Author: Randy Dunlap
Date: Wed Mar 28 22:52:53 2007 -0400cpuidle: 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 Browncommit 4658620158dc2fbd9e4bcb213c5b6fb5d05ba7d4
Author: Venkatesh Pallipadi
Date: Wed Mar 28 22:52:41 2007 -0400cpuidle: fix boot hang
Patch for cpuidle boot hang reported by Larry Finger here.
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.2/2025.htmlSigned-off-by: Venkatesh Pallipadi
Cc: Larry Finger
Signed-off-by: Andrew Morton
Signed-off-by: Len Browncommit c17e168aa6e5fe3851baaae8df2fbc1cf11443a9
Author: Len Brown
Date: Wed Mar 7 04:37:53 2007 -0500cpuidle: 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 -0800cpuidle: 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_governorSigned-off-by: Adrian Bunk
Cc: Venkatesh Pallipadi
Cc: Adam Belay
Cc: Shaohua Li
Signed-off-by: Andrew Morton
Signed-off-by: Len Browncommit 0c39dc3187094c72c33ab65a64d2017b21f372d2
Author: Venkatesh Pallipadi
Date: Wed Mar 7 02:38:22 2007 -0500cpu_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 Browncommit 8112e3b115659b07df340ef170515799c0105f82
Author: Venkatesh Pallipadi
Date: Tue Mar 6 02:29:39 2007 -0800cpuidle: 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 Browncommit 1eb4431e9599cd25e0d9872f3c2c8986821839dd
Author: Venkatesh Pallipadi
Date: Thu Feb 22 13:54:57 2007 -0800cpuidle 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 Browncommit ef5f15a8b79123a047285ec2e3899108661df779
Author: Venkatesh Pallipadi
Date: Thu Feb 22 13:54:03 2007 -0800cpuidle 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 Browncommit 987196fa82d4db52c407e8c9d5dec884ba602183
Author: Venkatesh Pallipadi
Date: Thu Feb 22 13:52:57 2007 -0800cpuidle 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 BrownSigned-off-by: Len Brown