On Mon, Aug 05 2024 at 14:41, Felix Moessbauer wrote:
RT tasks do not have any timerslack, as this induces jitter. By that, the timer slack is already ignored in the nanosleep family and schedule_hrtimeout_range() (fixed in 0c52310f2600).
The hrtimer_start_range_ns function is indirectly used by glibc-2.33+ for timed waits on condition variables. These are sometimes used in RT applications for realtime queue processing. At least on the combination of kernel 5.10 and glibc-2.31, the timed wait on condition variables in rt tasks was precise (no slack), however glibc-2.33 changed the internal wait implementation, exposing the kernel bug.
That's hardly a bug. It's an oversight.
This patch makes the timer slack consistent across all hrtimer
"This patch" ....
programming code, by ignoring the timerslack for rt tasks also in the last remaining location in hrtimer_start_range_ns().
Similar to 0c52310f2600, this fix should be backported as well.
This is not part of the change log.
Cc: stable@vger.kernel.org Signed-off-by: Felix Moessbauer felix.moessbauer@siemens.com
kernel/time/hrtimer.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c index 2b1469f61d9c..1b26e095114d 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -1274,7 +1274,7 @@ static int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
- hrtimer_start_range_ns - (re)start an hrtimer
- @timer: the timer to be added
- @tim: expiry time
- @delta_ns: "slack" range for the timer
- @delta_ns: "slack" range for the timer for SCHED_OTHER tasks
- @mode: timer mode: absolute (HRTIMER_MODE_ABS) or
relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED);
softirq based mode is considered for debug purpose only!
@@ -1299,6 +1299,10 @@ void hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, base = lock_hrtimer_base(timer, &flags);
- /* rt-tasks do not have a timer slack for obvious reasons */
- if (rt_task(current))
delta_ns = 0;
task_is_realtime()
please
Thanks,
tglx