History

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().

Peter Zijlstra committed 9 months ago

Commit bcd74b21 parent b3d99f41 file · +6 −5Browse files

Showing the changes to kernel (1 of 1 file). Show all

Unified · Split

kernel/sched/fair.c+6−5
@@ -5445,7 +5445,7 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) · 5444 unmodified lines
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) · 8 unmodified lines
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 @@ again: · 3511 unmodified lines
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) · 4607 unmodified lines
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 }