Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

sched/fair: Only set slice protection at pick time

We should not (re)set slice protection in the sched_change pattern
which calls put_prev_task() / set_next_task().

Fixes: 63304558ba5d ("sched/eevdf: Curb wakeup-preemption")
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
Tested-by: K Prateek Nayak <kprateek.nayak@amd.com>
Tested-by: Shubhang Kaushik <shubhang@os.amperecomputing.com>
Link: https://patch.msgid.link/20260219080624.561421378%40infradead.org

+6 -5
+6 -5
kernel/sched/fair.c
··· 5445 5445 } 5446 5446 5447 5447 static void 5448 - set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se) 5448 + set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, bool first) 5449 5449 { 5450 5450 clear_buddies(cfs_rq, se); 5451 5451 ··· 5460 5460 __dequeue_entity(cfs_rq, se); 5461 5461 update_load_avg(cfs_rq, se, UPDATE_TG); 5462 5462 5463 - set_protect_slice(cfs_rq, se); 5463 + if (first) 5464 + set_protect_slice(cfs_rq, se); 5464 5465 } 5465 5466 5466 5467 update_stats_curr_start(cfs_rq, se); ··· 8979 8978 pse = parent_entity(pse); 8980 8979 } 8981 8980 if (se_depth >= pse_depth) { 8982 - set_next_entity(cfs_rq_of(se), se); 8981 + set_next_entity(cfs_rq_of(se), se, true); 8983 8982 se = parent_entity(se); 8984 8983 } 8985 8984 } 8986 8985 8987 8986 put_prev_entity(cfs_rq, pse); 8988 - set_next_entity(cfs_rq, se); 8987 + set_next_entity(cfs_rq, se, true); 8989 8988 8990 8989 __set_next_task_fair(rq, p, true); 8991 8990 } ··· 13599 13598 for_each_sched_entity(se) { 13600 13599 struct cfs_rq *cfs_rq = cfs_rq_of(se); 13601 13600 13602 - set_next_entity(cfs_rq, se); 13601 + set_next_entity(cfs_rq, se, first); 13603 13602 /* ensure bandwidth has been allocated on our new cfs_rq */ 13604 13603 account_cfs_rq_runtime(cfs_rq, 0); 13605 13604 }