Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761273AbXJLJ02 (ORCPT ); Fri, 12 Oct 2007 05:26:28 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S933067AbXJLJVN (ORCPT ); Fri, 12 Oct 2007 05:21:13 -0400 Received: from e1.ny.us.ibm.com ([32.97.182.141]:44567 "EHLO e1.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933059AbXJLJVK (ORCPT ); Fri, 12 Oct 2007 05:21:10 -0400 Date: Fri, 12 Oct 2007 14:50:44 +0530 From: Gautham R Shenoy To: Paul E McKenney , josh@freedesktop.org Cc: linux-kernel@vger.kernel.org, Andrew Morton , Oleg Nesterov , Dipankar Sarma , rostedt@goodmis.org Subject: [PATCH] Use raw_smp_processor_id() in rcu_random() Message-ID: <20071012092044.GA1138@in.ibm.com> Reply-To: ego@in.ibm.com MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.12-2006-07-14 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2342 Lines: 61 With CONFIG_PREEMPT=y on 2.6.23-rc8-mm2, rcu_random() calls smp_processor_id() from a preemptible context, triggering the following kernel error. BUG: using smp_processor_id() in preemptible [00000001] code: rcu_torture_fak/5155 caller is rcu_random+0x16/0x39 [rcutorture] [] dump_trace+0x68/0x1d2 [] show_trace_log_lvl+0x18/0x2c [] show_trace+0xf/0x11 [] dump_stack+0x12/0x14 [] debug_smp_processor_id+0xa1/0xb4 [] rcu_random+0x16/0x39 [rcutorture] [] <3>BUG: using smp_processor_id() in preemptible [00000001] code: rcu_torture_fak/5156 rcu_torture_fakewriter+0x4d/0xc5 [rcutorture] [] caller is rcu_random+0x16/0x39 [rcutorture] kthread+0x38/0x5e [] kernel_thread_helper+0x7/0x10 ======================= [] dump_trace+0x68/0x1d2 [] show_trace_log_lvl+0x18/0x2c [] show_trace+0xf/0x11 [] dump_stack+0x12/0x14 [] debug_smp_processor_id+0xa1/0xb4 [] rcu_random+0x16/0x39 [rcutorture] [] rcu_torture_fakewriter+0x4d/0xc5 [rcutorture] rcu_random() can do with raw_smp_processor_id() as a parameter to cpu_clock() in this particular context. Signed-off-by: Gautham R Shenoy --- kernel/rcutorture.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: linux-2.6.23-rc8/kernel/rcutorture.c =================================================================== --- linux-2.6.23-rc8.orig/kernel/rcutorture.c +++ linux-2.6.23-rc8/kernel/rcutorture.c @@ -170,7 +170,8 @@ static unsigned long rcu_random(struct rcu_random_state *rrsp) { if (--rrsp->rrs_count < 0) { - rrsp->rrs_state += (unsigned long)cpu_clock(smp_processor_id()); + rrsp->rrs_state += + (unsigned long)cpu_clock(raw_smp_processor_id()); rrsp->rrs_count = RCU_RANDOM_REFRESH; } rrsp->rrs_state = rrsp->rrs_state * RCU_RANDOM_MULT + RCU_RANDOM_ADD; -- Gautham R Shenoy Linux Technology Center IBM India. "Freedom comes with a price tag of responsibility, which is still a bargain, because Freedom is priceless!" - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/