diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 12890ef16603..f179faf7a6a1 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -1116,7 +1116,7 @@ static struct sched_entity *__pick_eevdf(struct cfs_rq *cfs_rq, bool protect) /* * Picking the ->next buddy will affect latency but not fairness. */ - if (sched_feat(PICK_BUDDY) && + if (sched_feat(PICK_BUDDY) && protect && cfs_rq->next && entity_eligible(cfs_rq, cfs_rq->next)) { /* ->next will never be delayed */ WARN_ON_ONCE(cfs_rq->next->sched_delayed); @@ -9138,8 +9138,10 @@ static void wakeup_preempt_fair(struct rq *rq, struct task_struct *p, int wake_f return; preempt: - if (preempt_action == PREEMPT_WAKEUP_SHORT) + if (preempt_action == PREEMPT_WAKEUP_SHORT) { cancel_protect_slice(se); + clear_buddies(cfs_rq, se); + } resched_curr_lazy(rq); }