stable-rt.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH][5.10, 5.15, 6.1][0/1] hrtimer: Ignore slack time for RT tasks
@ 2024-02-16 17:11 Felix Moessbauer
  2024-02-16 17:11 ` [PATCH][5.10, 5.15, 6.1][1/1] hrtimer: Ignore slack time for RT tasks in schedule_hrtimeout_range() Felix Moessbauer
  2024-02-19  8:04 ` [PATCH][5.10, 5.15, 6.1][0/1] hrtimer: Ignore slack time for RT tasks MOESSBAUER, Felix
  0 siblings, 2 replies; 3+ messages in thread
From: Felix Moessbauer @ 2024-02-16 17:11 UTC (permalink / raw)
  To: stable-rt; +Cc: bigeasy, petr.ivanov, jan.kiszka, Felix Moessbauer

This suggests a fix from 6.3 for stable that fixes a nasty bug in the
timing behavior of periodic RT tasks w.r.t timerslack_ns. While the
documentation clearly states that the slack time is ignored for RT tasks,
this is not the case for the hrtimer code. This patch fixes the issue and
applies to all stable kernels.

Best regards,
Felix Moessbauer
Siemens AG

Davidlohr Bueso (1):
  hrtimer: Ignore slack time for RT tasks in schedule_hrtimeout_range()

 kernel/time/hrtimer.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

-- 
2.39.2


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH][5.10, 5.15, 6.1][1/1] hrtimer: Ignore slack time for RT tasks in schedule_hrtimeout_range()
  2024-02-16 17:11 [PATCH][5.10, 5.15, 6.1][0/1] hrtimer: Ignore slack time for RT tasks Felix Moessbauer
@ 2024-02-16 17:11 ` Felix Moessbauer
  2024-02-19  8:04 ` [PATCH][5.10, 5.15, 6.1][0/1] hrtimer: Ignore slack time for RT tasks MOESSBAUER, Felix
  1 sibling, 0 replies; 3+ messages in thread
From: Felix Moessbauer @ 2024-02-16 17:11 UTC (permalink / raw)
  To: stable-rt
  Cc: bigeasy, petr.ivanov, jan.kiszka, Davidlohr Bueso, Thomas Gleixner

From: Davidlohr Bueso <dave@stgolabs.net>

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
---
 kernel/time/hrtimer.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index ede09dda36e9..0aebb88f1c11 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -2161,7 +2161,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
  */
@@ -2188,6 +2188,13 @@ schedule_hrtimeout_range_clock(ktime_t *expires, u64 delta,
 		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);
@@ -2207,7 +2214,7 @@ EXPORT_SYMBOL_GPL(schedule_hrtimeout_range_clock);
 /**
  * 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
@@ -2215,7 +2222,8 @@ EXPORT_SYMBOL_GPL(schedule_hrtimeout_range_clock);
  * 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.
  *
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH][5.10, 5.15, 6.1][0/1] hrtimer: Ignore slack time for RT tasks
  2024-02-16 17:11 [PATCH][5.10, 5.15, 6.1][0/1] hrtimer: Ignore slack time for RT tasks Felix Moessbauer
  2024-02-16 17:11 ` [PATCH][5.10, 5.15, 6.1][1/1] hrtimer: Ignore slack time for RT tasks in schedule_hrtimeout_range() Felix Moessbauer
@ 2024-02-19  8:04 ` MOESSBAUER, Felix
  1 sibling, 0 replies; 3+ messages in thread
From: MOESSBAUER, Felix @ 2024-02-19  8:04 UTC (permalink / raw)
  To: stable-rt; +Cc: Kiszka, Jan, bigeasy, Ivanov, Petr

On Fri, 2024-02-16 at 18:11 +0100, Felix Moessbauer wrote:
> This suggests a fix from 6.3 for stable that fixes a nasty bug in the
> timing behavior of periodic RT tasks w.r.t timerslack_ns. While the
> documentation clearly states that the slack time is ignored for RT
> tasks,
> this is not the case for the hrtimer code. This patch fixes the issue
> and
> applies to all stable kernels.

Hi, actually this is not an rt-stable but a stable topic, as this code
is not PREEMPT_RT specific. I'll resend the patch to the stable ML.

Sorry for the noise.

Felix

> 
> Best regards,
> Felix Moessbauer
> Siemens AG
> 
> Davidlohr Bueso (1):
>   hrtimer: Ignore slack time for RT tasks in
> schedule_hrtimeout_range()
> 
>  kernel/time/hrtimer.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 

-- 
Siemens AG, Technology
Linux Expert Center



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-02-19  8:04 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-16 17:11 [PATCH][5.10, 5.15, 6.1][0/1] hrtimer: Ignore slack time for RT tasks Felix Moessbauer
2024-02-16 17:11 ` [PATCH][5.10, 5.15, 6.1][1/1] hrtimer: Ignore slack time for RT tasks in schedule_hrtimeout_range() Felix Moessbauer
2024-02-19  8:04 ` [PATCH][5.10, 5.15, 6.1][0/1] hrtimer: Ignore slack time for RT tasks MOESSBAUER, Felix

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).