summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux')
-rw-r--r--recipes-kernel/linux/files/patches/nohz-Drop-generic-vtime-obsolete-dependency-on-CONFI.patch50
-rw-r--r--recipes-kernel/linux/files/patches/sched-nohz-Fix-overflow-error-in-scheduler_tick_max_.patch76
-rw-r--r--recipes-kernel/linux/files/patches/sched-nohz-add-debugfs-control-over-sched_tick_max_d.patch61
-rw-r--r--recipes-kernel/linux/linux-keystone_3.10.bbappend12
-rw-r--r--recipes-kernel/linux/linux-yocto_3.10.bbappend9
5 files changed, 208 insertions, 0 deletions
diff --git a/recipes-kernel/linux/files/patches/nohz-Drop-generic-vtime-obsolete-dependency-on-CONFI.patch b/recipes-kernel/linux/files/patches/nohz-Drop-generic-vtime-obsolete-dependency-on-CONFI.patch
new file mode 100644
index 0000000..4c0fb89
--- /dev/null
+++ b/recipes-kernel/linux/files/patches/nohz-Drop-generic-vtime-obsolete-dependency-on-CONFI.patch
@@ -0,0 +1,50 @@
1From 3b2566af2c0ef888f95920f69e9a7e0ebc13ddff Mon Sep 17 00:00:00 2001
2From: Kevin Hilman <khilman@linaro.org>
3Date: Mon, 16 Sep 2013 15:28:19 -0700
4Subject: [PATCH] nohz: Drop generic vtime obsolete dependency on CONFIG_64BIT
5
6The CONFIG_64BIT requirement on vtime can finally be removed
7since we now depend on HAVE_VIRT_CPU_ACCOUNTING_GEN which
8already takes care of the arch ability to handle nsecs based
9cputime_t safely.
10
11Signed-off-by: Kevin Hilman <khilman@linaro.org>
12Cc: Ingo Molnar <mingo@kernel.org>
13Cc: Russell King <rmk@arm.linux.org.uk>
14Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
15Cc: Arm Linux <linux-arm-kernel@lists.infradead.org>
16Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
17Signed-off-by: Mats Liljegren <mats.liljegren@enea.com>
18---
19 init/Kconfig | 2 +-
20 kernel/time/Kconfig | 1 -
21 2 files changed, 1 insertion(+), 2 deletions(-)
22
23diff --git a/init/Kconfig b/init/Kconfig
24index 0b5d0c8..d7411e5 100644
25--- a/init/Kconfig
26+++ b/init/Kconfig
27@@ -325,7 +325,7 @@ config VIRT_CPU_ACCOUNTING_NATIVE
28
29 config VIRT_CPU_ACCOUNTING_GEN
30 bool "Full dynticks CPU time accounting"
31- depends on HAVE_CONTEXT_TRACKING && 64BIT
32+ depends on HAVE_CONTEXT_TRACKING
33 select VIRT_CPU_ACCOUNTING
34 select CONTEXT_TRACKING
35 help
36diff --git a/kernel/time/Kconfig b/kernel/time/Kconfig
37index 70f27e8..c270b48 100644
38--- a/kernel/time/Kconfig
39+++ b/kernel/time/Kconfig
40@@ -100,7 +100,6 @@ config NO_HZ_FULL
41 # RCU_USER_QS dependency
42 depends on HAVE_CONTEXT_TRACKING
43 # VIRT_CPU_ACCOUNTING_GEN dependency
44- depends on 64BIT
45 select NO_HZ_COMMON
46 select RCU_USER_QS
47 select RCU_NOCB_CPU
48--
491.9.1
50
diff --git a/recipes-kernel/linux/files/patches/sched-nohz-Fix-overflow-error-in-scheduler_tick_max_.patch b/recipes-kernel/linux/files/patches/sched-nohz-Fix-overflow-error-in-scheduler_tick_max_.patch
new file mode 100644
index 0000000..c279422
--- /dev/null
+++ b/recipes-kernel/linux/files/patches/sched-nohz-Fix-overflow-error-in-scheduler_tick_max_.patch
@@ -0,0 +1,76 @@
1From 189a149dfc3ab55282b38d2194a0d7def74d8dfa Mon Sep 17 00:00:00 2001
2From: Kevin Hilman <khilman@linaro.org>
3Date: Wed, 15 Jan 2014 14:51:38 +0100
4Subject: [PATCH] sched/nohz: Fix overflow error in
5 scheduler_tick_max_deferment()
6
7While calculating the scheduler tick max deferment, the delta is
8converted from microseconds to nanoseconds through a multiplication
9against NSEC_PER_USEC.
10
11But this microseconds operand is an unsigned int, thus the result may
12likely overflow. The result is cast to u64 but only once the operation
13is completed, which is too late to avoid overflown result.
14
15This is currently not a problem because the scheduler tick max deferment
16is 1 second. But this may become an issue as we plan to make this
17value tunable.
18
19So lets fix this by casting the usecs value to u64 before multiplying by
20NSECS_PER_USEC.
21
22Also to prevent from this kind of mistake to happen again, move this
23ad-hoc jiffies -> nsecs conversion to a new helper.
24
25Signed-off-by: Kevin Hilman <khilman@linaro.org>
26Cc: Thomas Gleixner <tglx@linutronix.de>
27Cc: Ingo Molnar <mingo@kernel.org>
28Cc: Peter Zijlstra <peterz@infradead.org>
29Cc: Alex Shi <alex.shi@linaro.org>
30Cc: Steven Rostedt <rostedt@goodmis.org>
31Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
32Cc: John Stultz <john.stultz@linaro.org>
33Cc: Kevin Hilman <khilman@linaro.org>
34Link: http://lkml.kernel.org/r/1387315388-31676-2-git-send-email-khilman@linaro.org
35[move ad-hoc conversion to jiffies_to_nsecs helper]
36Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
37
38Signed-off-by: Mats Liljegren <mats.liljegren@enea.com>
39---
40 include/linux/jiffies.h | 6 ++++++
41 kernel/sched/core.c | 2 +-
42 2 files changed, 7 insertions(+), 1 deletion(-)
43
44diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
45index 8fb8edf..4df91d4 100644
46--- a/include/linux/jiffies.h
47+++ b/include/linux/jiffies.h
48@@ -290,6 +290,12 @@ extern unsigned long preset_lpj;
49 */
50 extern unsigned int jiffies_to_msecs(const unsigned long j);
51 extern unsigned int jiffies_to_usecs(const unsigned long j);
52+
53+static inline u64 jiffies_to_nsecs(const unsigned long j)
54+{
55+ return (u64)jiffies_to_usecs(j) * NSEC_PER_USEC;
56+}
57+
58 extern unsigned long msecs_to_jiffies(const unsigned int m);
59 extern unsigned long usecs_to_jiffies(const unsigned int u);
60 extern unsigned long timespec_to_jiffies(const struct timespec *value);
61diff --git a/kernel/sched/core.c b/kernel/sched/core.c
62index e8b3350..45c2cf1 100644
63--- a/kernel/sched/core.c
64+++ b/kernel/sched/core.c
65@@ -2774,7 +2774,7 @@ u64 scheduler_tick_max_deferment(void)
66 if (time_before_eq(next, now))
67 return 0;
68
69- return jiffies_to_usecs(next - now) * NSEC_PER_USEC;
70+ return jiffies_to_nsecs(next - now);
71 }
72 #endif
73
74--
751.9.1
76
diff --git a/recipes-kernel/linux/files/patches/sched-nohz-add-debugfs-control-over-sched_tick_max_d.patch b/recipes-kernel/linux/files/patches/sched-nohz-add-debugfs-control-over-sched_tick_max_d.patch
new file mode 100644
index 0000000..349604c
--- /dev/null
+++ b/recipes-kernel/linux/files/patches/sched-nohz-add-debugfs-control-over-sched_tick_max_d.patch
@@ -0,0 +1,61 @@
1From 92f0d4f695198fcb935cf0360f93a15bf0a6af1e Mon Sep 17 00:00:00 2001
2From: Kevin Hilman <khilman@linaro.org>
3Date: Mon, 16 Sep 2013 15:43:48 -0700
4Subject: [PATCH 3/3] sched/nohz: add debugfs control over
5 sched_tick_max_deferment
6
7Allow debugfs override of sched_tick_max_deferment in order to ease
8finding/fixing the remaining issues with full nohz.
9
10The value to be written is in jiffies, and -1 means the max deferment
11is disabled (scheduler_tick_max_deferment() returns KTIME_MAX.)
12
13Cc: Frederic Weisbecker <fweisbec@gmail.com>
14Signed-off-by: Kevin Hilman <khilman@linaro.org>
15---
16 kernel/sched/core.c | 16 +++++++++++++++-
17 1 file changed, 15 insertions(+), 1 deletion(-)
18
19diff --git a/kernel/sched/core.c b/kernel/sched/core.c
20index e8b3350..59c7367 100644
21--- a/kernel/sched/core.c
22+++ b/kernel/sched/core.c
23@@ -2753,6 +2753,8 @@ void scheduler_tick(void)
24 }
25
26 #ifdef CONFIG_NO_HZ_FULL
27+static u32 sched_tick_max_deferment = HZ;
28+
29 /**
30 * scheduler_tick_max_deferment
31 *
32@@ -2769,13 +2771,25 @@ u64 scheduler_tick_max_deferment(void)
33 struct rq *rq = this_rq();
34 unsigned long next, now = ACCESS_ONCE(jiffies);
35
36- next = rq->last_sched_tick + HZ;
37+ if (sched_tick_max_deferment == -1)
38+ return KTIME_MAX;
39+
40+ next = rq->last_sched_tick + sched_tick_max_deferment;
41
42 if (time_before_eq(next, now))
43 return 0;
44
45 return jiffies_to_usecs(next - now) * NSEC_PER_USEC;
46 }
47+
48+static __init int sched_nohz_full_init_debug(void)
49+{
50+ debugfs_create_u32("sched_tick_max_deferment", 0644, NULL,
51+ &sched_tick_max_deferment);
52+
53+ return 0;
54+}
55+late_initcall(sched_nohz_full_init_debug);
56 #endif
57
58 notrace unsigned long get_parent_ip(unsigned long addr)
59--
601.7.10.4
61
diff --git a/recipes-kernel/linux/linux-keystone_3.10.bbappend b/recipes-kernel/linux/linux-keystone_3.10.bbappend
new file mode 100644
index 0000000..b7f72dc
--- /dev/null
+++ b/recipes-kernel/linux/linux-keystone_3.10.bbappend
@@ -0,0 +1,12 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2
3SRC_URI += "\
4 file://cfg/00039-nohz.cfg \
5 file://patches/sched-nohz-add-debugfs-control-over-sched_tick_max_d.patch \
6 file://patches/sched-nohz-Fix-overflow-error-in-scheduler_tick_max_.patch \
7 file://patches/nohz-Drop-generic-vtime-obsolete-dependency-on-CONFI.patch \
8 "
9
10KERNEL_FEATURES += " \
11 cfg/00039-nohz \
12 "
diff --git a/recipes-kernel/linux/linux-yocto_3.10.bbappend b/recipes-kernel/linux/linux-yocto_3.10.bbappend
new file mode 100644
index 0000000..c7365b1
--- /dev/null
+++ b/recipes-kernel/linux/linux-yocto_3.10.bbappend
@@ -0,0 +1,9 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2
3SRC_URI += "\
4 file://cfg/00038-hotplug_cpu.cfg \
5 file://cfg/00039-nohz.cfg \
6 file://patches/sched-nohz-add-debugfs-control-over-sched_tick_max_d.patch \
7 file://patches/sched-nohz-Fix-overflow-error-in-scheduler_tick_max_.patch \
8 file://patches/nohz-Drop-generic-vtime-obsolete-dependency-on-CONFI.patch \
9 "