]> err.no Git - linux-2.6/commitdiff
sched: fix group scheduling for SCHED_BATCH
authorDmitry Adamushko <dmitry.adamushko@gmail.com>
Mon, 15 Oct 2007 15:00:14 +0000 (17:00 +0200)
committerIngo Molnar <mingo@elte.hu>
Mon, 15 Oct 2007 15:00:14 +0000 (17:00 +0200)
The following patch (sched: disable sleeper_fairness on SCHED_BATCH)
seems to break GROUP_SCHED. Although, it may be 'oops'-less due to the
possibility of 'p' being always a valid address.

Signed-off-by: Dmitry Adamushko <dmitry.adamushko@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/sched_fair.c

index 410b77aea216f959fb93f123df72b53a0ff1c288..3ac096e74fafff28ae7d91b91deb2abc7eb4c28d 100644 (file)
@@ -485,9 +485,8 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial)
                vruntime += sched_vslice_add(cfs_rq, se);
 
        if (!initial) {
-               struct task_struct *p = container_of(se, struct task_struct, se);
-
-               if (sched_feat(NEW_FAIR_SLEEPERS) && p->policy != SCHED_BATCH)
+               if (sched_feat(NEW_FAIR_SLEEPERS) && entity_is_task(se) &&
+                               task_of(se)->policy != SCHED_BATCH)
                        vruntime -= sysctl_sched_latency;
 
                vruntime = max_t(s64, vruntime, se->vruntime);