]> err.no Git - linux-2.6/commitdiff
sched: fix wait_start_fair condition in update_stats_wait_end()
authorIngo Molnar <mingo@elte.hu>
Tue, 28 Aug 2007 10:53:24 +0000 (12:53 +0200)
committerIngo Molnar <mingo@elte.hu>
Tue, 28 Aug 2007 10:53:24 +0000 (12:53 +0200)
Peter Zijlstra noticed the following bug in SCHED_FEAT_SKIP_INITIAL (which
is disabled by default at the moment): it relies on se.wait_start_fair
being 0 while update_stats_wait_end() did not recognize a 0 value,
so instead of 'skipping' the initial interval we gave the new child
a maximum boost of +runtime-limit ...

(No impact on the default kernel, but nice to fix for completeness.)

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Mike Galbraith <efault@gmx.de>
kernel/sched_fair.c

index 9f06094e527576658ba338ee1906092d07029d49..0c718857176fba7b02038e045a87aef5711b4c59 100644 (file)
@@ -489,6 +489,9 @@ update_stats_wait_end(struct cfs_rq *cfs_rq, struct sched_entity *se)
 {
        unsigned long delta_fair;
 
+       if (unlikely(!se->wait_start_fair))
+               return;
+
        delta_fair = (unsigned long)min((u64)(2*sysctl_sched_runtime_limit),
                        (u64)(cfs_rq->fair_clock - se->wait_start_fair));