Messages in this thread | | | Date | Mon, 29 Aug 2011 10:29:26 +0800 | From | Yong Zhang <> | Subject | Re: [kernel.org users] [KORG] Panics on master backend |
| |
On Fri, Aug 26, 2011 at 03:57:39PM +0200, Oleg Nesterov wrote: > On 08/26, Yong Zhang wrote: > > > > On Thu, Aug 25, 2011 at 03:54:29PM +0200, Oleg Nesterov wrote: > > > > > > Of course it is not TASK_RUNNING, but it can be running or not. > > > > Yup. Before we go beyond ttwu_remote() in ttwu(), 'cpu' is not safe. > > For example, wait_event() could be preempted in between. > > > > But after we go beyond ttwu_remote(), ->pi_lock will stabilize it. > > Yes. > > > So after we take Oleg's suggestion("task_cpu(p) == smp_processor_id()"), > > things we left is just how to account stat correctly. > > Imho, we don't really care. This race is very unlikely,
Yup.
> and I think > that the "wrong" cpu argument in ttwu_stat() is harmless.
Hmm, the affected accounting is sched_domain->ttwu_wake_remote.
> > @@ -2696,7 +2697,12 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) > > success = 1; /* we're going to change ->state */ > > cpu = task_cpu(p); > > > > - if (p->on_rq && ttwu_remote(p, wake_flags)) > > + /* > > + * read cpu for another time if ttwu_remote() success, > > + * just to prevent task migration in between, otherwise > > + * we maybe account stat incorrectly. > > + */ > > + if (p->on_rq && ttwu_remote(p, wake_flags, &cpu)) > > I don't think this makes the things better. p->on_rq can be already > false or ttwu_remote() can fail, in this case we still use the result > of initial task_cpu().
Ah, My code (ttwu_remote(p, wake_flags, &cpu)) just catch the case: task is dancing with 'p->on_rq == true'.
But forget the case: task has danced with 'p->on_rq == false' in the end.
So we should reread task_cpu(p) if 'p->on_cpu == true && __ARCH_WANT_INTERRUPTS_ON_CTXSW == y', but the code will be a little ugly and it only aims to account stat more correctly. We need some balance here :) BTW, I don't think we should care much on the 'incorrect stat' either if we don't make intolerable mistake.
Thanks, Yong
| |