From 53b122df15fa01df4b4d777eeec79eda2269d36d Mon Sep 17 00:00:00 2001 From: Daisuke Nishimura Date: Thu, 15 Dec 2011 14:36:07 +0900 Subject: [PATCH] --- yaml --- r: 277410 b: refs/heads/master c: 7ceff013c43c0f38f0d26c79507889c6791c0ea0 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/sched/fair.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 858966d67bda..d9411c05f31a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4fc420c91f53e0a9f95665c6b14a1983716081e7 +refs/heads/master: 7ceff013c43c0f38f0d26c79507889c6791c0ea0 diff --git a/trunk/kernel/sched/fair.c b/trunk/kernel/sched/fair.c index 525d69e5fb78..2d1ac6e2386d 100644 --- a/trunk/kernel/sched/fair.c +++ b/trunk/kernel/sched/fair.c @@ -5338,6 +5338,19 @@ static void task_move_group_fair(struct task_struct *p, int on_rq) * to another cgroup's rq. This does somewhat interfere with the * fair sleeper stuff for the first placement, but who cares. */ + /* + * When !on_rq, vruntime of the task has usually NOT been normalized. + * But there are some cases where it has already been normalized: + * + * - Moving a forked child which is waiting for being woken up by + * wake_up_new_task(). + * + * To prevent boost or penalty in the new cfs_rq caused by delta + * min_vruntime between the two cfs_rqs, we skip vruntime adjustment. + */ + if (!on_rq && !p->se.sum_exec_runtime) + on_rq = 1; + if (!on_rq) p->se.vruntime -= cfs_rq_of(&p->se)->min_vruntime; set_task_rq(p, task_cpu(p));