On 05/29/24 12:55, Sebastian Andrzej Siewior wrote: > On 2024-05-29 11:34:09 [+0100], Qais Yousef wrote: > > > behaviour. But then it is insistent which matters only in the RT case. > > > Puh. Any sched folks regarding policy? > > > > I am not sure I understood you here. Could you rephrase please? > > Right now a SCHED_OTHER task boosted to a realtime priority gets > slack=0. In the !RT scenario everything is fine. > For RT the slack=0 also happens but the init of the timer looks at the > policy instead at the possible boosted priority and uses a different > clock attribute. This can lead to a delayed wake up (so avoiding the > slack does not solve the problem). > > This is not consistent because IMHO the clock setup & slack should be > handled equally. So I am asking the sched folks for a policy and I am > leaning towards looking at task-policy in this case instead of prio > because you shouldn't do anything that can delay. Can't we do that based on is_soft/is_hard flag in hrtimer struct when we apply the slack in hrtimer_set_expires_range_ns() instead? (not compile tested even) diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index aa1e65ccb615..e001f20bbea9 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h @@ -102,12 +102,16 @@ static inline void hrtimer_set_expires(struct hrtimer *timer, ktime_t time) static inline void hrtimer_set_expires_range(struct hrtimer *timer, ktime_t time, ktime_t delta) { + if (timer->is_soft || timer->is_hard) + delta = 0; timer->_softexpires = time; timer->node.expires = ktime_add_safe(time, delta); } static inline void hrtimer_set_expires_range_ns(struct hrtimer *timer, ktime_t time, u64 delta) { + if (timer->is_soft || timer->is_hard) + delta = 0; timer->_softexpires = time; timer->node.expires = ktime_add_safe(time, ns_to_ktime(delta)); }