aboutsummaryrefslogtreecommitdiff
path: root/kernel/sched/fair.c
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2013-10-04 00:30:17 +0100
committerMark Brown <broonie@linaro.org>2013-10-04 00:30:17 +0100
commit18d8ff256f495bee7bcf016d9006d4b330e29260 (patch)
treee3d01967862b312711e27bd790c57e20c723d0c1 /kernel/sched/fair.c
parent2a0458773656240cf6fa97f1126c92dcddf8ab90 (diff)
parent8c15abc94c737f9120d3d4a550abbcbb9be121f6 (diff)
Merge tag 'v3.10.14' into linux-linaro-lsk
This is the 3.10.14 stable release
Diffstat (limited to 'kernel/sched/fair.c')
-rw-r--r--kernel/sched/fair.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 5f277f2d34d..1d171effac2 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -7040,11 +7040,15 @@ static void task_fork_fair(struct task_struct *p)
cfs_rq = task_cfs_rq(current);
curr = cfs_rq->curr;
- if (unlikely(task_cpu(p) != this_cpu)) {
- rcu_read_lock();
- __set_task_cpu(p, this_cpu);
- rcu_read_unlock();
- }
+ /*
+ * Not only the cpu but also the task_group of the parent might have
+ * been changed after parent->se.parent,cfs_rq were copied to
+ * child->se.parent,cfs_rq. So call __set_task_cpu() to make those
+ * of child point to valid ones.
+ */
+ rcu_read_lock();
+ __set_task_cpu(p, this_cpu);
+ rcu_read_unlock();
update_curr(cfs_rq);