[GIT] idle patches for 2.6.38-merge

From: Len Brown
Date: Thu Jan 13 2011 - 22:23:44 EST


Hi Linus,

please pull from:

git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-idle-2.6.git idle-release

This will update the files shown below.

thanks!

Len Brown
Intel Open Source Technology Center

ps. individual patches are available on linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx
and a consolidated plain patch is available here:
http://ftp.kernel.org/pub/linux/kernel/people/lenb/idle/patches/2.6.37/idle-release-2.6.37.diff.gz

arch/arm/mach-omap2/cpuidle34xx.c | 2 +
arch/ia64/include/asm/processor.h | 5 +-
arch/ia64/kernel/process.c | 6 +--
arch/sh/kernel/cpu/shmobile/cpuidle.c | 1 -
arch/x86/include/asm/processor.h | 5 +-
arch/x86/kernel/process.c | 30 ++++------
arch/x86/kernel/process_32.c | 4 --
arch/x86/kernel/process_64.c | 6 --
drivers/acpi/processor_core.c | 4 +-
drivers/acpi/processor_idle.c | 28 ++++------
drivers/cpuidle/cpuidle.c | 92 +++++++++++++++++---------------
drivers/idle/intel_idle.c | 69 ++++++++++++++++++++++---
include/linux/cpuidle.h | 6 --
13 files changed, 145 insertions(+), 113 deletions(-)

through these commits:

Len Brown (7):
intel_idle: update Sandy Bridge core C-state residency targets
ACPI: processor_idle: delete use of NOP CPUIDLE_FLAGs
cpuidle: delete NOP CPUIDLE_FLAG_POLL
SH, cpuidle: delete use of NOP CPUIDLE_FLAGS_SHALLOW
cpuidle: delete unused CPUIDLE_FLAG_SHALLOW, BALANCED, DEEP definitions
cpuidle: CPUIDLE_FLAG_TLB_FLUSHED is specific to intel_idle
cpuidle: CPUIDLE_FLAG_CHECK_BM is omap3_idle specific

Rafael J. Wysocki (1):
cpuidle: Make cpuidle_enable_device() call poll_idle_init()

Shaohua Li (1):
intel_idle: open broadcast clock event

Thomas Renninger (3):
ACPI, intel_idle: Cleanup idle= internal variables
cpuidle: Rename X86 specific idle poll state[0] from C0 to POLL
cpuidle/x86/perf: fix power:cpu_idle double end events and throw cpu_idle events from the cpuidle layer

with this log:

commit 43952886f0b8b3c344c3392b88de067d5fa5419a
Merge: 56dbed1 f77cfe4
Author: Len Brown <len.brown@xxxxxxxxx>
Date: Wed Jan 12 18:06:19 2011 -0500

Merge branch 'cpuidle-perf-events' into idle-test

commit 56dbed129df3fdd4caf9018b6e7599ee258a5420
Merge: 2a2d31c f878133
Author: Len Brown <len.brown@xxxxxxxxx>
Date: Wed Jan 12 18:06:06 2011 -0500

Merge branch 'linus' into idle-test

commit f77cfe4ea21760268c0277fa3e4b02dfd2a2c2f4
Author: Thomas Renninger <trenn@xxxxxxx>
Date: Fri Jan 7 11:29:44 2011 +0100

cpuidle/x86/perf: fix power:cpu_idle double end events and throw cpu_idle events from the cpuidle layer

Currently intel_idle and acpi_idle driver show double cpu_idle "exit idle"
events -> this patch fixes it and makes cpu_idle events throwing less complex.

It also introduces cpu_idle events for all architectures which use
the cpuidle subsystem, namely:
- arch/arm/mach-at91/cpuidle.c
- arch/arm/mach-davinci/cpuidle.c
- arch/arm/mach-kirkwood/cpuidle.c
- arch/arm/mach-omap2/cpuidle34xx.c
- arch/drivers/acpi/processor_idle.c (for all cases, not only mwait)
- arch/x86/kernel/process.c (did throw events before, but was a mess)
- drivers/idle/intel_idle.c (did throw events before)

Convention should be:
Fire cpu_idle events inside the current pm_idle function (not somewhere
down the the callee tree) to keep things easy.

Current possible pm_idle functions in X86:
c1e_idle, poll_idle, cpuidle_idle_call, mwait_idle, default_idle
-> this is really easy is now.

