On Sun, Apr 24, 2016 at 02:14:24PM -0700, Guenter Roeck wrote: > Hi, > > I see the following log message when running a qemu test for 'beagle' > with omap2plus_defconfig. > > =============================== > [ 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) > [<c010f55c>] (unwind_backtrace) from [<c010b64c>] (show_stack+0x10/0x14) > [<c010b64c>] (show_stack) from [<c047acbc>] (dump_stack+0xa8/0xe0) > [<c047acbc>] (dump_stack) from [<c012bc10>] (pwrdm_set_next_pwrst+0xf8/0x1cc) > [<c012bc10>] (pwrdm_set_next_pwrst) from [<c01269fc>] > (omap3_enter_idle_bm+0x1b8/0x1e8) > [<c01269fc>] (omap3_enter_idle_bm) from [<c05fa0b8>] > (cpuidle_enter_state+0x84/0x408) > [<c05fa0b8>] (cpuidle_enter_state) from [<c0182c1c>] > (cpu_startup_entry+0x1c8/0x3f0) > [<c0182c1c>] (cpu_startup_entry) from [<c0b00c20>] (start_kernel+0x354/0x3cc) > > bisect points to commit 'rcu: Remove superfluous versions of > rcu_read_lock_sched_held()'. Bisect log is attached.
I believe that the real fix is not a revert of that commit, but rather that some of the tracing statements need an "_rcuidle" suffix. Something like the following (untested, probably does not build) patch. Thanx, Paul ------------------------------------------------------------------------ commit ca91304178e1cf53ee391236a0ac3969cc814e5f Author: Paul E. McKenney <paul...@linux.vnet.ibm.com> Date: Sun Apr 24 14:30:16 2016 -0700 arm: Use _rcuidle tracepoint to allow use from idle Signed-off-by: Paul E. McKenney <paul...@linux.vnet.ibm.com> diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c index 78af6d8cf2e2..12b66b5bcc55 100644 --- a/arch/arm/mach-omap2/powerdomain.c +++ b/arch/arm/mach-omap2/powerdomain.c @@ -523,8 +523,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); }