--- /dev/null
+From c3ef3c7647234b14e99ae1c3f807f686de0ab0c6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 28 Jan 2017 22:00:49 +0800
+Subject: sched/rt: Show the 'sched_rr_timeslice' SCHED_RR timeslice tuning
+ knob in milliseconds
+
+From: Shile Zhang <shile.zhang@nokia.com>
+
+[ Upstream commit 975e155ed8732cb81f55c021c441ae662dd040b5 ]
+
+We added the 'sched_rr_timeslice_ms' SCHED_RR tuning knob in this commit:
+
+ ce0dbbbb30ae ("sched/rt: Add a tuning knob to allow changing SCHED_RR timeslice")
+
+... which name suggests to users that it's in milliseconds, while in reality
+it's being set in milliseconds but the result is shown in jiffies.
+
+This is obviously confusing when HZ is not 1000, it makes it appear like the
+value set failed, such as HZ=100:
+
+ root# echo 100 > /proc/sys/kernel/sched_rr_timeslice_ms
+ root# cat /proc/sys/kernel/sched_rr_timeslice_ms
+ 10
+
+Fix this to be milliseconds all around.
+
+Signed-off-by: Shile Zhang <shile.zhang@nokia.com>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Mike Galbraith <efault@gmx.de>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Link: http://lkml.kernel.org/r/1485612049-20923-1-git-send-email-shile.zhang@nokia.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/sched/sysctl.h | 1 +
+ kernel/sched/core.c | 5 +++--
+ kernel/sched/rt.c | 1 +
+ kernel/sysctl.c | 2 +-
+ 4 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h
+index c9e4731cf10b8..7fc36ebc5de33 100644
+--- a/include/linux/sched/sysctl.h
++++ b/include/linux/sched/sysctl.h
+@@ -81,6 +81,7 @@ extern unsigned int sysctl_sched_cfs_bandwidth_slice;
+ extern unsigned int sysctl_sched_autogroup_enabled;
+ #endif
+
++extern int sysctl_sched_rr_timeslice;
+ extern int sched_rr_timeslice;
+
+ extern int sched_rr_handler(struct ctl_table *table, int write,
+diff --git a/kernel/sched/core.c b/kernel/sched/core.c
+index 14a87c1f3a3ac..4a0a754f24c87 100644
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -8266,8 +8266,9 @@ int sched_rr_handler(struct ctl_table *table, int write,
+ /* make sure that internally we keep jiffies */
+ /* also, writing zero resets timeslice to default */
+ if (!ret && write) {
+- sched_rr_timeslice = sched_rr_timeslice <= 0 ?
+- RR_TIMESLICE : msecs_to_jiffies(sched_rr_timeslice);
++ sched_rr_timeslice =
++ sysctl_sched_rr_timeslice <= 0 ? RR_TIMESLICE :
++ msecs_to_jiffies(sysctl_sched_rr_timeslice);
+ }
+ mutex_unlock(&mutex);
+ return ret;
+diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
+index 801b4ec407023..5ee5740635f36 100644
+--- a/kernel/sched/rt.c
++++ b/kernel/sched/rt.c
+@@ -9,6 +9,7 @@
+ #include <linux/irq_work.h>
+
+ int sched_rr_timeslice = RR_TIMESLICE;
++int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE;
+
+ static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun);
+
+diff --git a/kernel/sysctl.c b/kernel/sysctl.c
+index c2dddd335d064..ecbb1b764a82e 100644
+--- a/kernel/sysctl.c
++++ b/kernel/sysctl.c
+@@ -412,7 +412,7 @@ static struct ctl_table kern_table[] = {
+ },
+ {
+ .procname = "sched_rr_timeslice_ms",
+- .data = &sched_rr_timeslice,
++ .data = &sysctl_sched_rr_timeslice,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = sched_rr_handler,
+--
+2.25.1
+