Messages in this thread | | | Date | Mon, 24 Aug 2009 09:03:59 -0700 | From | "Paul E. McKenney" <> | Subject | Re: [PATCH -tip] v3 Consolidate sparse and lockdep declarations in include/linux/rcupdate.h |
| |
On Mon, Aug 24, 2009 at 03:34:46PM +0800, Lai Jiangshan wrote: > Paul E. McKenney wrote: > > From: Paul E. McKenney <paulmck@linux.vnet.ibm.com> > > > > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> > > ---
[ . . . ]
> > * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section > > @@ -160,10 +190,14 @@ extern int rcu_scheduler_active; > > static inline void rcu_read_lock_sched(void) > > { > > preempt_disable(); > > + __acquire(RCU_SCHED); > > + rcu_read_acquire(); > > } > > static inline void rcu_read_lock_sched_notrace(void) > > It need be marked "notrace" too.
I guess I just need to grep for "_notrace(" in my code. ;-)
> > { > > preempt_disable_notrace(); > > + __acquire(RCU_SCHED); > > + rcu_read_acquire(); > > } > > It may cause infinity recursion. > rcu_read_acquire() calls rcu_read_lock_sched_notrace() > before current->lockdep_recursion is set to 1 when tracing in on, > thus infinity recursion occurs.
That might explain Ingo's test results.
Thank you again, good catch!!!
Thanx, Paul
| |