diff options
author | Ingo Molnar <mingo@elte.hu> | 2007-08-28 06:53:24 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-08-28 06:53:24 -0400 |
commit | b77d69db9f4ba03b2ed17e383c2d73ca89f5ab14 (patch) | |
tree | 6ef528381357a030d19493aaceb4632813b2ca9e | |
parent | 7109c4429af3640f79a638f177fc5d05b9807149 (diff) |
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>
-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 9f06094e5275..0c718857176f 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) | |||
489 | { | 489 | { |
490 | unsigned long delta_fair; | 490 | unsigned long delta_fair; |
491 | 491 | ||
492 | if (unlikely(!se->wait_start_fair)) | ||
493 | return; | ||
494 | |||
492 | delta_fair = (unsigned long)min((u64)(2*sysctl_sched_runtime_limit), | 495 | delta_fair = (unsigned long)min((u64)(2*sysctl_sched_runtime_limit), |
493 | (u64)(cfs_rq->fair_clock - se->wait_start_fair)); | 496 | (u64)(cfs_rq->fair_clock - se->wait_start_fair)); |
494 | 497 | ||