hi there,
at HK connect i learned about the ARM energy probe (
http://www.arm.com/about/newsroom/arm-enables-energy-aware-coding-with-the-…).
Since that we ordered some probes, and I was wondering if someone is
working in linaro on enabling power measurements? I would be interested in
DS5 or even command line tools to retrieve information, ideally from
Panda...
thx
Hi Viresh,
Please pull the following changes for the multiple CPU PMU support
(re-based to v3.6-rc5). Few patches in the list below are already
queued up for 3.7.
Since you have access to internal repository, I am posting patches on
the same.
Let me know if you face any issues.
---------------------------------------------------------------------------
The following changes since commit 55d512e245bc7699a8800e23df1a24195dd08217:
Linux 3.6-rc5 (2012-09-08 16:43:45 -0700)
are available in the git repository at:
ssh://username@pdsw-ci.cambridge.arm.com:29418/kernel.git multi_pmu_v1
for you to fetch changes up to ec3a17b94b09870468db575b95fa92c50c9cc778:
ARM: ux500: Fix build error due to missing include of asm/pmu.h in
cpu-db8500.c (2012-09-14 10:00:47 +0100)
----------------------------------------------------------------
Axel Lin (1):
ARM: ux500: Fix build error due to missing include of asm/pmu.h
in cpu-db8500.c
Jon Hunter (1):
ARM: PMU: Add runtime PM Support
Lorenzo Pieralisi (1):
ARM: kernel: provide cluster to logical cpu mask mapping API
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
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 | 8 +-
arch/arm/include/asm/perf_event.h | 9 +-
arch/arm/include/asm/pmu.h | 128 ++++----
arch/arm/include/asm/topology.h | 3 +
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 | 27 ++
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 +-
27 files changed, 916 insertions(+), 750 deletions(-)
create mode 100644 arch/arm/kernel/perf_event_cpu.c
delete mode 100644 arch/arm/kernel/pmu.c
OHCI-HCD driver does not support multiple SoC drivers during the compile
time. Hence the generic driver should be disabled in ubuntu.conf and related
OHCI Soc drivers should be enabled in respective board config files.
Signed-off-by: Tushar Behera <tushar.behera(a)linaro.org>
---
linaro/configs/ubuntu.conf | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/linaro/configs/ubuntu.conf b/linaro/configs/ubuntu.conf
index 5d0a372..88e58df 100644
--- a/linaro/configs/ubuntu.conf
+++ b/linaro/configs/ubuntu.conf
@@ -1556,7 +1556,6 @@ CONFIG_USB_OXU210HP_HCD=m
CONFIG_USB_ISP116X_HCD=m
CONFIG_USB_ISP1760_HCD=m
CONFIG_USB_OHCI_HCD=y
-CONFIG_USB_OHCI_HCD_PLATFORM=y
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_U132_HCD=m
CONFIG_USB_SL811_HCD=m
--
1.7.4.1
synchronize_rcu blocks the caller of opp_enable/disbale
for a complete grace period. This blocking duration prevents
any intensive use of the functions. Replace synchronize_rcu
by call_rcu which will call our function for freeing the old
opp element.
The duration of opp_enable and opp_disable will be no more
dependant of the grace period.
Signed-off-by: Vincent Guittot <vincent.guittot(a)linaro.org>
---
drivers/base/power/opp.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
index ac993ea..49e4626 100644
--- a/drivers/base/power/opp.c
+++ b/drivers/base/power/opp.c
@@ -64,6 +64,7 @@ struct opp {
unsigned long u_volt;
struct device_opp *dev_opp;
+ struct rcu_head head;
};
/**
@@ -441,6 +442,17 @@ int opp_add(struct device *dev, unsigned long freq, unsigned long u_volt)
}
/**
+ * opp_free_rcu() - helper to clear the struct opp when grace period has
+ * elapsed without blocking the the caller of opp_set_availability
+ */
+static void opp_free_rcu(struct rcu_head *head)
+{
+ struct opp *opp = container_of(head, struct opp, head);
+
+ kfree(opp);
+}
+
+/**
* opp_set_availability() - helper to set the availability of an opp
* @dev: device for which we do this operation
* @freq: OPP frequency to modify availability
@@ -511,7 +523,7 @@ static int opp_set_availability(struct device *dev, unsigned long freq,
list_replace_rcu(&opp->node, &new_opp->node);
mutex_unlock(&dev_opp_list_lock);
- synchronize_rcu();
+ call_rcu(&opp->head, opp_free_rcu);
/* Notify the change of the OPP availability */
if (availability_req)
@@ -521,13 +533,10 @@ static int opp_set_availability(struct device *dev, unsigned long freq,
srcu_notifier_call_chain(&dev_opp->head, OPP_EVENT_DISABLE,
new_opp);
- /* clean up old opp */
- new_opp = opp;
- goto out;
+ return 0;
unlock:
mutex_unlock(&dev_opp_list_lock);
-out:
kfree(new_opp);
return r;
}
--
1.7.9.5
Hi -
We've been getting some good mileage from the llct-based tilt-3.4
history tree the last months.
However a couple of points have been raised by TI which really boil down
to being about the deal with llct post-release. We know that it goes on
mutating and tracking as it should, but the release-specific version,
like "linux-linaro-3.4" just sits there afaik.
The points raised were:
1) Can we have linux stable point release content in tilt-3.4? Rather
than my doing it, isn't it better to add it to llc-3.4 and merge it on
the lt history tree periodically? That way every lt can get them from
one place.
2) What's the deal with things that were the latest and greatest at that
time, ie, the best "CMA" or whatever series was in tracking, but after
it got copied out to be linux-linaro-core-3.4, horrible bugs were fixed
in linux-linaro-tracking? What's happening is that TI are sticking with
these releases for a fair time as the basis for their release to customers.
I can see there's tension between tracking-style fix it for the future,
and backport to old and crusty things, there's also issue of testing,
but there must be some cases where this makes some sense. Again people
looking after the feature tree for llct are best placed to make those
calls about, "hm, that looks like it should maybe also go on the last
couple of llc release trees".
What do you think about this?
-Andy
--
Andy Green | TI Landing Team Leader
Linaro.org │ Open source software for ARM SoCs | Follow Linaro
http://facebook.com/pages/Linaro/155974581091106 -
http://twitter.com/#!/linaroorg - http://linaro.org/linaro-blog
From: Rajagopal Venkat <rajagopal.venkat(a)linaro.org>
This patchset updates devfreq core to add support for devices
which can idle. When device idleness is detected perhaps
through runtime-pm, need some mechanism to suspend devfreq
load monitoring and resume when device is back online.
patch 1 introduce core design changes - per device work, decouple
delayed work from core and event based interaction.
patch 2 add devfreq suspend and resume apis.
patch 3 add new sysfs attribute for governor predicted next target
frequency and callback for current device frequency.
The existing devfreq apis are kept intact. Two new apis
devfreq_suspend_device() and devfreq_resume_device() are
added to support suspend/resume of device devfreq.
Changes since v1:
- revised locking mechanism
- added kerneldoc comments for load monitoring helper functions
- Fixed minor review comments
--
Rajagopal Venkat (3):
devfreq: Core updates to support devices which can idle
devfreq: Add suspend and resume apis
devfreq: Add current freq callback in device profile
Documentation/ABI/testing/sysfs-class-devfreq | 15 +-
drivers/devfreq/devfreq.c | 413 +++++++++++---------------
drivers/devfreq/governor.h | 11 +
drivers/devfreq/governor_performance.c | 16 +-
drivers/devfreq/governor_powersave.c | 16 +-
drivers/devfreq/governor_simpleondemand.c | 40 +++
drivers/devfreq/governor_userspace.c | 23 +-
include/linux/devfreq.h | 46 ++-
8 files changed, 291 insertions(+), 289 deletions(-)
--
1.7.11.3
On tickless system, one CPU runs load balance for all idle CPUs.
The cpu_load of this CPU is updated before starting the load balance
of each other idle CPUs. We should instead update the cpu_load of the balance_cpu.
Signed-off-by: Vincent Guittot <vincent.guittot(a)linaro.org>
---
kernel/sched/fair.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 1ca4fe4..9ae3a5b 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -4794,14 +4794,15 @@ static void nohz_idle_balance(int this_cpu, enum cpu_idle_type idle)
if (need_resched())
break;
- raw_spin_lock_irq(&this_rq->lock);
- update_rq_clock(this_rq);
- update_idle_cpu_load(this_rq);
- raw_spin_unlock_irq(&this_rq->lock);
+ rq = cpu_rq(balance_cpu);
+
+ raw_spin_lock_irq(&rq->lock);
+ update_rq_clock(rq);
+ update_idle_cpu_load(rq);
+ raw_spin_unlock_irq(&rq->lock);
rebalance_domains(balance_cpu, CPU_IDLE);
- rq = cpu_rq(balance_cpu);
if (time_after(this_rq->next_balance, rq->next_balance))
this_rq->next_balance = rq->next_balance;
}
--
1.7.9.5
This patchset creates an arch_scale_freq_power function for ARM, which is used
to set the relative capacity of each core of a big.LITTLE system. It also removes
the broken power estimation of x86.
Modification since v3:
- Add comments
- Add optimization for SMP system
- Ensure that capacity of a CPU will be at most 1
Modification since v2:
- set_power_scale function becomes static
- Rework loop in update_siblings_masks
- Remove useless code in parse_dt_topology
Modification since v1:
- Add and update explanation about the use of the table and the range of the value
- Remove the use of NR_CPUS and use nr_cpu_ids instead
- Remove broken power estimation of x86
Peter Zijlstra (1):
sched, x86: Remove broken power estimation
Vincent Guittot (4):
ARM: topology: Add arch_scale_freq_power function
ARM: topology: factorize the update of sibling masks
ARM: topology: Update cpu_power according to DT information
sched: cpu_power: enable ARCH_POWER
arch/arm/kernel/topology.c | 239 ++++++++++++++++++++++++++++++++++++++----
arch/x86/kernel/cpu/Makefile | 2 +-
arch/x86/kernel/cpu/sched.c | 55 ----------
kernel/sched/features.h | 2 +-
4 files changed, 219 insertions(+), 79 deletions(-)
delete mode 100644 arch/x86/kernel/cpu/sched.c
--
1.7.9.5