Hi Andrey,
This is PULL request for big LITTLE MP v8 branch:
Major updates are:
- Based on v3.6-rc5
- new branch from Paulm: rcu-hotplug-v1, vincent:
scheduler-misc-v1 and sudeepk arm-multi_pmu_v1
- new version of patches from Morten: task-placement-v2
- config fragment updated for fast & slow cpu
Compile tested only.
-----------------------------------------x-------------------------x-------------------------------
The following changes since commit 55d512e245bc7699a8800e23df1a24195dd08217:
Linux 3.6-rc5 (2012-09-08 16:43:45 -0700)
are available in the git repository at:
git://git.linaro.org/arm/big.LITTLE/mp.git big-LITTLE-MP-v8
for you to fetch changes up to eb07c27e2987ab3c16cedee1367694988efe3ff4:
Merge branches 'per-cpu-thread-hotplug-v3-fixed',
'task-placement-v2', 'cpu-hotplug-get_online_cpus-v1',
'arm-asymmetric-support-v3-v3.6-rc1', 'rcu-hotplug-v1',
'arm-multi_pmu_v1', 'scheduler-misc-v1' and 'config-fragments' into
big-LITTLE-MP-v8 (2012-09-17 09:26:07 +0530)
----------------------------------------------------------------
Axel Lin (1):
ARM: ux500: Fix build error due to missing include of asm/pmu.h
in cpu-db8500.c
Ben Segall (1):
sched: maintain per-rq runnable averages
Jon Hunter (1):
ARM: PMU: Add runtime PM Support
Jon Medhurst (6):
configs: Initial core configs
configs: Make CONFIG_MODULES part of linaro-base
Merge branch 'config-core-3.4' into config-core-tracking
configs: Replace CONFIG_PERF_COUNTERS with CONFIG_PERF_EVENTS
configs: android: Enable FB_EARLYSUSPEND
configs: android: Enable CONFIG_INPUT_UINPUT to get aidb working
Lorenzo Pieralisi (1):
ARM: kernel: provide cluster to logical cpu mask mapping API
Morten Rasmussen (10):
sched: entity load-tracking load_avg_ratio
sched: Task placement for heterogeneous systems based on task
load-tracking
sched: Forced task migration on heterogeneous systems
sched: Introduce priority-based task migration filter
ARM: Add HMP scheduling support for ARM architecture
ARM: sched: Use device-tree to provide fast/slow CPU list for HMP
ARM: sched: Setup SCHED_HMP domains
sched: Add ftrace events for entity load-tracking
sched: Add HMP task migration ftrace event
sched: SCHED_HMP multi-domain task migration control
Paul E. McKenney (4):
rcu: Use smp_hotplug_thread facility for RCUs per-CPU kthread
hotplug: Fix UP bug in smpboot hotplug code
rcu: Remove _rcu_barrier() dependency on __stop_machine()
rcu: Disallow callback registry on offline CPUs
Paul Turner (15):
sched: track the runnable average on a per-task entitiy basis
sched: aggregate load contributed by task entities on parenting cfs_rq
sched: maintain the load contribution of blocked entities
sched: add an rq migration call-back to sched_class
sched: account for blocked load waking back up
sched: aggregate total task_group load
sched: compute load contribution by a group entity
sched: normalize tg load contributions against runnable time
sched: maintain runnable averages across throttled periods
sched: replace update_shares weight distribution with per-entity
computation
sched: refactor update_shares_cpu() -> update_blocked_avgs()
sched: update_cfs_shares at period edge
sched: make __update_entity_runnable_avg() fast
sched: implement usage tracking
sched: introduce temporary FAIR_GROUP_SCHED dependency for load-tracking
Peter Zijlstra (1):
sched: Fix load avg vs cpu-hotplug
Ricardo Salveti de Araujo (8):
configs: moving previous ubuntu.conf as ubuntu-minimal and
creating a full ubuntu one
configs: ubuntu: be compatible with the enforce script
configs: ubuntu: disabling CODA_FS, seems to be broken atm
configs: ubuntu: disabling CGROUPS as default
Merge branch 'config-core-3.4' into config-core-tracking
configs: ubuntu: updating configs for 3.5
configs: ubuntu: disabling CONFIG_MTD_NAND_NANDSIM=m, breaking build
config: ubuntu: ATH6KL should be platform dependent
Silas Boyd-Wickizer (6):
Use get_online_cpus to avoid races involving CPU hotplug
Use get_online_cpus to avoid races involving CPU hotplug
Use get_online_cpus to avoid races involving CPU hotplug
Use get_online_cpus to avoid races involving CPU hotplug
Use get_online_cpus to avoid races involving CPU hotplug
Use get_online_cpus to avoid races involving CPU hotplug
Sudeep KarkadaNagesha (9):
ARM: pmu: remove arm_pmu_type enumeration
ARM: perf: move irq registration into pmu implementation
ARM: perf: allocation of cpu_pmu at init time
ARM: perf: change multiple arm_pmu function parameters to struct
perf_event
ARM: perf: rework on armv7_pmnc_counter_valid
ARM: perf: define per-cpu arm_pmu instead of a single global pointer
ARM: perf: register the init functions with the bindings
ARM: perf: add support for per-cluster/multiple PMUs
ARM: perf: save/restore pmu registers in pm notifier
Thomas Gleixner (6):
rcu: Yield simpler
kthread: Implement park/unpark facility
smpboot: Provide infrastructure for percpu hotplug threads
softirq: Use hotplug thread infrastructure
watchdog: Use hotplug thread infrastructure
infiniband: ehca: Use hotplug thread infrastructure
Vincent Guittot (2):
sched: cpu_power: enable ARCH_POWER
sched: Fix nohz_idle_balance()
Viresh Kumar (4):
configs: Add config fragments for big LITTLE MP
linaro/configs: Update big LITTLE MP fragment for task placement work
config-frag/big-LITTLE: Use device-tree to provide fast/slow CPU
list for HMP
Merge branches 'per-cpu-thread-hotplug-v3-fixed',
'task-placement-v2', 'cpu-hotplug-get_online_cpus-v1',
'arm-asymmetric-support-v3-v3.6-rc1', 'rcu-hotplug-v1',
'arm-multi_pmu_v1', 'scheduler-misc-v1' and 'config-fragments' into
big-LITTLE-MP-v8
Will Deacon (6):
ARM: perf: add devicetree bindings for 11MPcore, A5, A7 and A15 PMUs
ARM: pmu: remove unused reservation mechanism
ARM: perf: remove mysterious compiler barrier
ARM: perf: probe devicetree in preference to current CPU
ARM: perf: prepare for moving CPU PMU code into separate file
ARM: perf: move CPU-specific PMU handling code into separate file
Documentation/devicetree/bindings/arm/pmu.txt | 7 +
MAINTAINERS | 1 -
arch/arm/Kconfig | 54 +-
arch/arm/include/asm/perf_event.h | 9 +-
arch/arm/include/asm/pmu.h | 128 +-
arch/arm/include/asm/topology.h | 35 +
arch/arm/kernel/Makefile | 4 +-
arch/arm/kernel/perf_event.c | 391 +----
arch/arm/kernel/perf_event_cpu.c | 351 ++++
arch/arm/kernel/perf_event_v6.c | 152 +-
arch/arm/kernel/perf_event_v7.c | 330 ++--
arch/arm/kernel/perf_event_xscale.c | 179 ++-
arch/arm/kernel/pmu.c | 36 -
arch/arm/kernel/topology.c | 118 ++
arch/arm/mach-bcmring/arch.c | 3 +-
arch/arm/mach-omap2/devices.c | 3 +-
arch/arm/mach-pxa/devices.c | 3 +-
arch/arm/mach-realview/realview_eb.c | 3 +-
arch/arm/mach-realview/realview_pb1176.c | 3 +-
arch/arm/mach-realview/realview_pb11mp.c | 3 +-
arch/arm/mach-realview/realview_pba8.c | 3 +-
arch/arm/mach-realview/realview_pbx.c | 3 +-
arch/arm/mach-tegra/devices.c | 3 +-
arch/arm/mach-ux500/cpu-db8500.c | 4 +-
arch/arm/mach-vexpress/ct-ca9x4.c | 3 +-
arch/arm/plat-iop/pmu.c | 3 +-
arch/arm/plat-samsung/devs.c | 3 +-
arch/x86/kernel/cpuid.c | 5 +
arch/x86/kernel/msr.c | 5 +
drivers/hwmon/coretemp.c | 5 +
drivers/hwmon/via-cputemp.c | 5 +
drivers/infiniband/hw/ehca/ehca_irq.c | 253 ++-
drivers/infiniband/hw/ehca/ehca_irq.h | 6 +-
include/linux/kthread.h | 11 +-
include/linux/sched.h | 34 +
include/linux/smpboot.h | 43 +
include/trace/events/sched.h | 153 ++
kernel/Makefile | 3 +-
kernel/cpu.c | 10 +-
kernel/kthread.c | 185 ++-
kernel/rcutree.c | 105 +-
kernel/rcutree.h | 18 +-
kernel/rcutree_plugin.h | 403 +----
kernel/rcutree_trace.c | 7 +-
kernel/sched/core.c | 56 +-
kernel/sched/debug.c | 39 +-
kernel/sched/fair.c | 1258 +++++++++++++--
kernel/sched/features.h | 2 +-
kernel/sched/sched.h | 68 +-
kernel/smpboot.c | 233 +++
kernel/smpboot.h | 4 +
kernel/softirq.c | 108 +-
kernel/watchdog.c | 263 ++-
linaro/configs/android.conf | 33 +
linaro/configs/big-LITTLE-MP.conf | 9 +
linaro/configs/linaro-base.conf | 84 +
linaro/configs/ubuntu-minimal.conf | 24 +
linaro/configs/ubuntu.conf | 2133 +++++++++++++++++++++++++
58 files changed, 5548 insertions(+), 1852 deletions(-)
create mode 100644 arch/arm/kernel/perf_event_cpu.c
delete mode 100644 arch/arm/kernel/pmu.c
create mode 100644 include/linux/smpboot.h
create mode 100644 linaro/configs/android.conf
create mode 100644 linaro/configs/big-LITTLE-MP.conf
create mode 100644 linaro/configs/linaro-base.conf
create mode 100644 linaro/configs/ubuntu-minimal.conf
create mode 100644 linaro/configs/ubuntu.conf
Hey everyone, I'm sending out general invites based on this for anyone
who's looking for something to use or modify:
Howdy y’all! This is Zach on the Linaro Android team with an
invitation to our upcoming Linaro Connect event.
Tired of carrying changes around on your internal trees? Looking to
get some possibly disruptive changes changes into the Linux kernel,
GCC or another upstream? Just want to chat and plan for the future of
ARM open-source with developers who are passionate about the SoCs that
run Android and other Linux based distributions? If you answered yes
to any of these questions please join us for Linaro Connect in
Copenhagen Oct 29th to Nov 2nd at the Bella Center.
Feel free to email me at zach.pfeffer(a)linaro.org or G+ me for more
information or to participate.
Connect:
http://connect.linaro.org/events/event/lce12-copenhagen/
Register at:
http://connect.linaro.org/register-connect/
Be great to see you there!
--
Zach Pfeffer
Android Platform Team Lead, Linaro Platform Teams
Linaro.org | Open source software for ARM SoCs
Follow Linaro: http://www.facebook.com/pages/Linarohttp://twitter.com/#!/linaroorg - http://www.linaro.org/linaro-blog
Currently we have the cpuidle_device field in the acpi_processor_power structure.
This adds a dependency between processor.h and cpuidle.h
Although it is not a real problem, removing this dependency has the benefit of
separating a bit more the cpuidle code from the rest of the acpi code.
Also, the compilation should be a bit improved because we do no longer
include cpuidle.h in processor.h. The preprocessor was generating 30418 loc
and with this patch it generates 30256 loc for processor_thermal.c, a file
which is not concerned at all by cpuidle, like processor_perflib.c and
processor_throttling.c.
That may sound ridiculous, but "small streams make big rivers" :P
This patch moves this field into a static global per cpu variable like what is
done in the intel_idle driver.
Signed-off-by: Daniel Lezcano <daniel.lezcano(a)linaro.org>
---
drivers/acpi/processor_idle.c | 32 ++++++++++++++++++++++++--------
include/acpi/processor.h | 2 --
2 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index de89624..0a6405d 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -79,6 +79,8 @@ module_param(bm_check_disable, uint, 0000);
static unsigned int latency_factor __read_mostly = 2;
module_param(latency_factor, uint, 0644);
+static DEFINE_PER_CPU(struct cpuidle_device *, acpi_cpuidle_device);
+
static int disabled_by_idle_boot_param(void)
{
return boot_option_idle_override == IDLE_POLL ||
@@ -998,7 +1000,7 @@ static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr)
int i, count = CPUIDLE_DRIVER_STATE_START;
struct acpi_processor_cx *cx;
struct cpuidle_state_usage *state_usage;
- struct cpuidle_device *dev = &pr->power.dev;
+ struct cpuidle_device *dev = per_cpu(acpi_cpuidle_device, pr->id);
if (!pr->flags.power_setup_done)
return -EINVAL;
@@ -1130,6 +1132,7 @@ static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
int acpi_processor_hotplug(struct acpi_processor *pr)
{
int ret = 0;
+ struct cpuidle_device *dev = per_cpu(acpi_cpuidle_device, pr->id);
if (disabled_by_idle_boot_param())
return 0;
@@ -1145,11 +1148,11 @@ int acpi_processor_hotplug(struct acpi_processor *pr)
return -ENODEV;
cpuidle_pause_and_lock();
- cpuidle_disable_device(&pr->power.dev);
+ cpuidle_disable_device(dev);
acpi_processor_get_power_info(pr);
if (pr->flags.power) {
acpi_processor_setup_cpuidle_cx(pr);
- ret = cpuidle_enable_device(&pr->power.dev);
+ ret = cpuidle_enable_device(dev);
}
cpuidle_resume_and_unlock();
@@ -1160,6 +1163,7 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr)
{
int cpu;
struct acpi_processor *_pr;
+ struct cpuidle_device *dev;
if (disabled_by_idle_boot_param())
return 0;
@@ -1190,7 +1194,8 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr)
_pr = per_cpu(processors, cpu);
if (!_pr || !_pr->flags.power_setup_done)
continue;
- cpuidle_disable_device(&_pr->power.dev);
+ dev = per_cpu(acpi_cpuidle_device, cpu);
+ cpuidle_disable_device(dev);
}
/* Populate Updated C-state information */
@@ -1204,7 +1209,8 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr)
acpi_processor_get_power_info(_pr);
if (_pr->flags.power) {
acpi_processor_setup_cpuidle_cx(_pr);
- cpuidle_enable_device(&_pr->power.dev);
+ dev = per_cpu(acpi_cpuidle_device, cpu);
+ cpuidle_enable_device(dev);
}
}
put_online_cpus();
@@ -1221,6 +1227,7 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr,
{
acpi_status status = 0;
int retval;
+ struct cpuidle_device *dev;
static int first_run;
if (disabled_by_idle_boot_param())
@@ -1266,11 +1273,18 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr,
printk(KERN_DEBUG "ACPI: %s registered with cpuidle\n",
acpi_idle_driver.name);
}
+
+ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+ if (!dev)
+ return -ENOMEM;
+ per_cpu(acpi_cpuidle_device, pr->id) = dev;
+
+ acpi_processor_setup_cpuidle_cx(pr);
+
/* Register per-cpu cpuidle_device. Cpuidle driver
* must already be registered before registering device
*/
- acpi_processor_setup_cpuidle_cx(pr);
- retval = cpuidle_register_device(&pr->power.dev);
+ retval = cpuidle_register_device(dev);
if (retval) {
if (acpi_processor_registered == 0)
cpuidle_unregister_driver(&acpi_idle_driver);
@@ -1284,11 +1298,13 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr,
int acpi_processor_power_exit(struct acpi_processor *pr,
struct acpi_device *device)
{
+ struct cpuidle_device *dev = per_cpu(acpi_cpuidle_device, pr->id);
+
if (disabled_by_idle_boot_param())
return 0;
if (pr->flags.power) {
- cpuidle_unregister_device(&pr->power.dev);
+ cpuidle_unregister_device(dev);
acpi_processor_registered--;
if (acpi_processor_registered == 0)
cpuidle_unregister_driver(&acpi_idle_driver);
diff --git a/include/acpi/processor.h b/include/acpi/processor.h
index db427fa..ddd1a44 100644
--- a/include/acpi/processor.h
+++ b/include/acpi/processor.h
@@ -3,7 +3,6 @@
#include <linux/kernel.h>
#include <linux/cpu.h>
-#include <linux/cpuidle.h>
#include <linux/thermal.h>
#include <asm/acpi.h>
@@ -64,7 +63,6 @@ struct acpi_processor_cx {
};
struct acpi_processor_power {
- struct cpuidle_device dev;
struct acpi_processor_cx *state;
unsigned long bm_check_timestamp;
u32 default_state;
--
1.7.5.4
Calendar Week 37: Here is test result summary for Linaro ubuntu platform on
following boards:
1) ARM Versatile Express A9;
2) Samsung Origen;
3) TI Panda Board 4430;
4) TI Panda Board 4460.
*Synopsis: Power Management test lets Panda 4430 crashed, but works well on
Panda 4460. Device tree is still unavailable on Versatile Express A9.
YouTube backs to work on Origen but Power Management test hangs the board.
Application debug in DS-5 is unavailable on all boards.*
1. vexpress A9 + ubuntu (Column Y):
https://docs.google.com/a/linaro.org/spreadsheet/ccc?key=0AroPySpr4FnEdFNmV…
"reboot" works. This is the only difference between last week and this week
test result. Device tree blob files have disappeared for more than 1 month,
and DS-5 application debug is still unavailable. 480p video totally can't
be played back, and this issue has exists for 8 weeks. In past, the video
can be played, but not smoothly; now it doesn't work at all.
2. Origen + ubuntu (Column U):
https://docs.google.com/a/linaro.org/spreadsheet/ccc?key=0AroPySpr4FnEdEowN…
YouTube works, although the FPS is low but it's at least acceptable now.
All the other features status remain the same as last week. The power
management test still hangs system, and this issue has been there for 5
weeks. Also, WiFi has been unavailable for 3 weeks. For more details,
please click above link.
3. Panda 4430 + ubuntu (Column V):
https://docs.google.com/a/linaro.org/spreadsheet/ccc?key=0AroPySpr4FnEdEwwZ…
YouTube starts to work, after video buffering completed, it can play video
well. 1080p video now can be played well too, with this extra codec package
- "ubuntu-omap4-extras-multimedia". Power management starts to let system
crash but it worked well in last week. DS-5 data streaming works with this
package installed - "gator-module-dkms". For suspend / resume test, the
board can't be woken up. All the others remain the same as last week.
4. Panda 4460 + ubuntu (Column V):
https://docs.google.com/a/linaro.org/spreadsheet/ccc?key=0AroPySpr4FnEdEwwZ…
Although file transfer via Bluetooth is still unavailable, the other
features works well, such like device pairing, Bluetooth headset, etc.
Power management test fully passed in this image. For DS-5, after install
"gator-module-dkms", data streaming works well too, although application
debug feature is still unavailable. All the other features remain the same,
please refer to above test result spreadsheet to find more.
For the previous week (Calendar week 36) summary, please refer to
attachment.
Thank you.
BR
Botao Sun