* Peter Zijlstra ([EMAIL PROTECTED]) wrote: > Would have been nice if you'd CC'ed me :-/ > Sorry
> On Sat, 2007-07-14 at 14:42 -0400, Mathieu Desnoyers wrote: > > > @@ -4891,10 +4948,42 @@ static int migration_thread(void *data) > > list_del_init(head->next); > > > > spin_unlock(&rq->lock); > > - __migrate_task(req->task, cpu, req->dest_cpu); > > + migrated = __migrate_task(req->task, cpu, req->dest_cpu); > > local_irq_enable(); > > - > > - complete(&req->done); > > + if (!migrated) { > > + /* > > + * If the process has not been migrated, let it run > > + * until it reaches a migration_check() so it can > > + * wake us up. > > + */ > > + spin_lock_irq(&rq->lock); > > + head = &rq->migration_queue; > > + list_add(&req->list, head); > > + if (req->task->se.on_rq > > + || !task_migrate_count(req->task)) { > > + /* > > + * The process is on the runqueue, it could > > + * exit its critical section at any moment, > > + * don't race with it and retry actively. > > + * Also, if the thread is not on the runqueue > > + * and has a zero migration count > > + * (__migrate_task failed because cpus allowed > > + * changed), just retry. > > + */ > > + spin_unlock_irq(&rq->lock); > > + continue; > > + } > > + set_tsk_thread_flag(req->task, TIF_NEED_MIGRATE); > > + set_current_state(TASK_INTERRUPTIBLE); > > + spin_unlock_irq(&rq->lock); > > + /* > > + * Wait for the process currently in its critical > > + * section. > > + */ > > + wake_up_process(req->task); > > + schedule(); > > + } else > > + complete(&req->done); > > } > > __set_current_state(TASK_RUNNING); > > return 0; > > I'm not really liking this, this way we hold up all other migration > requests. > True. You approach of delayed migration helps on this. -- Mathieu Desnoyers Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 - 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/