On Thu, 28 Jul 2011, Yong Zhang wrote: > On Wed, Jul 27, 2011 at 11:30:08AM -0700, Paul E. McKenney wrote: > > o Tasks awakening outside of migrate-disable regions will pick > > the CPU running the lowest-priority task, whether or not this > > task is in migrate-disable state. (At least I don't see > > anything in 3.0-rt3 that looks like a scheduling decision > > based on ->migrate_disable, perhaps due to blindness.) > > I'm also confused here, seems we just disable migration for RT task. > migrate_disable() > { > ... > if (p->sched_class->set_cpus_allowed) > p->sched_class->set_cpus_allowed(p, mask); > p->rt.nr_cpus_allowed = cpumask_weight(mask); > ... > } > > Shouldn't we also forbid migration on !RT task? We do. Just RT is the only sched class which has a set_cpus_allowed() callback implemented and want's an update to its rt.nr_cpus_allowed field. if (!p->migrate_disable) { if (p->sched_class && p->sched_class->set_cpus_allowed) p->sched_class->set_cpus_allowed(p, new_mask); p->rt.nr_cpus_allowed = cpumask_weight(new_mask); } The general part is here: cpumask_copy(&p->cpus_allowed, new_mask); And tsk_cpus_allowed() does: { if (p->migrate_disable) return cpumask_of(task_cpu(p)); return &p->cpus_allowed; } which is the relevant information to keep any task independent of it's sched class pinned. Thanks, tglx -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html