On Tue, 2008-04-08 at 15:49 -0700, Roland McGrath wrote:
Understood.
This was my conclusion as well. Certainly the path through do_fork()
(elucidated below) doesn't even allow the task in question to even be
executing, much less on a different CPU, but all these routines with
"struct task_struct *" parameters make me nervous. Which is why I
inserted the invariant check in the first place.
do_fork=>wake_up_new_task=>task_new_fair=>
enqueue_task_fair=>enqueue_entity=>update_curr
Well, as much as I would like to take the time to do that, I do have a
_real_ job, here. :-)
Yeah, agreed. Of course, I was hoping (in vain, apparently) to avoid
this level of overhead here. And I suspect I'll really have to do it in
each of these routines. But I suppose it can't be helped.
Even with a thorough understanding of the scheduler(s) and code based on
that understanding, we would still not (necessarily) be protected from
future changes that violate the assumptions we make on that basis.
--
Frank Mayhar <fmayhar@google.com>
Google, Inc.
--