Skip to content

Commit a88f08e

Browse files
Quentin Perretgregkh
authored andcommitted
sched/fair: Fix overutilized update in enqueue_task_fair()
commit 8e1ac42 upstream. enqueue_task_fair() attempts to skip the overutilized update for new tasks as their util_avg is not accurate yet. However, the flag we check to do so is overwritten earlier on in the function, which makes the condition pretty much a nop. Fix this by saving the flag early on. Fixes: 2802bf3 ("sched/fair: Add over-utilization/tipping point indicator") Reported-by: Rick Yiu <rickyiu@google.com> Signed-off-by: Quentin Perret <qperret@google.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org> Reviewed-by: Valentin Schneider <valentin.schneider@arm.com> Link: https://lkml.kernel.org/r/20201112111201.2081902-1-qperret@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 10ca291 commit a88f08e

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

kernel/sched/fair.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5228,6 +5228,7 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)
52285228
struct cfs_rq *cfs_rq;
52295229
struct sched_entity *se = &p->se;
52305230
int idle_h_nr_running = task_has_idle_policy(p);
5231+
int task_new = !(flags & ENQUEUE_WAKEUP);
52315232

52325233
/*
52335234
* The code below (indirectly) updates schedutil which looks at
@@ -5299,7 +5300,7 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)
52995300
* into account, but that is not straightforward to implement,
53005301
* and the following generally works well enough in practice.
53015302
*/
5302-
if (flags & ENQUEUE_WAKEUP)
5303+
if (!task_new)
53035304
update_overutilized_status(rq);
53045305

53055306
}

0 commit comments

Comments
 (0)