Messages in this thread | | | Subject | Re: [patch] sched: fix b5d9d734 blunder in task_new_fair() | From | Mike Galbraith <> | Date | Tue, 24 Nov 2009 19:36:07 +0100 |
| |
On Tue, 2009-11-24 at 19:27 +0100, Peter Zijlstra wrote: > On Tue, 2009-11-24 at 19:21 +0100, Mike Galbraith wrote: > > On Tue, 2009-11-24 at 18:54 +0100, Peter Zijlstra wrote: > > > On Tue, 2009-11-24 at 18:35 +0100, Peter Zijlstra wrote: > > > > On Tue, 2009-11-24 at 18:07 +0100, Mike Galbraith wrote: > > > > > > if (p->sched_class->task_new) { > > > > > > /* can detect migration through: task_cpu(p) != smp_processor_id() */ > > > > > > > > > > What if the parent was migrated before we got here? > > > > > > > > Well, the only case it really matters for is the child_runs_first crap, > > > > which is basically broken on SMP anyway, so I don't think we care too > > > > much if we race here. > > > > > > > > Unless I missed some detail that is ;-) > > > > > > > > > Also, we're running all this from the parent context, and we have > > > preemption disabled, we're not going anywhere. > > > > In sched_fork() and wake_up_new_process(), but in between? > > Hmm, right, back to the previous argument then ;-)
Yeah.
We can be preempted between original task struct copy and getting to sched_fork(), and after leaving copy_process(), so I don't see any way around lock parent, update and copy vruntime. Whether we race in placing the child wrt parent isn't a big deal, but the child's vruntime is, as is fiddling with the parent's task struct and runqueue.
-Mike
| |