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

2 messages, 2 authors, 2005-09-30 · open the first message on its own page

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

From: Paul E. McKenney <hidden>
Date: 2005-09-30 01:15:28

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:
quoted
quoted
	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

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

From: Herbert Xu <herbert@gondor.apana.org.au>
Date: 2005-09-30 01:19:07

On Thu, Sep 29, 2005 at 06:16:03PM -0700, Paul E. McKenney wrote:
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;
Looks great.  Thanks Paul.
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} [off-list ref]
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help