Skip to content

Commit bcd74b2

Browse files
author
Peter Zijlstra
committed
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: 6330455 ("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
1 parent b3d99f4 commit bcd74b2

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

kernel/sched/fair.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5445,7 +5445,7 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
54455445
}
54465446

54475447
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)
54495449
{
54505450
clear_buddies(cfs_rq, se);
54515451

@@ -5460,7 +5460,8 @@ set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
54605460
__dequeue_entity(cfs_rq, se);
54615461
update_load_avg(cfs_rq, se, UPDATE_TG);
54625462

5463-
set_protect_slice(cfs_rq, se);
5463+
if (first)
5464+
set_protect_slice(cfs_rq, se);
54645465
}
54655466

54665467
update_stats_curr_start(cfs_rq, se);
@@ -8978,13 +8979,13 @@ pick_next_task_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf
89788979
pse = parent_entity(pse);
89798980
}
89808981
if (se_depth >= pse_depth) {
8981-
set_next_entity(cfs_rq_of(se), se);
8982+
set_next_entity(cfs_rq_of(se), se, true);
89828983
se = parent_entity(se);
89838984
}
89848985
}
89858986

89868987
put_prev_entity(cfs_rq, pse);
8987-
set_next_entity(cfs_rq, se);
8988+
set_next_entity(cfs_rq, se, true);
89888989

89898990
__set_next_task_fair(rq, p, true);
89908991
}
@@ -13598,7 +13599,7 @@ static void set_next_task_fair(struct rq *rq, struct task_struct *p, bool first)
1359813599
for_each_sched_entity(se) {
1359913600
struct cfs_rq *cfs_rq = cfs_rq_of(se);
1360013601

13601-
set_next_entity(cfs_rq, se);
13602+
set_next_entity(cfs_rq, se, first);
1360213603
/* ensure bandwidth has been allocated on our new cfs_rq */
1360313604
account_cfs_rq_runtime(cfs_rq, 0);
1360413605
}

0 commit comments

Comments
 (0)