summaryrefslogtreecommitdiff
path: root/sys-kernel/linux-image-redcore-lts/files/0004-Create-highres-timeout-variants-of-schedule_timeout-.patch
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-11-04 02:42:59 +0000
committerV3n3RiX <venerix@redcorelinux.org>2018-11-04 02:42:59 +0000
commit2a64b546a0efd4bb7f5907db9a02a03c2bb045ed (patch)
tree3c30a3f683aae9303c7c5bc133dbce6eaeeca746 /sys-kernel/linux-image-redcore-lts/files/0004-Create-highres-timeout-variants-of-schedule_timeout-.patch
parent6afcc60d32a78331bc2e5fed072b042fb77bd17c (diff)
sys-kernel/linux-{image,sources}-redcore-lts :
* version bump to v4.14.75 * adjust MuQSS v0.162 CPU scheduler to linux-hardened and enable it by default * add BFQ-SQ v8r12 I/O scheduler and enable it by default * lower HZ to 100 (recommended value for MuQSS enabled kernels) * disable dynamic ticks (MuQSS itself is a tickless scheduler, so no longer required)
Diffstat (limited to 'sys-kernel/linux-image-redcore-lts/files/0004-Create-highres-timeout-variants-of-schedule_timeout-.patch')
-rw-r--r--sys-kernel/linux-image-redcore-lts/files/0004-Create-highres-timeout-variants-of-schedule_timeout-.patch153
1 files changed, 153 insertions, 0 deletions
diff --git a/sys-kernel/linux-image-redcore-lts/files/0004-Create-highres-timeout-variants-of-schedule_timeout-.patch b/sys-kernel/linux-image-redcore-lts/files/0004-Create-highres-timeout-variants-of-schedule_timeout-.patch
new file mode 100644
index 00000000..3c182fbe
--- /dev/null
+++ b/sys-kernel/linux-image-redcore-lts/files/0004-Create-highres-timeout-variants-of-schedule_timeout-.patch
@@ -0,0 +1,153 @@
+From d27b58b0707ac311be5a51594fc6f22ed1d109e5 Mon Sep 17 00:00:00 2001
+From: Con Kolivas <kernel@kolivas.org>
+Date: Sat, 12 Aug 2017 11:53:39 +1000
+Subject: [PATCH 04/16] Create highres timeout variants of schedule_timeout
+ functions.
+
+---
+ include/linux/freezer.h | 1 +
+ include/linux/sched.h | 31 +++++++++++++++++++--
+ kernel/time/hrtimer.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 101 insertions(+), 2 deletions(-)
+
+diff --git a/include/linux/freezer.h b/include/linux/freezer.h
+index 3995df1d068f..f8645e8f2444 100644
+--- a/include/linux/freezer.h
++++ b/include/linux/freezer.h
+@@ -297,6 +297,7 @@ static inline void set_freezable(void) {}
+ #define wait_event_freezekillable_unsafe(wq, condition) \
+ wait_event_killable(wq, condition)
+
++#define pm_freezing (false)
+ #endif /* !CONFIG_FREEZER */
+
+ #endif /* FREEZER_H_INCLUDED */
+diff --git a/include/linux/sched.h b/include/linux/sched.h
+index 35dc91a0e2ed..38852ebfa864 100644
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -173,13 +173,40 @@ extern cpumask_var_t cpu_isolated_map;
+
+ extern void scheduler_tick(void);
+
+-#define MAX_SCHEDULE_TIMEOUT LONG_MAX
+-
++#define MAX_SCHEDULE_TIMEOUT LONG_MAX
+ extern long schedule_timeout(long timeout);
+ extern long schedule_timeout_interruptible(long timeout);
+ extern long schedule_timeout_killable(long timeout);
+ extern long schedule_timeout_uninterruptible(long timeout);
+ extern long schedule_timeout_idle(long timeout);
++
++#ifdef CONFIG_HIGH_RES_TIMERS
++extern long schedule_msec_hrtimeout(long timeout);
++extern long schedule_min_hrtimeout(void);
++extern long schedule_msec_hrtimeout_interruptible(long timeout);
++extern long schedule_msec_hrtimeout_uninterruptible(long timeout);
++#else
++static inline long schedule_msec_hrtimeout(long timeout)
++{
++ return schedule_timeout(msecs_to_jiffies(timeout));
++}
++
++static inline long schedule_min_hrtimeout(void)
++{
++ return schedule_timeout(1);
++}
++
++static inline long schedule_msec_hrtimeout_interruptible(long timeout)
++{
++ return schedule_timeout_interruptible(msecs_to_jiffies(timeout));
++}
++
++static inline long schedule_msec_hrtimeout_uninterruptible(long timeout)
++{
++ return schedule_timeout_uninterruptible(msecs_to_jiffies(timeout));
++}
++#endif
++
+ asmlinkage void schedule(void);
+ extern void schedule_preempt_disabled(void);
+
+diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
+index 88f75f92ef36..13227cf2814c 100644
+--- a/kernel/time/hrtimer.c
++++ b/kernel/time/hrtimer.c
+@@ -1787,3 +1787,74 @@ int __sched schedule_hrtimeout(ktime_t *expires,
+ return schedule_hrtimeout_range(expires, 0, mode);
+ }
+ EXPORT_SYMBOL_GPL(schedule_hrtimeout);
++
++/*
++ * As per schedule_hrtimeout but taskes a millisecond value and returns how
++ * many milliseconds are left.
++ */
++long __sched schedule_msec_hrtimeout(long timeout)
++{
++ struct hrtimer_sleeper t;
++ int delta, secs, jiffs;
++ ktime_t expires;
++
++ if (!timeout) {
++ __set_current_state(TASK_RUNNING);
++ return 0;
++ }
++
++ jiffs = msecs_to_jiffies(timeout);
++ /*
++ * If regular timer resolution is adequate or hrtimer resolution is not
++ * (yet) better than Hz, as would occur during startup, use regular
++ * timers.
++ */
++ if (jiffs > 4 || hrtimer_resolution >= NSEC_PER_SEC / HZ)
++ return schedule_timeout(jiffs);
++
++ secs = timeout / 1000;
++ delta = (timeout % 1000) * NSEC_PER_MSEC;
++ expires = ktime_set(secs, delta);
++
++ hrtimer_init_on_stack(&t.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
++ hrtimer_set_expires_range_ns(&t.timer, expires, delta);
++
++ hrtimer_init_sleeper(&t, current);
++
++ hrtimer_start_expires(&t.timer, HRTIMER_MODE_REL);
++
++ if (likely(t.task))
++ schedule();
++
++ hrtimer_cancel(&t.timer);
++ destroy_hrtimer_on_stack(&t.timer);
++
++ __set_current_state(TASK_RUNNING);
++
++ expires = hrtimer_expires_remaining(&t.timer);
++ timeout = ktime_to_ms(expires);
++ return timeout < 0 ? 0 : timeout;
++}
++
++EXPORT_SYMBOL(schedule_msec_hrtimeout);
++
++long __sched schedule_min_hrtimeout(void)
++{
++ return schedule_msec_hrtimeout(1);
++}
++
++EXPORT_SYMBOL(schedule_min_hrtimeout);
++
++long __sched schedule_msec_hrtimeout_interruptible(long timeout)
++{
++ __set_current_state(TASK_INTERRUPTIBLE);
++ return schedule_msec_hrtimeout(timeout);
++}
++EXPORT_SYMBOL(schedule_msec_hrtimeout_interruptible);
++
++long __sched schedule_msec_hrtimeout_uninterruptible(long timeout)
++{
++ __set_current_state(TASK_UNINTERRUPTIBLE);
++ return schedule_msec_hrtimeout(timeout);
++}
++EXPORT_SYMBOL(schedule_msec_hrtimeout_uninterruptible);
+--
+2.11.0
+