Message ID | 1304916275.3207.79.camel@edumazet-laptop |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
2011/5/9 Eric Dumazet <eric.dumazet@gmail.com>: > veth devices dont use the batched device unregisters yet. > > Since veth are a pair of devices, it makes sense to use a batch of two > unregisters, this roughly divide dismantle time by two. [...] > --- a/drivers/net/veth.c > +++ b/drivers/net/veth.c > @@ -451,8 +451,16 @@ static void veth_dellink(struct net_device *dev, struct list_head *head) > priv = netdev_priv(dev); > peer = priv->peer; > > - unregister_netdevice_queue(dev, head); > - unregister_netdevice_queue(peer, head); > + if (head == NULL) { > + LIST_HEAD(list); > + /* make a batch of two devices to speedup unregister */ > + unregister_netdevice_queue(dev, &list); > + unregister_netdevice_queue(peer, &list); > + unregister_netdevice_many(&list); > + } else { > + unregister_netdevice_queue(dev, head); > + unregister_netdevice_queue(peer, head); > + } You could change dellink callers to always pass head != NULL. As a side effect, unregister_netdevice_queue() would do just what its name suggests. Best Regards, Michał Mirosław -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Le lundi 09 mai 2011 à 08:56 +0200, Michał Mirosław a écrit : > You could change dellink callers to always pass head != NULL. As a > side effect, unregister_netdevice_queue() would do just what its name > suggests. Good idea. At first glance, macvlan and rtnetlink.c would need a change. This would help macvlan_device_event( event=NETDEV_UNREGISTER) use batch as well. And yes, unregister_netdevice_queue(dev, head) would only make a list_move_tail(&dev->unreg_list, head); Will submit a patch soon, thanks ! -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/veth.c b/drivers/net/veth.c index 3b99f64..77c4679 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c @@ -451,8 +451,16 @@ static void veth_dellink(struct net_device *dev, struct list_head *head) priv = netdev_priv(dev); peer = priv->peer; - unregister_netdevice_queue(dev, head); - unregister_netdevice_queue(peer, head); + if (head == NULL) { + LIST_HEAD(list); + /* make a batch of two devices to speedup unregister */ + unregister_netdevice_queue(dev, &list); + unregister_netdevice_queue(peer, &list); + unregister_netdevice_many(&list); + } else { + unregister_netdevice_queue(dev, head); + unregister_netdevice_queue(peer, head); + } } static const struct nla_policy veth_policy[VETH_INFO_MAX + 1];
veth devices dont use the batched device unregisters yet. Since veth are a pair of devices, it makes sense to use a batch of two unregisters, this roughly divide dismantle time by two. Reported-by: Alex Bligh <alex@alex.org.uk> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Cc: Jesse Gross <jesse@nicira.com> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Ben Greear <greearb@candelatech.com> --- drivers/net/veth.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html