From: jun qian <[email protected]> As you are already set the TIF_NEED_RESCHED, there is no need to check resched again.
Signed-off-by: jun qian <[email protected]> --- kernel/sched/fair.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 794c2cb945f8..1a69b5fffe4a 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4360,19 +4360,26 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) { unsigned long ideal_runtime, delta_exec; struct sched_entity *se; + struct rq *rq = rq_of(cfs_rq); s64 delta; ideal_runtime = sched_slice(cfs_rq, curr); delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime; if (delta_exec > ideal_runtime) { - resched_curr(rq_of(cfs_rq)); + if (!test_tsk_need_resched(rq->curr)) + resched_curr(rq_of(cfs_rq)); /* * The current task ran long enough, ensure it doesn't get * re-elected due to buddy favours. */ clear_buddies(cfs_rq, curr); return; - } + /* + * If here with TIF_NEED_RESCHED already set from the early entity_tick, + * there is no need to check again. + */ + } else if (test_tsk_need_resched(rq->curr)) + return; /* * Ensure that a task that missed wakeup preemption by a -- 2.18.2

