From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759202Ab0FVJpd (ORCPT ); Tue, 22 Jun 2010 05:45:33 -0400 Received: from casper.infradead.org ([85.118.1.10]:45241 "EHLO casper.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754887Ab0FVJpb convert rfc822-to-8bit (ORCPT ); Tue, 22 Jun 2010 05:45:31 -0400 Subject: [PATCH] sched: silence PROVE_RCU in sched_fork() From: Peter Zijlstra To: Miles Lane Cc: paulmck@linux.vnet.ibm.com, Vivek Goyal , Eric Paris , Lai Jiangshan , Ingo Molnar , LKML , nauman@google.com, eric.dumazet@gmail.com, netdev@vger.kernel.org, Jens Axboe , Gui Jianfeng , Li Zefan , Johannes Berg , Paul Menage In-Reply-To: References: <20100608001929.GF2387@linux.vnet.ibm.com> <1275986441.5408.111.camel@twins> <1276004075.2987.208.camel@twins> <1276097068.1745.13.camel@laptop> <1276106229.1745.65.camel@laptop> <1276107311.1745.66.camel@laptop> <1276118458.1745.144.camel@laptop> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Date: Tue, 22 Jun 2010 11:44:53 +0200 Message-ID: <1277199893.1875.690.camel@laptop> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Paul Menage, Li Zefan, any comments? --- Because cgroup_fork() is ran before sched_fork() [ from copy_process() ] and the child's pid is not yet visible the child is pinned to its cgroup. Therefore we can silence this warning. A nicer solution would be moving cgroup_fork() to right after dup_task_struct() and exclude PF_STARTING from task_subsys_state(). Signed-off-by: Peter Zijlstra --- kernel/sched.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/kernel/sched.c b/kernel/sched.c index b697606..2e79518 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -2561,7 +2561,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()))