mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-12-17 16:18:25 +01:00
sched/fair: Fix pelt lost idle time detection
[ Upstream commit17e3e88ed0] The check for some lost idle pelt time should be always done when pick_next_task_fair() fails to pick a task and not only when we call it from the fair fast-path. The case happens when the last running task on rq is a RT or DL task. When the latter goes to sleep and the /Sum of util_sum of the rq is at the max value, we don't account the lost of idle time whereas we should. Fixes:67692435c4("sched: Rework pick_next_task() slow-path") Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
ab6c0f1585
commit
13aeb56dae
|
|
@ -8829,21 +8829,21 @@ simple:
|
||||||
return p;
|
return p;
|
||||||
|
|
||||||
idle:
|
idle:
|
||||||
if (!rf)
|
if (rf) {
|
||||||
return NULL;
|
new_tasks = sched_balance_newidle(rq, rf);
|
||||||
|
|
||||||
new_tasks = sched_balance_newidle(rq, rf);
|
/*
|
||||||
|
* Because sched_balance_newidle() releases (and re-acquires)
|
||||||
|
* rq->lock, it is possible for any higher priority task to
|
||||||
|
* appear. In that case we must re-start the pick_next_entity()
|
||||||
|
* loop.
|
||||||
|
*/
|
||||||
|
if (new_tasks < 0)
|
||||||
|
return RETRY_TASK;
|
||||||
|
|
||||||
/*
|
if (new_tasks > 0)
|
||||||
* Because sched_balance_newidle() releases (and re-acquires) rq->lock, it is
|
goto again;
|
||||||
* possible for any higher priority task to appear. In that case we
|
}
|
||||||
* must re-start the pick_next_entity() loop.
|
|
||||||
*/
|
|
||||||
if (new_tasks < 0)
|
|
||||||
return RETRY_TASK;
|
|
||||||
|
|
||||||
if (new_tasks > 0)
|
|
||||||
goto again;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* rq is about to be idle, check if we need to update the
|
* rq is about to be idle, check if we need to update the
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user