On 07/17, Ingo Molnar wrote: > > * Oleg Nesterov <[EMAIL PROTECTED]> wrote: > > > try_to_wake_up: > > > > if (p->se.on_rq) > > goto out_running; > > > > ... > > > > if (unlikely(task_running(rq, p))) > > goto out_activate; > > > > How it possible that rq->curr has on_rq == 0 ? > > > > AFAICS, this can only happen if this task is rq->idle. But idle > > threads should not sleep, we have a special "scheduling from the idle > > thread!" check in schedule(). > > it's also possible if an arch uses __ARCH_WANT_INTERRUPTS_ON_CTXSW, > right?
Ah, got it. I guess you meant __ARCH_WANT_UNLOCKED_CTXSW though. In that case schedule() drops rq->lock before the context switch, but doesn't clear ->oncpu. So, task_running(p) means we must not activate "p" on another CPU, otherwise it could be scheduled before the switch-in-progress completes. Thanks a lot! Oleg. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/