diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-06-28 12:17:40 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-06-28 12:17:40 -0700 |
| commit | e6cb6281ef8547fea1243b1c2a4e0f08d9b86ae1 (patch) | |
| tree | 4444be8141566dec3c88ff5fa7354cbe4cebccdc /kernel/sched.c | |
| parent | ab8aadbda7d59d4674ef614cba2a67c50667a6af (diff) | |
| parent | 8695159967957015f8dfb49315d6f88e111d90e0 (diff) | |
| download | lwn-e6cb6281ef8547fea1243b1c2a4e0f08d9b86ae1.tar.gz lwn-e6cb6281ef8547fea1243b1c2a4e0f08d9b86ae1.zip | |
Merge branch 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
sched: silence PROVE_RCU in sched_fork()
idr: fix RCU lockdep splat in idr_get_next()
rcu: apply RCU protection to wake_affine()
Diffstat (limited to 'kernel/sched.c')
| -rw-r--r-- | kernel/sched.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index f8b8996228dd..a2d215d132f6 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -2494,7 +2494,16 @@ void sched_fork(struct task_struct *p, int clone_flags) if (p->sched_class->task_fork) p->sched_class->task_fork(p); + /* + * The child is not yet in the pid-hash so no cgroup attach races, + * and the cgroup is pinned to this child due to cgroup_fork() + * is ran before sched_fork(). + * + * Silence PROVE_RCU. + */ + rcu_read_lock(); set_task_cpu(p, cpu); + rcu_read_unlock(); #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) if (likely(sched_info_on())) |
