Messages in this thread | | | Date | Thu, 28 Apr 2011 18:11:49 +0200 | From | Oleg Nesterov <> | Subject | Re: [RFC PATCH] cpuset: fix cpuset_cpus_allowed_fallback() don't update tsk->rt.nr_cpus_allowed |
| |
On 04/28, KOSAKI Motohiro wrote: > > Oleg, Peter, > > I apologize if I misunderstand a code.
Heh, I bet you understand it better than me ;)
> index f20eb8f..42dcbdc 100644 > --- a/include/linux/cpuset.h > +++ b/include/linux/cpuset.h > @@ -147,6 +147,7 @@ static inline void cpuset_cpus_allowed(struct task_struct *p, > static inline int cpuset_cpus_allowed_fallback(struct task_struct *p) > { > cpumask_copy(&p->cpus_allowed, cpu_possible_mask); > + p->rt.nr_cpus_allowed = cpumask_weight(&p->cpus_allowed); > return cpumask_any(cpu_active_mask); > } > > diff --git a/kernel/cpuset.c b/kernel/cpuset.c > index 1ceeb04..6e5bbe8 100644 > --- a/kernel/cpuset.c > +++ b/kernel/cpuset.c > @@ -2220,6 +2220,7 @@ int cpuset_cpus_allowed_fallback(struct task_struct *tsk) > cpumask_copy(&tsk->cpus_allowed, cpu_possible_mask); > cpu = cpumask_any(cpu_active_mask; > } > + tsk->rt.nr_cpus_allowed = cpumask_weight(&tsk->cpus_allowed);
I think you are right...
But, don't we need sched_class->set_cpus_allowed() in this case? Only for consistency, iiuc currently it is not needed because the task is not active.
IOW, perhaps cpuset_cpus_allowed_fallback() should do
if (p->sched_class->set_cpus_allowed) p->sched_class->set_cpus_allowed(p, cpu_possible_mask); else { cpumask_copy(&p->cpus_allowed, cpu_possible_mask); p->rt.nr_cpus_allowed = cpumask_weight(cpu_possible_mask); }
?
If yes, probably the new do_set_cpus_allowed(p, mask) helper makes sense, it can be used by set_cpus_allowed_ptr() too.
Oleg.
| |