diff options
| author | Peter Zijlstra (Intel) <peterz@infradead.org> | 2026-02-24 17:35:22 +0100 |
|---|---|---|
| committer | Peter Zijlstra <peterz@infradead.org> | 2026-02-27 16:40:03 +0100 |
| commit | 97015376642f3cb7aa5c3cdb13bf094e94fbcd81 (patch) | |
| tree | 000d9bc3fa91d1a1eb9c2ece5b2d2e48d3c6b746 | |
| parent | 558c18d3fbb6c5b9c0b42629d7fe34476363ac00 (diff) | |
| download | linux-97015376642f3cb7aa5c3cdb13bf094e94fbcd81.tar.gz linux-97015376642f3cb7aa5c3cdb13bf094e94fbcd81.zip | |
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) <peterz@infradead.org>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260224163428.866374835@kernel.org
| -rw-r--r-- | kernel/sched/fair.c | 12 | ||||
| -rw-r--r-- | 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 247fecd1ac41..0b6ce88f8e54 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 b82fb70a9d54..73bc20c47631 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: */ |
