summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86_64/kernel/mce.c3
-rw-r--r--include/linux/list.h2
-rw-r--r--net/core/netfilter.c3
-rw-r--r--net/decnet/dn_route.c13
-rw-r--r--net/ipv4/devinet.c3
-rw-r--r--net/ipv4/route.c7
-rw-r--r--net/sched/sch_api.c3
7 files changed, 12 insertions, 22 deletions
diff --git a/arch/x86_64/kernel/mce.c b/arch/x86_64/kernel/mce.c
index c771dc8e3f60..5da150baf25e 100644
--- a/arch/x86_64/kernel/mce.c
+++ b/arch/x86_64/kernel/mce.c
@@ -361,8 +361,7 @@ static ssize_t mce_read(struct file *filp, char __user *ubuf, size_t usize, loff
memset(mcelog.entry, 0, next * sizeof(struct mce));
mcelog.next = 0;
- smp_wmb();
-
+
synchronize_kernel();
/* Collect entries that were still getting written before the synchronize. */
diff --git a/include/linux/list.h b/include/linux/list.h
index 94bed0f27d33..7cad5322077c 100644
--- a/include/linux/list.h
+++ b/include/linux/list.h
@@ -568,8 +568,6 @@ static inline void hlist_del_init(struct hlist_node *n)
}
}
-#define hlist_del_rcu_init hlist_del_init
-
static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
{
struct hlist_node *first = h->first;
diff --git a/net/core/netfilter.c b/net/core/netfilter.c
index 91b3bb238edc..9db8b4467f9d 100644
--- a/net/core/netfilter.c
+++ b/net/core/netfilter.c
@@ -751,10 +751,9 @@ int nf_log_register(int pf, nf_logfn *logfn)
/* Any setup of logging members must be done before
* substituting pointer. */
- smp_wmb();
spin_lock(&nf_log_lock);
if (!nf_logging[pf]) {
- nf_logging[pf] = logfn;
+ rcu_assign_pointer(nf_logging[pf], logfn);
ret = 0;
}
spin_unlock(&nf_log_lock);
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++;
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index bda63766b6ab..cb697aba93a2 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -158,8 +158,7 @@ struct in_device *inetdev_init(struct net_device *dev)
/* Account for reference dev->ip_ptr */
in_dev_hold(in_dev);
- smp_wmb();
- dev->ip_ptr = in_dev;
+ rcu_assign_pointer(dev->ip_ptr, in_dev);
#ifdef CONFIG_SYSCTL
devinet_sysctl_register(in_dev, &in_dev->cnf);
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 27ce169f63b9..2d8003194fdd 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -801,14 +801,13 @@ restart:
* must be visible to another weakly ordered CPU before
* the insertion at the start of the hash chain.
*/
- smp_wmb();
- rth->u.rt_next = rt_hash_table[hash].chain;
+ rcu_assign_pointer(rth->u.rt_next,
+ rt_hash_table[hash].chain);
/*
* Since lookup is lockfree, the update writes
* must be ordered for consistency on SMP.
*/
- smp_wmb();
- rt_hash_table[hash].chain = rth;
+ rcu_assign_pointer(rt_hash_table[hash].chain, rth);
rth->u.dst.__use++;
dst_hold(&rth->u.dst);
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index 127fb296bf92..fee8da1a1c77 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -453,10 +453,9 @@ qdisc_create(struct net_device *dev, u32 handle, struct rtattr **tca, int *errp)
/* enqueue is accessed locklessly - make sure it's visible
* before we set a netdevice's qdisc pointer to sch */
- smp_wmb();
if (!ops->init || (err = ops->init(sch, tca[TCA_OPTIONS-1])) == 0) {
qdisc_lock_tree(dev);
- list_add_tail(&sch->list, &dev->qdisc_list);
+ list_add_tail_rcu(&sch->list, &dev->qdisc_list);
qdisc_unlock_tree(dev);
#ifdef CONFIG_NET_ESTIMATOR