From 97015376642f3cb7aa5c3cdb13bf094e94fbcd81 Mon Sep 17 00:00:00 2001 From: "Peter Zijlstra (Intel)" Date: Tue, 24 Feb 2026 17:35:22 +0100 Subject: [PATCH] sched/fair: Simplify hrtick_update() hrtick_update() was needed when the slice depended on nr_running, all that code is gone. All that remains is starting the hrtick when nr_running becomes more than 1. Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Thomas Gleixner Signed-off-by: Peter Zijlstra (Intel) Link: https://patch.msgid.link/20260224163428.866374835@kernel.org --- kernel/sched/fair.c | 12 ++++-------- kernel/sched/sched.h | 4 ++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 247fecd1ac41d..0b6ce88f8e54f 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6769,9 +6769,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) } /* - * called from enqueue/dequeue and updates the hrtick when the - * current task is from our class and nr_running is low enough - * to matter. + * Called on enqueue to start the hrtick when h_nr_queued becomes more than 1. */ static void hrtick_update(struct rq *rq) { @@ -6780,6 +6778,9 @@ static void hrtick_update(struct rq *rq) if (!hrtick_enabled_fair(rq) || donor->sched_class != &fair_sched_class) return; + if (hrtick_active(rq)) + return; + hrtick_start_fair(rq, donor); } #else /* !CONFIG_SCHED_HRTICK: */ @@ -7102,9 +7103,6 @@ static int dequeue_entities(struct rq *rq, struct sched_entity *se, int flags) WARN_ON_ONCE(!task_sleep); WARN_ON_ONCE(p->on_rq != 1); - /* Fix-up what dequeue_task_fair() skipped */ - hrtick_update(rq); - /* * Fix-up what block_task() skipped. * @@ -7138,8 +7136,6 @@ static bool dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags) /* * Must not reference @p after dequeue_entities(DEQUEUE_DELAYED). */ - - hrtick_update(rq); return true; } diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index b82fb70a9d549..73bc20c47631d 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -3041,6 +3041,10 @@ static inline int hrtick_enabled_dl(struct rq *rq) } extern void hrtick_start(struct rq *rq, u64 delay); +static inline bool hrtick_active(struct rq *rq) +{ + return hrtimer_active(&rq->hrtick_timer); +} #else /* !CONFIG_SCHED_HRTICK: */ -- 2.47.3