]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/commit
sched/cgroup: Fix cpu_cgroup_fork() handling
authorVincent Guittot <vincent.guittot@linaro.org>
Fri, 17 Jun 2016 11:38:55 +0000 (13:38 +0200)
committermobile promotions <svcmobile_promotions@nvidia.com>
Mon, 15 Aug 2016 21:05:23 +0000 (14:05 -0700)
commitfb87e79b799b376fc8df26695cc555a9b8f46180
treef3250922da06abd3860e1af3ca5e3dc5d24d3634
parentac8607b501b3dc8a292d892ba3480964908b0ba7
sched/cgroup: Fix cpu_cgroup_fork() handling

A new fair task is detached and attached from/to task_group with:

  cgroup_post_fork()
    ss->fork(child) := cpu_cgroup_fork()
      sched_move_task()
        task_move_group_fair()

Which is wrong, because at this point in fork() the task isn't fully
initialized and it cannot 'move' to another group, because its not
attached to any group as yet.

In fact, cpu_cgroup_fork() needs a small part of sched_move_task() so we
can just call this small part directly instead sched_move_task(). And
the task doesn't really migrate because it is not yet attached so we
need the following sequence:

  do_fork()
    sched_fork()
      __set_task_cpu()

    cgroup_post_fork()
      set_task_rq() # set task group and runqueue

    wake_up_new_task()
      select_task_rq() can select a new cpu
      __set_task_cpu
      post_init_entity_util_avg
        attach_task_cfs_rq()
      activate_task
        enqueue_task

This patch makes that happen.

Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
[ Added TASK_SET_GROUP to set depth properly. ]
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
(cherry picked from upstream commit ea86cb4b7621e1298a37197005bf0abcc86348d4)

Conflicts:
kernel/sched/core.c

Change-Id: I885b15be815c2c925cf19b4ee5901eb8f5890d26
Signed-off-by: Sai Gurrappadi <sgurrappadi@nvidia.com>
Reviewed-on: http://git-master/r/1195369
GVS: Gerrit_Virtual_Submit
Reviewed-by: Puneet Saxena <puneets@nvidia.com>
Reviewed-by: Matthew Longnecker <mlongnecker@nvidia.com>
kernel/sched/core.c
kernel/sched/fair.c
kernel/sched/sched.h