Messages in this thread | | | Date | Wed, 07 Jan 2015 14:14:11 +0100 | From | Luca Abeni <> | Subject | Re: Another SCHED_DEADLINE bug (with bisection and possible fix) |
| |
On 01/07/2015 02:04 PM, Kirill Tkhai wrote: [...] >>> and further enqueue_task() places it on the dl_rq. >> I was under the impression that no further enqueue_task() will happen (since >> the task is throttled, it is not on runqueue, so __sched_setscheduler() will >> not dequeue/enqueue it). >> But I am probably missing something else :) > > We have two concept of "on runqueue". The first one is rq->on_rq. It means > that a task is "queued". The second is on_dl_rq(dl_se). > > When task is not "queued", it's always not on dl_rq. > > When task is "queued" it may be in two states: > 1)on_dl_rq() -- this means the task is not throttled; > 2)!on_dl_rq() -- is task as throttled. > > So when we are discussing about a throttled task, the task is "queued". If > you clear dl_throttled, __sched_setscheduler() places it back it the both > meaning: on_rq and on_dl_rq, and the task becomes available for picking > in __schedule(). Ah, I see. Thanks for explaining! Now, everything is more clear and I agree with you.
[...] > Does my patch help you? It helps me, but anyway I need your confirmation. I am just back from vacations, and I had no time to test it yet... I hope to test it before the end of the week, and I'll let you know (but now I am convinced that it should help).
Thanks again, Luca
| |