This affects userspace:
The type field of the cpu_idle power event can now direclty get
mapped to:
/sys/devices/system/cpu/cpuX/cpuidle/stateX/{name,desc,usage,time,...}
instead of throwing very CPU/mwait specific values.
This change is not visible for the intel_idle driver.
For the acpi_idle driver it should only be visible if the vendor
misses out C-states in his BIOS.
Another (perf timechart) patch reads out cpuidle info of cpu_idle
events from:
/sys/.../cpuidle/stateX/*, then the cpuidle events are mapped
to the correct C-/cpuidle state again, even if e.g. vendors miss
out C-states in their BIOS and for example only export C1 and C3.
-> everything is fine.

Signed-off-by: Thomas Renninger <trenn@xxxxxxx>
CC: Robert Schoene <robert.schoene@xxxxxxxxxxxxx>
CC: Jean Pihet <j-pihet@xxxxxx>
CC: Arjan van de Ven <arjan@xxxxxxxxxxxxxxx>
CC: Ingo Molnar <mingo@xxxxxxx>
CC: Frederic Weisbecker <fweisbec@xxxxxxxxx>
CC: linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx
CC: linux-acpi@xxxxxxxxxxxxxxx
CC: linux-kernel@xxxxxxxxxxxxxxx
CC: linux-perf-users@xxxxxxxxxxxxxxx
CC: linux-omap@xxxxxxxxxxxxxxx
Signed-off-by: Len Brown <len.brown@xxxxxxxxx>

commit 2a2d31c8dc6f1ebcf5eab1d93a0cb0fb4ed57c7c
Author: Shaohua Li <shaohua.li@xxxxxxxxx>
Date: Mon Jan 10 09:38:12 2011 +0800

intel_idle: open broadcast clock event

Intel_idle driver uses CLOCK_EVT_NOTIFY_BROADCAST_ENTER
CLOCK_EVT_NOTIFY_BROADCAST_EXIT
for broadcast clock events. The _ENTER/_EXIT doesn't really open broadcast clock
events, please see processor_idle.c for an example. In some situation, this will
cause boot hang, because some CPUs enters idle but local APIC timer stalls.

Reported-and-tested-by: Yan Zheng <zheng.z.yan@xxxxxxxxx>
Signed-off-by: Shaohua Li <shaohua.li@xxxxxxxxx>
cc: stable@xxxxxxxxxx
Signed-off-by: Len Brown <len.brown@xxxxxxxxx>

commit 5392083748a340f68052c0b83a7ce28b10324972
Author: Len Brown <len.brown@xxxxxxxxx>
Date: Wed Jan 12 02:56:15 2011 -0500

cpuidle: CPUIDLE_FLAG_CHECK_BM is omap3_idle specific

Signed-off-by: Len Brown <len.brown@xxxxxxxxx>

commit 956d033fb2eb3f8818260cdf01644bf4dc1a9e33
Author: Len Brown <len.brown@xxxxxxxxx>
Date: Wed Jan 12 02:51:20 2011 -0500

cpuidle: CPUIDLE_FLAG_TLB_FLUSHED is specific to intel_idle

Signed-off-by: Len Brown <len.brown@xxxxxxxxx>

commit 642f11c53f17aee991d97d14e6922172849ef227
Author: Len Brown <len.brown@xxxxxxxxx>
Date: Wed Jan 12 02:45:00 2011 -0500

cpuidle: delete unused CPUIDLE_FLAG_SHALLOW, BALANCED, DEEP definitions

Signed-off-by: Len Brown <len.brown@xxxxxxxxx>

commit 03d8b083511a7be2c69b750b8a4e412a21189291
Author: Len Brown <len.brown@xxxxxxxxx>
Date: Wed Jan 12 02:43:26 2011 -0500

SH, cpuidle: delete use of NOP CPUIDLE_FLAGS_SHALLOW

set but not checked.

Signed-off-by: Len Brown <len.brown@xxxxxxxxx>

commit d247632c08c674864d438733280422ddb7130ff8
Author: Len Brown <len.brown@xxxxxxxxx>
Date: Wed Jan 12 02:34:59 2011 -0500

cpuidle: delete NOP CPUIDLE_FLAG_POLL

it serves no purpose

Signed-off-by: Len Brown <len.brown@xxxxxxxxx>

commit 0aae9f923bcc476a8e4725dd3ac37547b9816ee5
Author: Len Brown <len.brown@xxxxxxxxx>
Date: Wed Jan 12 02:22:56 2011 -0500

ACPI: processor_idle: delete use of NOP CPUIDLE_FLAGs

CPUIDLE_FLAG_SHALLOW
CPUIDLE_FLAG_BALANCED
CPUIDLE_FLAG_DEEP
CPUIDLE_FLAG_CHECK_BM

were set by acpi_processor_setup_cpuidle(),
but never used by cpuidle or by acpi_idle.
So stop setting them.

Signed-off-by: Len Brown <len.brown@xxxxxxxxx>

commit 720f1c3010db6a411358b962a2007969117840bc
Author: Thomas Renninger <trenn@xxxxxxx>
Date: Fri Jan 7 11:29:43 2011 +0100

cpuidle: Rename X86 specific idle poll state[0] from C0 to POLL

C0 means and is well know as "not idle".
All documentation out there uses this term as "running"/"not idle"
state. Also Linux userspace tools (e.g. cpufreq-aperf and turbostat)
show C0 residency which there is correct, but means something totally
else than cpuidle "POLL" state.

Signed-off-by: Thomas Renninger <trenn@xxxxxxx>
Signed-off-by: Len Brown <len.brown@xxxxxxxxx>

commit d18960494f65ca4fa0d67c865aaca99452070d15
Author: Thomas Renninger <trenn@xxxxxxx>
Date: Wed Nov 3 17:06:14 2010 +0100

ACPI, intel_idle: Cleanup idle= internal variables

Having four variables for the same thing:
idle_halt, idle_nomwait, force_mwait and boot_option_idle_overrides
is rather confusing and unnecessary complex.

if idle= boot param is passed, only set up one variable:
boot_option_idle_overrides

Introduces following functional changes/fixes:
- intel_idle driver does not register if any idle=xy
boot param is passed.
- processor_idle.c will also not register a cpuidle driver
and get active if idle=halt is passed.
Before a cpuidle driver with one (C1, halt) state got registered
Now the default_idle function will be used which finally uses
the same idle call to enter sleep state (safe_halt()), but
without registering a whole cpuidle driver.

That means idle= param will always avoid cpuidle drivers to register
with one exception (same behavior as before):
idle=nomwait
may still register acpi_idle cpuidle driver, but C1 will not use
mwait, but hlt. This can be a workaround for IO based deeper sleep
states where C1 mwait causes problems.

Signed-off-by: Thomas Renninger <trenn@xxxxxxx>
cc: x86@xxxxxxxxxx
Signed-off-by: Len Brown <len.brown@xxxxxxxxx>

commit d8c216cfa57e8a579f41729cbb88c97835d9ac8d
Author: Rafael J. Wysocki <rjw@xxxxxxx>
Date: Sat Jan 8 00:29:20 2011 +0100

cpuidle: Make cpuidle_enable_device() call poll_idle_init()

The following scenario is possible with the current cpuidle code and
the ACPI cpuidle driver:
(1) acpi_processor_cst_has_changed() is called,
(2) cpuidle_disable_device() is called,
(3) cpuidle_remove_state_sysfs() is called to remove the (presumably
outdated) states info from sysfs,
(3) acpi_processor_get_power_info() is called, the first entry in the
pr->power.states[] table is filled with zeros,
(4) acpi_processor_setup_cpuidle() is called and it doesn't fill the
first entry in pr->power.states[],
(5) cpuidle_enable_device() is called,
(6) __cpuidle_register_device() is _not_ called, since the device has
already been registered,
(7) Consequently, poll_idle_init() is _not_ called either,
(8) cpuidle_add_state_sysfs() is called to create the sysfs attributes
for the new states and it uses the bogus first table entry from
acpi_processor_get_power_info() for creating state0.

This problem is avoided if cpuidle_enable_device()
unconditionally calls poll_idle_init().

Reported-by: Len Brown <len.brown@xxxxxxxxx>
Signed-off-by: Rafael J. Wysocki <rjw@xxxxxxx>
Signed-off-by: Len Brown <len.brown@xxxxxxxxx>
cc: stable@xxxxxxxxxx

commit ddbd550d503c9cdefcd6674a0ef168d57d3f0917
Author: Len Brown <len.brown@xxxxxxxxx>
Date: Mon Dec 13 18:28:22 2010 -0500

intel_idle: update Sandy Bridge core C-state residency targets

Signed-off-by: Len Brown <len.brown@xxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/