diff options
author | Ingo Molnar <mingo@elte.hu> | 2007-08-28 12:53:24 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-08-28 12:53:24 +0200 |
commit | b77d69db9f4ba03b2ed17e383c2d73ca89f5ab14 (patch) | |
tree | 6ef528381357a030d19493aaceb4632813b2ca9e /kernel | |
parent | 7109c4429af3640f79a638f177fc5d05b9807149 (diff) | |
download | op-kernel-dev-b77d69db9f4ba03b2ed17e383c2d73ca89f5ab14.zip op-kernel-dev-b77d69db9f4ba03b2ed17e383c2d73ca89f5ab14.tar.gz |
sched: fix wait_start_fair condition in update_stats_wait_end()
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>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sched_fair.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index 9f06094..0c71885 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -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)); |