Re: [PATCH] sched/deadline: Fix stale throttling on de-/boosted tasks

From: Daniel Bristot de Oliveira
Date: Wed Sep 16 2020 - 03:40:26 EST

On 9/2/20 11:43 AM, peterz@xxxxxxxxxxxxx wrote:
> On Wed, Sep 02, 2020 at 08:00:24AM +0200, Juri Lelli wrote:
>> On 31/08/20 13:07, Lucas Stach wrote:
>>> When a boosted task gets throttled, what normally happens is that it's
>>> immediately enqueued again with ENQUEUE_REPLENISH, which replenishes the
>>> runtime and clears the dl_throttled flag. There is a special case however:
>>> if the throttling happened on sched-out and the task has been deboosted in
>>> the meantime, the replenish is skipped as the task will return to its
>>> normal scheduling class. This leaves the task with the dl_throttled flag
>>> set.
>>> Now if the task gets boosted up to the deadline scheduling class again
>>> while it is sleeping, it's still in the throttled state. The normal wakeup
>>> however will enqueue the task with ENQUEUE_REPLENISH not set, so we don't
>>> actually place it on the rq. Thus we end up with a task that is runnable,
>>> but not actually on the rq and neither a immediate replenishment happens,
>>> nor is the replenishment timer set up, so the task is stuck in
>>> forever-throttled limbo.
>>> Clear the dl_throttled flag before dropping back to the normal scheduling
>>> class to fix this issue.
>>> Signed-off-by: Lucas Stach <l.stach@xxxxxxxxxxxxxx>
>> Acked-by: Juri Lelli <juri.lelli@xxxxxxxxxx>

I faced a similar issue, but involving DL tasks (not !DL):

While debugging that problem, I reviewed and tested this patch,
and we need it. So:

Reviewed-by: Daniel Bristot de Oliveira <bristot@xxxxxxxxxx>

-- Daniel

> Thanks!