Re: [RFC&PATCH] Alternative RCU implementation

Paul E. McKenney
2004-09-01T01:03:43Z

On Tue, Aug 31, 2004 at 08:10:50PM -0400, Jim Houston wrote:
> On Mon, 2004-08-30 at 13:38, Dipankar Sarma wrote:
>
> > > I'm also trying to figure out if I need the call_rcu_bh() changes.
> > > Since my patch will recognize a grace periods as soon as any
> > > pending read-side critical sections complete, I suspect that I
> > > don't need this change.
> >
> > Except that under a softirq flood, a reader in a different read-side
> > critical section may get delayed a lot holding up RCU. Let me know
> > if I am missing something here.
>
> Hi Dipankar,
>
> O.k. That makes sense. So the rcu_read_lock_bh(), rcu_read_unlock_bh()
> and call_rcu_bh() would be the preferred interface. Are there cases
> where they can't be used? How do you decide where to use the _bh
> flavor?

Hello, Jim,

You would use rcu_read_lock() instead of rcu_read_lock_bh() in cases
where you did not want the read-side code to disable bottom halves.
This is very similar to choosing between read_lock() and read_lock_bh()
-- if you unnecessarily use read_lock_bh() or rcu_read_lock_bh(), you
will be unnecessarily delaying drivers' bottom-half execution.

> I see that local_bh_enable() WARNS if interrupts are disabled. Is that
> the issue? Are rcu_read_lock()/rcu_read_unlock() ever called from
> code which disables interrupts?

The RCU "_bh()" interfaces correspond to a different set of quiescent
states than do the standard interfaces. You could indeed use
rcu_read_lock() with interrupts disabled, but I don't know of any
such use.

Thanx, Paul

> Jim Houston - Concurrent Computer Corp.
>
>