Adding libdw DWARF post unwind support, which is part
of elfutils-devel/libdw-dev package from version 0.158.
Also includes the test suite for dwarf unwinding, by adding the
arch specific test code and the perf_regs_load function.
Jean Pihet (3):
perf tests: Introduce perf_regs_load function on ARM
perf tests: Add dwarf unwind test on ARM
perf tools: Add libdw DWARF post unwind support for ARM
tools/perf/Makefile.perf | 2 +-
tools/perf/arch/arm/Makefile | 7 ++++
tools/perf/arch/arm/include/perf_regs.h | 5 +++
tools/perf/arch/arm/tests/dwarf-unwind.c | 59 +++++++++++++++++++++++++++++++
tools/perf/arch/arm/tests/regs_load.S | 60 ++++++++++++++++++++++++++++++++
tools/perf/arch/arm/util/unwind-libdw.c | 36 +++++++++++++++++++
tools/perf/tests/builtin-test.c | 2 +-
tools/perf/tests/tests.h | 2 +-
8 files changed, 170 insertions(+), 3 deletions(-)
create mode 100644 tools/perf/arch/arm/tests/dwarf-unwind.c
create mode 100644 tools/perf/arch/arm/tests/regs_load.S
create mode 100644 tools/perf/arch/arm/util/unwind-libdw.c
---
Rebased on the latest jolsa/perf/core
--
1.7.11.7
Hi Alex/Mark
Here's a pull request for the latest changes to big.LITTLE MP. These are
essentially the same changes as we had last month before they were
reverted pending more analysis.
The following changes since commit 1ade57e54ea2257ccf753dbd54144769439c3c70:
sched: hmp: Change small task packing defaults for all platforms (2014-05-07 11:34:00 +0100)
are available in the git repository at:
git://git.linaro.org/arm/big.LITTLE/mp.git for-lsk
for you to fetch changes up to d1df056f9e6dd9707037ed74621e170dfa8f4c52:
hmp: dont attempt to pull tasks if affinity doesn't allow it (2014-05-09 17:22:39 +0100)
----------------------------------------------------------------
Chris Redpath (4):
hmp: sched: Clean up hmp_up_threshold checks into a utility fn
sched: hmp: unify active migration code
hmp: Use idle pull to perform forced up-migrations
hmp: dont attempt to pull tasks if affinity doesn't allow it
kernel/sched/core.c | 11 +-
kernel/sched/fair.c | 395 ++++++++++++++++++++++++++++----------------------
kernel/sched/sched.h | 1 +
3 files changed, 230 insertions(+), 177 deletions(-)
There is a requirement to add another mode: CLOCK_EVT_MODE_ONESHOT_STOPPED
(lkml.org/lkml/2014/5/9/508) to clockevent devices and clockevent-drivers may or
maynot support it. And so can return failure codes on a call to ->set_mode(),
which has a return type of 'void' as of now.
To fix that, add another callback ->set_dev_mode(), with return type 'int'. All
clockevent drivers will be migrated to use this new interface later. Also mark
->set_mode() deprecated.
In order to propagate error codes to callers of clockevents_set_mode(), its
return type is also changed to 'int', but all the error handling is done inside
clockevents_set_mode() currently as none of the currently available modes are
allowed to fail.
Signed-off-by: Viresh Kumar <viresh.kumar(a)linaro.org>
---
Hi Daniel/Preeti/Others..
I need to get some level of reviews done for some of my patches because of this:
https://lkml.org/lkml/2014/5/12/206
A reviewed-by: would be very helpful to get this upstreamed. Please review and
point out any improvement in the patch or the log..
V1->V2:
- Don't sprinkly WARN_ON() on call sites of clockevents_set_mode()
- Handle errors returned from ->set_dev_mode() in clockevents_set_mode() only.
include/linux/clockchips.h | 7 +++++--
kernel/time/clockevents.c | 29 ++++++++++++++++++++++++-----
kernel/time/timer_list.c | 9 +++++++--
3 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h
index 2e4cb67..bf902bf 100644
--- a/include/linux/clockchips.h
+++ b/include/linux/clockchips.h
@@ -81,7 +81,8 @@ enum clock_event_mode {
* @mode: operating mode assigned by the management code
* @features: features
* @retries: number of forced programming retries
- * @set_mode: set mode function
+ * @set_dev_mode: set dev mode function
+ * @set_mode: set mode function (deprecated, use set_dev_mode instead)
* @broadcast: function to broadcast events
* @min_delta_ticks: minimum delta value in ticks stored for reconfiguration
* @max_delta_ticks: maximum delta value in ticks stored for reconfiguration
@@ -109,6 +110,8 @@ struct clock_event_device {
unsigned long retries;
void (*broadcast)(const struct cpumask *mask);
+ int (*set_dev_mode)(enum clock_event_mode mode,
+ struct clock_event_device *);
void (*set_mode)(enum clock_event_mode mode,
struct clock_event_device *);
void (*suspend)(struct clock_event_device *);
@@ -160,7 +163,7 @@ extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq);
extern void clockevents_exchange_device(struct clock_event_device *old,
struct clock_event_device *new);
-extern void clockevents_set_mode(struct clock_event_device *dev,
+extern int clockevents_set_mode(struct clock_event_device *dev,
enum clock_event_mode mode);
extern int clockevents_program_event(struct clock_event_device *dev,
ktime_t expires, bool force);
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
index ad362c2..087a5aa 100644
--- a/kernel/time/clockevents.c
+++ b/kernel/time/clockevents.c
@@ -101,11 +101,20 @@ EXPORT_SYMBOL_GPL(clockevent_delta2ns);
*
* Must be called with interrupts disabled !
*/
-void clockevents_set_mode(struct clock_event_device *dev,
+int clockevents_set_mode(struct clock_event_device *dev,
enum clock_event_mode mode)
{
if (dev->mode != mode) {
- dev->set_mode(mode, dev);
+ if (dev->set_dev_mode) {
+ int ret = dev->set_dev_mode(mode, dev);
+
+ /* Currently available modes are not allowed to fail */
+ if (WARN_ON(ret))
+ return ret;
+ } else {
+ dev->set_mode(mode, dev);
+ }
+
dev->mode = mode;
/*
@@ -119,6 +128,8 @@ void clockevents_set_mode(struct clock_event_device *dev,
}
}
}
+
+ return 0;
}
/**
@@ -441,15 +452,23 @@ EXPORT_SYMBOL_GPL(clockevents_config_and_register);
int __clockevents_update_freq(struct clock_event_device *dev, u32 freq)
{
+ int ret = 0;
+
clockevents_config(dev, freq);
if (dev->mode == CLOCK_EVT_MODE_ONESHOT)
return clockevents_program_event(dev, dev->next_event, false);
- if (dev->mode == CLOCK_EVT_MODE_PERIODIC)
- dev->set_mode(CLOCK_EVT_MODE_PERIODIC, dev);
+ if (dev->mode == CLOCK_EVT_MODE_PERIODIC) {
+ if (dev->set_dev_mode) {
+ ret = dev->set_dev_mode(CLOCK_EVT_MODE_PERIODIC, dev);
+ WARN_ON(ret);
+ } else {
+ dev->set_mode(CLOCK_EVT_MODE_PERIODIC, dev);
+ }
+ }
- return 0;
+ return ret;
}
/**
diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
index 61ed862..3d854aa 100644
--- a/kernel/time/timer_list.c
+++ b/kernel/time/timer_list.c
@@ -228,8 +228,13 @@ print_tickdevice(struct seq_file *m, struct tick_device *td, int cpu)
print_name_offset(m, dev->set_next_event);
SEQ_printf(m, "\n");
- SEQ_printf(m, " set_mode: ");
- print_name_offset(m, dev->set_mode);
+ if (dev->set_dev_mode) {
+ SEQ_printf(m, " set_dev_mode: ");
+ print_name_offset(m, dev->set_dev_mode);
+ } else {
+ SEQ_printf(m, " set_mode: ");
+ print_name_offset(m, dev->set_mode);
+ }
SEQ_printf(m, "\n");
SEQ_printf(m, " event_handler: ");
--
2.0.0.rc2
From: Liviu Dudau <Liviu.Dudau(a)arm.com>
Signed-off-by: Liviu Dudau <Liviu.Dudau(a)arm.com>
Signed-off-by: Ryan Harkin <ryan.harkin(a)linaro.org>
Signed-off-by: Mark Brown <broonie(a)linaro.org>
---
drivers/usb/phy/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/phy/Kconfig b/drivers/usb/phy/Kconfig
index bbe8f15ac014..2a7f6ea1ccfe 100644
--- a/drivers/usb/phy/Kconfig
+++ b/drivers/usb/phy/Kconfig
@@ -224,7 +224,7 @@ config USB_RCAR_GEN2_PHY
config USB_ULPI
bool "Generic ULPI Transceiver Driver"
- depends on ARM
+ depends on ARM || ARM64
help
Enable this to support ULPI connected USB OTG transceivers which
are likely found on embedded boards.
--
2.0.0.rc2
Hi Friends,
I recently went through a tool which can be very very useful while
doing similar modification across multiple files.. Examples:
Replace: bool foo = 0; b = 1; b == 1; b == 0, etc
with: bool foo = false; b = true; b == true; b == false, etc
Much more complex things are possible as well..
It wouldn't require any manual intervention even if you have to do
that for all the files present in your repository.
Many of us in Linaro have to regularly work on fixing things around
all available drivers for a particular framework. It would be very useful
there..
Useful Links:
http://coccinelle.lip6.fr/http://coccinelle.lip6.fr/papers.phphttps://www.youtube.com/watch?v=ohyn1DTuh18
I am still trying to learn it more and more, let me know if somebody
is already good in it, will ask some queries :)
(Thanks tglx to enlighten me :))
--
viresh
From: Liviu Dudau <Liviu.Dudau(a)arm.com>
Recent ARM boards have the KMI devices share one interrupt line rather
than having dedicated IRQs. Update the driver to take that into account.
Signed-off-by: Liviu Dudau <Liviu.Dudau(a)arm.com>
Signed-off-by: Mark Brown <broonie(a)linaro.org>
---
drivers/input/serio/ambakmi.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/input/serio/ambakmi.c b/drivers/input/serio/ambakmi.c
index 762b08432de0..8b748d99b934 100644
--- a/drivers/input/serio/ambakmi.c
+++ b/drivers/input/serio/ambakmi.c
@@ -79,7 +79,8 @@ static int amba_kmi_open(struct serio *io)
writeb(divisor, KMICLKDIV);
writeb(KMICR_EN, KMICR);
- ret = request_irq(kmi->irq, amba_kmi_int, 0, "kmi-pl050", kmi);
+ ret = request_irq(kmi->irq, amba_kmi_int, IRQF_SHARED, "kmi-pl050",
+ kmi);
if (ret) {
printk(KERN_ERR "kmi: failed to claim IRQ%d\n", kmi->irq);
writeb(0, KMICR);
--
2.0.0.rc2