2013-04-07 23:02:59

by Jonghwan Choi

[permalink] [raw]
Subject: [RESEND PATCH 3.8-stable] ARM: EXYNOS: Fix crash on soft reset on EXYNOS5440

This patch looks like it should be in the 3.8-stable tree, should we apply
it?

------------------

From: "Thomas Abraham <[email protected]>"

commit 60db7e5f9c9a25a7a9b01007e6e3f5a93bc16a3a upstream

The soft-reset control register is located in the XMU controller space.
Map this controller space before writing to the soft-reset controller
register.

Signed-off-by: Thomas Abraham <[email protected]>
Signed-off-by: Girish K S <[email protected]>
Signed-off-by: Kukjin <[email protected]>
Signed-off-by: Jonghwan Choi <[email protected]>
---
arch/arm/mach-exynos/common.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c
index 1a89824..3b6de7a 100644
--- a/arch/arm/mach-exynos/common.c
+++ b/arch/arm/mach-exynos/common.c
@@ -299,6 +299,7 @@ void exynos4_restart(char mode, const char *cmd)

void exynos5_restart(char mode, const char *cmd)
{
+ struct device_node *np;
u32 val;
void __iomem *addr;

@@ -306,8 +307,9 @@ void exynos5_restart(char mode, const char *cmd)
val = 0x1;
addr = EXYNOS_SWRESET;
} else if (of_machine_is_compatible("samsung,exynos5440")) {
- val = (0x10 << 20) | (0x1 << 16);
- addr = EXYNOS5440_SWRESET;
+ np = of_find_compatible_node(NULL, NULL,
"samsung,exynos5440-clock");
+ addr = of_iomap(np, 0) + 0xcc;
+ val = (0xfff << 20) | (0x1 << 16);
} else {
pr_err("%s: cannot support non-DT\n", __func__);
return;
--
1.7.9.5


2013-04-25 00:16:11

by Jonghwan Choi

[permalink] [raw]
Subject: [PATCH 3.8-stable] ARM: 7699/1: sched_clock: Add more notrace to prevent

This patch looks like it should be in the 3.8-stable tree, should we apply
it?

------------------

From: "Stephen Boyd <[email protected]>"

commit cea15092f098b7018e89f64a5a14bb71955965d5 upstream

cyc_to_sched_clock() is called by sched_clock() and cyc_to_ns()
is called by cyc_to_sched_clock(). I suspect that some compilers
inline both of these functions into sched_clock() and so we've
been getting away without having a notrace marking. It seems that
my compiler isn't inlining cyc_to_sched_clock() though, so I'm
hitting a recursion bug when I enable the function graph tracer,
causing my system to crash. Marking these functions notrace fixes
it. Technically cyc_to_ns() doesn't need the notrace because it's
already marked inline, but let's just add it so that if we ever
remove inline from that function it doesn't blow up.

Signed-off-by: Stephen Boyd <[email protected]>
Signed-off-by: Russell King <[email protected]>
Signed-off-by: Jonghwan Choi <[email protected]>
---
arch/arm/kernel/sched_clock.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/kernel/sched_clock.c b/arch/arm/kernel/sched_clock.c
index bd6f56b..59d2adb 100644
--- a/arch/arm/kernel/sched_clock.c
+++ b/arch/arm/kernel/sched_clock.c
@@ -45,12 +45,12 @@ static u32 notrace jiffy_sched_clock_read(void)

static u32 __read_mostly (*read_sched_clock)(void) =
jiffy_sched_clock_read;

-static inline u64 cyc_to_ns(u64 cyc, u32 mult, u32 shift)
+static inline u64 notrace cyc_to_ns(u64 cyc, u32 mult, u32 shift)
{
return (cyc * mult) >> shift;
}

-static unsigned long long cyc_to_sched_clock(u32 cyc, u32 mask)
+static unsigned long long notrace cyc_to_sched_clock(u32 cyc, u32 mask)
{
u64 epoch_ns;
u32 epoch_cyc;
--
1.7.9.5ml

2013-04-25 00:26:22

by Stephen Boyd

[permalink] [raw]
Subject: Re: [PATCH 3.8-stable] ARM: 7699/1: sched_clock: Add more notrace to prevent

On 04/24/13 17:16, Jonghwan Choi wrote:
> This patch looks like it should be in the 3.8-stable tree, should we apply
> it?

Sure.

--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

2013-04-30 07:52:50

by Jonghwan Choi

[permalink] [raw]
Subject: [PATCH 3.8-stable] lib/int_sqrt.c: optimize square root algorithm

This patch looks like it should be in the 3.8-stable tree, should we apply
it?

------------------

From: "Davidlohr Bueso <[email protected]>"

commit 30493cc9dddb68066dcc4878015660fdaa8e0965 upstream

Optimize the current version of the shift-and-subtract (hardware)
algorithm, described by John von Newmann[1] and Guy L Steele.

Iterating 1,000,000 times, perf shows for the current version:

Performance counter stats for './sqrt-curr' (10 runs):

27.170996 task-clock # 0.979 CPUs utilized
( +- 3.19% )
3 context-switches # 0.103 K/sec
( +- 4.76% )
0 cpu-migrations # 0.004 K/sec
( +-100.00% )
104 page-faults # 0.004 M/sec
( +- 0.16% )
64,921,199 cycles # 2.389 GHz
( +- 0.03% )
28,967,789 stalled-cycles-frontend # 44.62% frontend cycles idle
( +- 0.18% )
<not supported> stalled-cycles-backend
104,502,623 instructions # 1.61 insns per cycle
# 0.28 stalled cycles per
insn ( +- 0.00% )
34,088,368 branches # 1254.587 M/sec
( +- 0.00% )
4,901 branch-misses # 0.01% of all branches
( +- 1.32% )

0.027763015 seconds time elapsed
( +- 3.22% )

And for the new version:

Performance counter stats for './sqrt-new' (10 runs):

0.496869 task-clock # 0.519 CPUs utilized
( +- 2.38% )
0 context-switches # 0.000 K/sec
0 cpu-migrations # 0.403 K/sec
( +-100.00% )
104 page-faults # 0.209 M/sec
( +- 0.15% )
590,760 cycles # 1.189 GHz
( +- 2.35% )
395,053 stalled-cycles-frontend # 66.87% frontend cycles idle
( +- 3.67% )
<not supported> stalled-cycles-backend
398,963 instructions # 0.68 insns per cycle
# 0.99 stalled cycles per
insn ( +- 0.39% )
70,228 branches # 141.341 M/sec
( +- 0.36% )
3,364 branch-misses # 4.79% of all branches
( +- 5.45% )

0.000957440 seconds time elapsed
( +- 2.42% )

Furthermore, this saves space in instruction text:

text data bss dec hex filename
111 0 0 111 6f lib/int_sqrt-baseline.o
89 0 0 89 59 lib/int_sqrt.o

[1] http://en.wikipedia.org/wiki/First_Draft_of_a_Report_on_the_EDVAC

Signed-off-by: Davidlohr Bueso <[email protected]>
Reviewed-by: Jonathan Gonzalez <[email protected]>
Tested-by: Jonathan Gonzalez <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Signed-off-by: Jonghwan Choi <[email protected]>
---
lib/int_sqrt.c | 32 +++++++++++++++++++-------------
1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/lib/int_sqrt.c b/lib/int_sqrt.c
index fc2eeb7..1ef4cc3 100644
--- a/lib/int_sqrt.c
+++ b/lib/int_sqrt.c
@@ -1,3 +1,9 @@
+/*
+ * Copyright (C) 2013 Davidlohr Bueso <[email protected]>
+ *
+ * Based on the shift-and-subtract algorithm for computing integer
+ * square root from Guy L. Steele.
+ */

#include <linux/kernel.h>
#include <linux/export.h>
@@ -10,23 +16,23 @@
*/
unsigned long int_sqrt(unsigned long x)
{
- unsigned long op, res, one;
+ unsigned long b, m, y = 0;

- op = x;
- res = 0;
+ if (x <= 1)
+ return x;

- one = 1UL << (BITS_PER_LONG - 2);
- while (one > op)
- one >>= 2;
+ m = 1UL << (BITS_PER_LONG - 2);
+ while (m != 0) {
+ b = y + m;
+ y >>= 1;

- while (one != 0) {
- if (op >= res + one) {
- op = op - (res + one);
- res = res + 2 * one;
+ if (x >= b) {
+ x -= b;
+ y += m;
}
- res /= 2;
- one /= 4;
+ m >>= 2;
}
- return res;
+
+ return y;
}
EXPORT_SYMBOL(int_sqrt);
--
1.7.9.5

2013-04-30 17:32:17

by Davidlohr Bueso

[permalink] [raw]
Subject: Re: [PATCH 3.8-stable] lib/int_sqrt.c: optimize square root algorithm

On Tue, 2013-04-30 at 16:52 +0900, Jonghwan Choi wrote:
> This patch looks like it should be in the 3.8-stable tree, should we apply
> it?
>

I don't see this as a candidate for stable. Its just an optimization and
doesn't address any existing issue.

Thanks,
Davidlohr