sched: Fix bug in SCHED_IDLE interaction with group scheduling
authorPaul Turner <pjt@google.com>
Sat, 11 Jul 2009 00:05:16 +0000 (17:05 -0700)
committerIngo Molnar <mingo@elte.hu>
Sat, 11 Jul 2009 08:00:09 +0000 (10:00 +0200)
One of the isolation modifications for SCHED_IDLE is the
unitization of sleeper credit.  However the check for this
assumes that the sched_entity we're placing always belongs to a
task.

This is potentially not true with group scheduling and leaves
us rummaging randomly when we try to pull the policy.

Signed-off-by: Paul Turner <pjt@google.com>
Cc: peterz@infradead.org
LKML-Reference: <alpine.DEB.1.00.0907101649570.29914@kitami.corp.google.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/sched_fair.c

index ba7fd6e9556f892dd941ecdd9e77be225929c251..7c248dc30f4199c5f945ace89b286808153d22bf 100644 (file)
@@ -687,7 +687,8 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial)
                         * all of which have the same weight.
                         */
                        if (sched_feat(NORMALIZED_SLEEPER) &&
-                                       task_of(se)->policy != SCHED_IDLE)
+                                       (!entity_is_task(se) ||
+                                        task_of(se)->policy != SCHED_IDLE))
                                thresh = calc_delta_fair(thresh, se);
 
                        vruntime -= thresh;