]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.1-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Feb 2024 15:21:41 +0000 (16:21 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Feb 2024 15:21:41 +0000 (16:21 +0100)
added patches:
hrtimer-ignore-slack-time-for-rt-tasks-in-schedule_hrtimeout_range.patch

queue-6.1/hrtimer-ignore-slack-time-for-rt-tasks-in-schedule_hrtimeout_range.patch [new file with mode: 0644]
queue-6.1/series

diff --git a/queue-6.1/hrtimer-ignore-slack-time-for-rt-tasks-in-schedule_hrtimeout_range.patch b/queue-6.1/hrtimer-ignore-slack-time-for-rt-tasks-in-schedule_hrtimeout_range.patch
new file mode 100644 (file)
index 0000000..52094dc
--- /dev/null
@@ -0,0 +1,68 @@
+From 0c52310f260014d95c1310364379772cb74cf82d Mon Sep 17 00:00:00 2001
+From: Davidlohr Bueso <dave@stgolabs.net>
+Date: Mon, 23 Jan 2023 09:32:06 -0800
+Subject: hrtimer: Ignore slack time for RT tasks in schedule_hrtimeout_range()
+
+From: Davidlohr Bueso <dave@stgolabs.net>
+
+commit 0c52310f260014d95c1310364379772cb74cf82d upstream.
+
+While in theory the timer can be triggered before expires + delta, for the
+cases of RT tasks they really have no business giving any lenience for
+extra slack time, so override any passed value by the user and always use
+zero for schedule_hrtimeout_range() calls. Furthermore, this is similar to
+what the nanosleep(2) family already does with current->timer_slack_ns.
+
+Signed-off-by: Davidlohr Bueso <dave@stgolabs.net>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Link: https://lore.kernel.org/r/20230123173206.6764-3-dave@stgolabs.net
+Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ kernel/time/hrtimer.c |   14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+--- a/kernel/time/hrtimer.c
++++ b/kernel/time/hrtimer.c
+@@ -2266,7 +2266,7 @@ void __init hrtimers_init(void)
+ /**
+  * schedule_hrtimeout_range_clock - sleep until timeout
+  * @expires:  timeout value (ktime_t)
+- * @delta:    slack in expires timeout (ktime_t)
++ * @delta:    slack in expires timeout (ktime_t) for SCHED_OTHER tasks
+  * @mode:     timer mode
+  * @clock_id: timer clock to be used
+  */
+@@ -2293,6 +2293,13 @@ schedule_hrtimeout_range_clock(ktime_t *
+               return -EINTR;
+       }
++      /*
++       * Override any slack passed by the user if under
++       * rt contraints.
++       */
++      if (rt_task(current))
++              delta = 0;
++
+       hrtimer_init_sleeper_on_stack(&t, clock_id, mode);
+       hrtimer_set_expires_range_ns(&t.timer, *expires, delta);
+       hrtimer_sleeper_start_expires(&t, mode);
+@@ -2312,7 +2319,7 @@ EXPORT_SYMBOL_GPL(schedule_hrtimeout_ran
+ /**
+  * schedule_hrtimeout_range - sleep until timeout
+  * @expires:  timeout value (ktime_t)
+- * @delta:    slack in expires timeout (ktime_t)
++ * @delta:    slack in expires timeout (ktime_t) for SCHED_OTHER tasks
+  * @mode:     timer mode
+  *
+  * Make the current task sleep until the given expiry time has
+@@ -2320,7 +2327,8 @@ EXPORT_SYMBOL_GPL(schedule_hrtimeout_ran
+  * the current task state has been set (see set_current_state()).
+  *
+  * The @delta argument gives the kernel the freedom to schedule the
+- * actual wakeup to a time that is both power and performance friendly.
++ * actual wakeup to a time that is both power and performance friendly
++ * for regular (non RT/DL) tasks.
+  * The kernel give the normal best effort behavior for "@expires+@delta",
+  * but may decide to fire the timer earlier, but no earlier than @expires.
+  *
index 889c37705b0d828d12296f894c21fad025bdecea..1d410f277a9b2dfae8f7a913ff12f6aa28a835f4 100644 (file)
@@ -186,3 +186,4 @@ netfilter-ipset-missing-gc-cancellations-fixed.patch
 parisc-fix-random-data-corruption-from-exception-handler.patch
 nfsd-fix-release_lockowner.patch
 nfsd-don-t-take-fi_lock-in-nfsd_break_deleg_cb.patch
+hrtimer-ignore-slack-time-for-rt-tasks-in-schedule_hrtimeout_range.patch