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
5445}5445}
5446 5446
5447static void5447static void
5448set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)5448set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, bool first)
5449{5449{
5450 clear_buddies(cfs_rq, se);5450 clear_buddies(cfs_rq, se);
5451 5451
@@ -5460,7 +5460,8 @@ set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se) · 8 unmodified lines
5460 __dequeue_entity(cfs_rq, se);5460 __dequeue_entity(cfs_rq, se);
5461 update_load_avg(cfs_rq, se, UPDATE_TG);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 update_stats_curr_start(cfs_rq, se);5467 update_stats_curr_start(cfs_rq, se);
@@ -8978,13 +8979,13 @@ again: · 3511 unmodified lines
8978 pse = parent_entity(pse);8979 pse = parent_entity(pse);
8979 }8980 }
8980 if (se_depth >= pse_depth) {8981 if (se_depth >= pse_depth) {
8981 set_next_entity(cfs_rq_of(se), se);8982 set_next_entity(cfs_rq_of(se), se, true);
8982 se = parent_entity(se);8983 se = parent_entity(se);
8983 }8984 }
8984 }8985 }
8985 8986
8986 put_prev_entity(cfs_rq, pse);8987 put_prev_entity(cfs_rq, pse);
8987 set_next_entity(cfs_rq, se);8988 set_next_entity(cfs_rq, se, true);
8988 8989
8989 __set_next_task_fair(rq, p, true);8990 __set_next_task_fair(rq, p, true);
8990 }8991 }
@@ -13598,7 +13599,7 @@ static void set_next_task_fair(struct rq *rq, struct task_struct *p, bool first) · 4607 unmodified lines
13598 for_each_sched_entity(se) {13599 for_each_sched_entity(se) {
13599 struct cfs_rq *cfs_rq = cfs_rq_of(se);13600 struct cfs_rq *cfs_rq = cfs_rq_of(se);
13600 13601
13601 set_next_entity(cfs_rq, se);13602 set_next_entity(cfs_rq, se, first);
13602 /* ensure bandwidth has been allocated on our new cfs_rq */13603 /* ensure bandwidth has been allocated on our new cfs_rq */
13603 account_cfs_rq_runtime(cfs_rq, 0);13604 account_cfs_rq_runtime(cfs_rq, 0);
13604 }13605 }