netdev
[Top] [All Lists]

Re: [RFC][PATCH] identify in_dev_get rcu read-side critical sections

To: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
Subject: Re: [RFC][PATCH] identify in_dev_get rcu read-side critical sections
From: "Paul E. McKenney" <paulmck@xxxxxxxxxx>
Date: Thu, 29 Sep 2005 18:16:03 -0700
Cc: Suzanne Wood <suzannew@xxxxxxxxxx>, Robert.Olsson@xxxxxxxxxxx, davem@xxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxx, walpole@xxxxxxxxxx
In-reply-to: <20050930010404.GA21429@xxxxxxxxxxxxxxxxxxx>
References: <200509292330.j8TNUSmH019572@xxxxxxxxxxxxxxxxxxx> <20050930002346.GP8177@xxxxxxxxxx> <20050930002719.GC21062@xxxxxxxxxxxxxxxxxxx> <20050930003642.GQ8177@xxxxxxxxxx> <20050930010404.GA21429@xxxxxxxxxxxxxxxxxxx>
Reply-to: paulmck@xxxxxxxxxx
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mutt/1.4.1i
On Fri, Sep 30, 2005 at 11:04:04AM +1000, Herbert Xu wrote:
> On Thu, Sep 29, 2005 at 05:36:42PM -0700, Paul E. McKenney wrote:
> >
> > >   rcu_read_lock();
> > >   in_dev = dev->ip_ptr;
> > >   if (in_dev) {
> > >           in_dev = rcu_dereference(in_dev);
> > >           atomic_inc(&in_dev->refcnt);
> > >   }
> > >   rcu_read_unlock();
> > >   return in_dev;
> > 
> > How about:
> > 
> >     rcu_read_lock();
> >     in_dev = dev->ip_ptr;
> >     if (rcu_dereference(in_dev)) {
> >             atomic_inc(&in_dev->refcnt);
> >     }
> >     rcu_read_unlock();
> >     return in_dev;
> 
> With this the barrier will taken even when in_dev is NULL.
> 
> I agree this isn't such a big deal since it only impacts Alpha and then
> only when in_dev is NULL.  But as we already do the branch anyway to
> increment the reference count, we might as well make things a little
> better for Alpha.

OK, how about this instead?

        rcu_read_lock();
        in_dev = dev->ip_ptr;
        if (in_dev) {
                atomic_inc(&rcu_dereference(in_dev)->refcnt);
        }
        rcu_read_unlock();
        return in_dev;

                                                Thanx, Paul

<Prev in Thread] Current Thread [Next in Thread>