diff --git a/[refs] b/[refs] index b2141a09a1b8..fc8f6aeb316e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9de79c127cccecb11ae6a21ab1499e87aa222880 +refs/heads/master: c1abc95b157fe4574919942018af143203ecca8e diff --git a/trunk/drivers/net/Kconfig b/trunk/drivers/net/Kconfig index 8d0314dbd946..5b95796942db 100644 --- a/trunk/drivers/net/Kconfig +++ b/trunk/drivers/net/Kconfig @@ -193,6 +193,8 @@ source "drivers/net/phy/Kconfig" # Ethernet # +source "drivers/net/ethernet/Kconfig" + menuconfig NET_ETHERNET bool "Ethernet (10 or 100Mbit)" depends on !UML diff --git a/trunk/drivers/net/Makefile b/trunk/drivers/net/Makefile index e1eca2ab505e..670b5141f0d7 100644 --- a/trunk/drivers/net/Makefile +++ b/trunk/drivers/net/Makefile @@ -1,5 +1,5 @@ # -# Makefile for the Linux network (ethercard) device drivers. +# Makefile for the Linux network device drivers. # obj-$(CONFIG_MII) += mii.o diff --git a/trunk/drivers/net/ethernet/Kconfig b/trunk/drivers/net/ethernet/Kconfig new file mode 100644 index 000000000000..d59e4f2aa93f --- /dev/null +++ b/trunk/drivers/net/ethernet/Kconfig @@ -0,0 +1,14 @@ +# +# Ethernet LAN device configuration +# + +menuconfig ETHERNET + bool "Ethernet driver support" + depends on NET + default y + ---help--- + This section contains all the Ethernet device drivers. + +if ETHERNET + +endif # ETHERNET diff --git a/trunk/drivers/net/ethernet/Makefile b/trunk/drivers/net/ethernet/Makefile new file mode 100644 index 000000000000..0d21dda32038 --- /dev/null +++ b/trunk/drivers/net/ethernet/Makefile @@ -0,0 +1,3 @@ +# +# Makefile for the Linux network Ethernet device drivers. +# diff --git a/trunk/net/core/dst.c b/trunk/net/core/dst.c index d5e2c4c09107..14b33baf0733 100644 --- a/trunk/net/core/dst.c +++ b/trunk/net/core/dst.c @@ -171,7 +171,7 @@ void *dst_alloc(struct dst_ops *ops, struct net_device *dev, dst_init_metrics(dst, dst_default_metrics, true); dst->expires = 0UL; dst->path = dst; - RCU_INIT_POINTER(dst->_neighbour, NULL); + dst->_neighbour = NULL; #ifdef CONFIG_XFRM dst->xfrm = NULL; #endif @@ -229,11 +229,11 @@ struct dst_entry *dst_destroy(struct dst_entry * dst) smp_rmb(); again: - neigh = rcu_dereference_protected(dst->_neighbour, 1); + neigh = dst->_neighbour; child = dst->child; if (neigh) { - RCU_INIT_POINTER(dst->_neighbour, NULL); + dst->_neighbour = NULL; neigh_release(neigh); } @@ -360,19 +360,14 @@ static void dst_ifdown(struct dst_entry *dst, struct net_device *dev, if (!unregister) { dst->input = dst->output = dst_discard; } else { - struct neighbour *neigh; - dst->dev = dev_net(dst->dev)->loopback_dev; dev_hold(dst->dev); dev_put(dev); - rcu_read_lock(); - neigh = dst_get_neighbour(dst); - if (neigh && neigh->dev == dev) { - neigh->dev = dst->dev; + if (dst->_neighbour && dst->_neighbour->dev == dev) { + dst->_neighbour->dev = dst->dev; dev_hold(dst->dev); dev_put(dev); } - rcu_read_unlock(); } }