diff options
| author | Paul E. McKenney <paulmck@us.ibm.com> | 2004-10-27 18:28:24 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-10-27 18:28:24 -0700 |
| commit | fa56b76fabdfdff9f8bcb8831ea9e7b4f76eddaf (patch) | |
| tree | 346688ebceddfc2f2c015367d065f12206aaa48d /net/decnet | |
| parent | 85a8f4f2956d63628482c685b812432421629fa2 (diff) | |
[PATCH] RCU: use rcu_assign_pointer()
This patch uses the rcu_assign_pointer() API to eliminate a number of explicit
memory barriers from code using RCU. This has been tested successfully on
i386 and ppc64.
Signed-off-by: <paulmck@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'net/decnet')
| -rw-r--r-- | net/decnet/dn_route.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c index 34f0b81e1784..32e3cd4bc3b9 100644 --- a/net/decnet/dn_route.c +++ b/net/decnet/dn_route.c @@ -287,10 +287,9 @@ static int dn_insert_route(struct dn_route *rt, unsigned hash, struct dn_route * if (compare_keys(&rth->fl, &rt->fl)) { /* Put it first */ *rthp = rth->u.rt_next; - smp_wmb(); - rth->u.rt_next = dn_rt_hash_table[hash].chain; - smp_wmb(); - dn_rt_hash_table[hash].chain = rth; + rcu_assign_pointer(rth->u.rt_next, + dn_rt_hash_table[hash].chain); + rcu_assign_pointer(dn_rt_hash_table[hash].chain, rth); rth->u.dst.__use++; dst_hold(&rth->u.dst); @@ -304,10 +303,8 @@ static int dn_insert_route(struct dn_route *rt, unsigned hash, struct dn_route * rthp = &rth->u.rt_next; } - smp_wmb(); - rt->u.rt_next = dn_rt_hash_table[hash].chain; - smp_wmb(); - dn_rt_hash_table[hash].chain = rt; + rcu_assign_pointer(rt->u.rt_next, dn_rt_hash_table[hash].chain); + rcu_assign_pointer(dn_rt_hash_table[hash].chain, rt); dst_hold(&rt->u.dst); rt->u.dst.__use++; |
