Messages in this thread |  | | Date | Tue, 17 Feb 2015 14:32:26 +0100 | From | Peter Zijlstra <> | Subject | Re: [PATCH] sched: Make dl_task_time() use task_rq_lock() |
| |
On Tue, Feb 17, 2015 at 01:31:39PM +0100, Peter Zijlstra wrote: > On Tue, Feb 17, 2015 at 02:33:58PM +0300, Kirill Tkhai wrote: > > > So, we move task_rq_lock() to sched.h, and dl_task_timer() uses it? > > Yep, like this. I've also modified your earlier patch to dl_task_time() > back to its original form. > > --- > Subject: sched: Make dl_task_time() use task_rq_lock() > From: Peter Zijlstra <peterz@infradead.org> > Date: Tue Feb 17 13:22:25 CET 2015 > > Kirill reported that a dl task can be throttled and dequeued at the > same time. This happens, when it becomes throttled in schedule(), > which is called to go to sleep: > > current->state = TASK_INTERRUPTIBLE; > schedule() > deactivate_task() > dequeue_task_dl() > update_curr_dl() > start_dl_timer() > __dequeue_task_dl() > prev->on_rq = 0; > > This invalidates the assumption from commit 0f397f2c90ce ("sched/dl: > Fix race in dl_task_timer()"): > > "The only reason we don't strictly need ->pi_lock now is because > we're guaranteed to have p->state == TASK_RUNNING here and are > thus free of ttwu races". > > And therefore we have to use the full task_rq_lock() here. > > This further amends the fact that we forgot to update the rq lock loop > for TASK_ON_RQ_MIGRATE, from commit cca26e8009d1 ("sched: Teach > scheduler to understand TASK_ON_RQ_MIGRATING state"). > > Reported-by: Kirill Tkhai <ktkhai@parallels.com> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> > --- > kernel/sched/core.c | 76 ------------------------------------------------ > kernel/sched/deadline.c | 12 +------ > kernel/sched/sched.h | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 79 insertions(+), 85 deletions(-)
Duh, I put it under CONFIG_SMP, /me changes patch to not do this.
|  |