Messages in this thread | | | Date | Wed, 2 Apr 2008 13:22:55 +0530 | From | Srivatsa Vaddagiri <> | Subject | set_task_rq bug? |
| |
For the case of CONFIG_RT_GROUP_SCHED and !CONFIG_FAIR_GROUP_SCHED, this piece of code seems to be wrong?
/* Change a task's cfs_rq and parent entity if it moves across * CPUs/groups */ static inline void set_task_rq(struct task_struct *p, unsigned int cpu) { #ifdef CONFIG_FAIR_GROUP_SCHED p->se.cfs_rq = task_group(p)->cfs_rq[cpu]; p->se.parent = task_group(p)->se[cpu]; #endif
#ifdef CONFIG_RT_GROUP_SCHED p->rt.rt_rq = task_group(p)->rt_rq[cpu]; p->rt.parent = task_group(p)->rt_se[cpu]; #endif }
Basically for the above config case, a task's p->se.cfs_rq is never set, which seems to be incorrect, as lot of sched_fair.c (for ex: enqueue_task_fair) banks on the availability of this information. It should atleast be set to &rq->cfs?
-- Regards, vatsa
| |