[PORT FROM R4]sched: Fix cgroup movement of newly created process
authorDaisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Thu, 15 Dec 2011 05:36:07 +0000 (14:36 +0900)
committerbuildbot <buildbot@intel.com>
Wed, 27 Jun 2012 04:21:08 +0000 (21:21 -0700)
commitf973e3eb0faf72b03ed52cf1aedf2ca7c19dd5ec
treedcde06060b6b9be7642c5fe5b71a30a108deb641
parent9cf9dec2b00aa0e07dfaaf78146998915847797f
[PORT FROM R4]sched: Fix cgroup movement of newly created process

BZ: 42195

(backport of upstream commit 7ceff013, merged in 3.3-rc1)

There is a small race between do_fork() and sched_move_task(), which is
trying to move the child.

            do_fork()                 sched_move_task()
 --------------------------------+---------------------------------
  copy_process()
    sched_fork()
      task_fork_fair()
        -> vruntime of the child is initialized
           based on that of the parent.
  -> we can see the child in "tasks" file now.
                                    task_rq_lock()
                                    task_move_group_fair()
                                      -> child.se.vruntime
                                           -= (old)cfs_rq->min_vruntime
                                           += (new)cfs_rq->min_vruntime
                                    task_rq_unlock()
  wake_up_new_task()
    ...
    enqueue_entity()
      child.se.vruntime += cfs_rq->min_vruntime

As a result, vruntime of the child becomes far bigger than min_vruntime,
if (new)cfs_rq->min_vruntime >> (old)cfs_rq->min_vruntime.

This patch fixes this problem by just ignoring such process in
task_move_group_fair(), because the vruntime has already been normalized in
task_fork_fair().

Signed-off-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Tejun Heo <tj@kernel.org>
Link: http://lkml.kernel.org/r/20111215143607.2ee12c5d.nishimura@mxp.nes.nec.co.jp
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Change-Id: I43b700487d934ede48fa95fe9942176d740c24f1
Orig-Change-Id: I2c9db9352e9ce33a62880192f798687280bd02ad
Signed-off-by: German Monroy <german.monroy@intel.com>
Reviewed-on: http://android.intel.com:8080/54408
Reviewed-by: Yang, Fei <fei.yang@intel.com>
Tested-by: Ng, Cheon-woei <cheon-woei.ng@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
kernel/sched_fair.c