summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2007-08-28 12:53:24 +0200
committerIngo Molnar <mingo@elte.hu>2007-08-28 12:53:24 +0200
commitb77d69db9f4ba03b2ed17e383c2d73ca89f5ab14 (patch)
tree6ef528381357a030d19493aaceb4632813b2ca9e /kernel
parent7109c4429af3640f79a638f177fc5d05b9807149 (diff)
downloadlinux-b77d69db9f4ba03b2ed17e383c2d73ca89f5ab14.tar.gz
linux-b77d69db9f4ba03b2ed17e383c2d73ca89f5ab14.tar.bz2
linux-b77d69db9f4ba03b2ed17e383c2d73ca89f5ab14.zip
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.c3
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)
{
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));