diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 9c68ee82be70..ec7fc2a74918 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4247,7 +4247,8 @@ pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr) second = curr; } - if (second && wakeup_preempt_entity(second, left) < 1) + if (second && (sched_feat(STRICT_SKIP_BUDDY) || + wakeup_preempt_entity(second, left) < 1)) se = second; } diff --git a/kernel/sched/features.h b/kernel/sched/features.h index 68c92b6709e9..96636034bb2a 100644 --- a/kernel/sched/features.h +++ b/kernel/sched/features.h @@ -26,6 +26,12 @@ SCHED_FEAT(NEXT_BUDDY, false) */ SCHED_FEAT(LAST_BUDDY, true) +/* + * skip buddy i.e task called yield() is always skipped and the + * next entity is selected to run irrespective of the vruntime + */ +SCHED_FEAT(STRICT_SKIP_BUDDY, true) + /* * Consider buddies to be cache hot, decreases the likelyness of a * cache buddy being migrated away, increases cache locality.