X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fcore%2Fdev_mcast.c;fp=net%2Fcore%2Fdev_mcast.c;h=05d60850840e07a0d0beba51baf2b53fb622a883;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=eb674ea7d730ac9d7f25dd2d670f1f6b3e375bde;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/net/core/dev_mcast.c b/net/core/dev_mcast.c index eb674ea7d..05d608508 100644 --- a/net/core/dev_mcast.c +++ b/net/core/dev_mcast.c @@ -21,6 +21,7 @@ * 2 of the License, or (at your option) any later version. */ +#include #include #include #include @@ -61,7 +62,7 @@ * Device mc lists are changed by bh at least if IPv6 is enabled, * so that it must be bh protected. * - * We block accesses to device mc filters with netif_tx_lock. + * We block accesses to device mc filters with dev->xmit_lock. */ /* @@ -92,9 +93,9 @@ static void __dev_mc_upload(struct net_device *dev) void dev_mc_upload(struct net_device *dev) { - netif_tx_lock_bh(dev); + spin_lock_bh(&dev->xmit_lock); __dev_mc_upload(dev); - netif_tx_unlock_bh(dev); + spin_unlock_bh(&dev->xmit_lock); } /* @@ -106,7 +107,7 @@ int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl) int err = 0; struct dev_mc_list *dmi, **dmip; - netif_tx_lock_bh(dev); + spin_lock_bh(&dev->xmit_lock); for (dmip = &dev->mc_list; (dmi = *dmip) != NULL; dmip = &dmi->next) { /* @@ -138,13 +139,13 @@ int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl) */ __dev_mc_upload(dev); - netif_tx_unlock_bh(dev); + spin_unlock_bh(&dev->xmit_lock); return 0; } } err = -ENOENT; done: - netif_tx_unlock_bh(dev); + spin_unlock_bh(&dev->xmit_lock); return err; } @@ -159,7 +160,7 @@ int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl) dmi1 = kmalloc(sizeof(*dmi), GFP_ATOMIC); - netif_tx_lock_bh(dev); + spin_lock_bh(&dev->xmit_lock); for (dmi = dev->mc_list; dmi != NULL; dmi = dmi->next) { if (memcmp(dmi->dmi_addr, addr, dmi->dmi_addrlen) == 0 && dmi->dmi_addrlen == alen) { @@ -175,7 +176,7 @@ int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl) } if ((dmi = dmi1) == NULL) { - netif_tx_unlock_bh(dev); + spin_unlock_bh(&dev->xmit_lock); return -ENOMEM; } memcpy(dmi->dmi_addr, addr, alen); @@ -188,11 +189,11 @@ int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl) __dev_mc_upload(dev); - netif_tx_unlock_bh(dev); + spin_unlock_bh(&dev->xmit_lock); return 0; done: - netif_tx_unlock_bh(dev); + spin_unlock_bh(&dev->xmit_lock); kfree(dmi1); return err; } @@ -203,7 +204,7 @@ done: void dev_mc_discard(struct net_device *dev) { - netif_tx_lock_bh(dev); + spin_lock_bh(&dev->xmit_lock); while (dev->mc_list != NULL) { struct dev_mc_list *tmp = dev->mc_list; @@ -214,7 +215,7 @@ void dev_mc_discard(struct net_device *dev) } dev->mc_count = 0; - netif_tx_unlock_bh(dev); + spin_unlock_bh(&dev->xmit_lock); } #ifdef CONFIG_PROC_FS @@ -249,7 +250,7 @@ static int dev_mc_seq_show(struct seq_file *seq, void *v) struct dev_mc_list *m; struct net_device *dev = v; - netif_tx_lock_bh(dev); + spin_lock_bh(&dev->xmit_lock); for (m = dev->mc_list; m; m = m->next) { int i; @@ -261,7 +262,7 @@ static int dev_mc_seq_show(struct seq_file *seq, void *v) seq_putc(seq, '\n'); } - netif_tx_unlock_bh(dev); + spin_unlock_bh(&dev->xmit_lock); return 0; }