Re: [PATCH -tip] v3 Consolidate sparse and lockdep declarations ininclude/linux/rcupdate.h

From: Paul E. McKenney
Date: Mon Aug 24 2009 - 12:04:12 EST


On Mon, Aug 24, 2009 at 03:34:46PM +0800, Lai Jiangshan wrote:
> Paul E. McKenney wrote:
> > From: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx>
> >
> > Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx>
> > ---

[ . . . ]

> > * 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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/