sched/eevdf: Fix RUN_TO_PARITY vs PREEMPT_SHORT Vincent noted that RUN_TO_PARITY can prevent preemption by a shorter slice under some conditions. Reported-by: Vincent Guittot <vincent.guittot@linaro.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 72f0ba5..84916c8 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c
@@ -918,7 +918,7 @@ static inline bool __pick_eevdf_curr(struct cfs_rq *cfs_rq, struct sched_entity if (sched_feat(RUN_TO_PARITY) && protect_slice(curr) && entity_eligible(cfs_rq, curr)) - return true; + return !sched_feat(PREEMPT_SHORT) || curr->slice < best->slice; return entity_before(curr, best); } @@ -1195,7 +1195,7 @@ static inline bool did_preempt_short(struct cfs_rq *cfs_rq, struct sched_entity if (!sched_feat(PREEMPT_SHORT)) return false; - if (curr->vlag == curr->deadline) + if (protect_slice(curr)) return false; return !entity_eligible(cfs_rq, curr);