From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964891AbcDYUZQ (ORCPT ); Mon, 25 Apr 2016 16:25:16 -0400 Received: from bh-25.webhostbox.net ([208.91.199.152]:36685 "EHLO bh-25.webhostbox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933428AbcDYUZO (ORCPT ); Mon, 25 Apr 2016 16:25:14 -0400 Date: Mon, 25 Apr 2016 13:25:10 -0700 From: Guenter Roeck To: "Paul E. McKenney" Cc: Boqun Feng , Josh Triplett , Steven Rostedt , linux-kernel@vger.kernel.org Subject: Re: next: suspicious RCU usage message since commit 'rcu: Remove superfluous versions of rcu_read_lock_sched_held()' Message-ID: <20160425202510.GA7917@roeck-us.net> References: <20160424211424.GA20388@roeck-us.net> <20160424213147.GW3756@linux.vnet.ibm.com> <571D5D36.3060308@roeck-us.net> <20160425052847.GY3756@linux.vnet.ibm.com> <571DAD15.6070708@roeck-us.net> <20160425054922.GA3756@linux.vnet.ibm.com> <571DB8A1.7000704@roeck-us.net> <20160425171239.GE3874@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160425171239.GE3874@linux.vnet.ibm.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Authenticated_sender: guenter@roeck-us.net X-OutGoing-Spam-Status: No, score=-1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - bh-25.webhostbox.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - roeck-us.net X-Get-Message-Sender-Via: bh-25.webhostbox.net: authenticated_id: guenter@roeck-us.net X-Authenticated-Sender: bh-25.webhostbox.net: guenter@roeck-us.net X-Source: X-Source-Args: X-Source-Dir: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Apr 25, 2016 at 10:12:39AM -0700, Paul E. McKenney wrote: > On Sun, Apr 24, 2016 at 11:26:41PM -0700, Guenter Roeck wrote: > > On 04/24/2016 10:49 PM, Paul E. McKenney wrote: > > >On Sun, Apr 24, 2016 at 10:37:25PM -0700, Guenter Roeck wrote: > > >>On 04/24/2016 10:28 PM, Paul E. McKenney wrote: > > >>>On Sun, Apr 24, 2016 at 04:56:38PM -0700, Guenter Roeck wrote: > > [ . . . ] > > > >>>>After making the same change in _pwrdm_state_switch(), the traceback is gone > > >>>>from my tests (beagle, beagle-xm, and overo-tobi). > > >>> > > >>>Very good! > > >>> > > >>>(And yes, you normally find these one at a time...) > > >>> > > >>Are you going to submit a formal patch ? > > > > > >I can, but please feel free to send mine along with yours, if you wish. > > > > > I think it would be best if you send a single patch which fixes both calls. > > Like this one? > > If so, could you please run it to make sure that it actually fixes the > problem? And if it does, would you be willing to give me a Tested-by? > It does. Tested-by: inline below. Thanks, Guenter > Thanx, Paul > > ------------------------------------------------------------------------ > > commit e3c9e1a46984b8c3e4204f138aced7630c4b85c2 > Author: Paul E. McKenney > Date: Sun Apr 24 14:30:16 2016 -0700 > > arm: Use _rcuidle tracepoint to allow use from idle > > Testing on ARM encountered the following pair of lockdep-RCU splats: > > ------------------------------------------------------------------------ > > =============================== > [ INFO: suspicious RCU usage. ] > 4.6.0-rc4-next-20160422 #1 Not tainted > ------------------------------- > include/trace/events/power.h:328 suspicious rcu_dereference_check() usage! > > other info that might help us debug this: > > RCU used illegally from idle CPU! > rcu_scheduler_active = 1, debug_locks = 0 > RCU used illegally from extended quiescent state! > no locks held by swapper/0/0. > > stack backtrace: > CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.6.0-rc4-next-20160422 #1 > Hardware name: Generic OMAP3-GP (Flattened Device Tree) > [] (unwind_backtrace) from [] (show_stack+0x10/0x14) > [] (show_stack) from [] (dump_stack+0xa8/0xe0) > [] (dump_stack) from [] (pwrdm_set_next_pwrst+0xf8/0x1cc) > [] (pwrdm_set_next_pwrst) from [] (omap3_enter_idle_bm+0x1b8/0x1e8) > [] (omap3_enter_idle_bm) from [] (cpuidle_enter_state+0x84/0x408) > [] (cpuidle_enter_state) from [] (cpu_startup_entry+0x1c8/0x3f0) > [] (cpu_startup_entry) from [] (start_kernel+0x354/0x3cc) > > ------------------------------------------------------------------------ > > [] (unwind_backtrace) from [] (show_stack+0x10/0x14) > [] (show_stack) from [] (dump_stack+0xa8/0xe0) > [] (dump_stack) from [] (_pwrdm_state_switch+0x188/0x32c) > [] (_pwrdm_state_switch) from [] (_pwrdm_post_transition_cb+0xc/0x14) > [] (_pwrdm_post_transition_cb) from [] (pwrdm_for_each+0x30/0x5c) > [] (pwrdm_for_each) from [] (pwrdm_post_transition+0x24/0x30) > [] (pwrdm_post_transition) from [] (omap_sram_idle+0xfc/0x240) > [] (omap_sram_idle) from [] (omap3_enter_idle_bm+0xf0/0x1e8) > [] (omap3_enter_idle_bm) from [] (cpuidle_enter_state+0x84/0x408) > [] (cpuidle_enter_state) from [] (cpu_startup_entry+0x1c8/0x3f0) > [] (cpu_startup_entry) from [] (start_kernel+0x354/0x3cc) > > ------------------------------------------------------------------------ > > These are caused by event tracing from the idle loop. This commit > therefore adds the _rcuidle suffix to make RCU aware of this implicit > use of RCU by event tracing, thus preventing both splats. > > Reported-by: Guenter Roeck Tested-by: Guenter Roeck > Signed-off-by: Paul E. McKenney > Cc: Tony Lindgren > Cc: Russell King > Cc: Steven Rostedt > Cc: > Cc: > > diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c > index 78af6d8cf2e2..daf2753de7aa 100644 > --- a/arch/arm/mach-omap2/powerdomain.c > +++ b/arch/arm/mach-omap2/powerdomain.c > @@ -186,8 +186,9 @@ static int _pwrdm_state_switch(struct powerdomain *pwrdm, int flag) > trace_state = (PWRDM_TRACE_STATES_FLAG | > ((next & OMAP_POWERSTATE_MASK) << 8) | > ((prev & OMAP_POWERSTATE_MASK) << 0)); > - trace_power_domain_target(pwrdm->name, trace_state, > - smp_processor_id()); > + trace_power_domain_target_rcuidle(pwrdm->name, > + trace_state, > + smp_processor_id()); > } > break; > default: > @@ -523,8 +524,8 @@ int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst) > > if (arch_pwrdm && arch_pwrdm->pwrdm_set_next_pwrst) { > /* Trace the pwrdm desired target state */ > - trace_power_domain_target(pwrdm->name, pwrst, > - smp_processor_id()); > + trace_power_domain_target_rcuidle(pwrdm->name, pwrst, > + smp_processor_id()); > /* Program the pwrdm desired target state */ > ret = arch_pwrdm->pwrdm_set_next_pwrst(pwrdm, pwrst); > } >