aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/smc911x.c4
-rw-r--r--drivers/net/smc9194.c10
-rw-r--r--drivers/net/smc91x.c7
-rw-r--r--drivers/net/starfire.c3
-rw-r--r--drivers/net/tc35815.c8
-rw-r--r--drivers/net/tehuti.c4
-rw-r--r--drivers/net/tg3.c5
-rw-r--r--drivers/net/tlan.c7
-rw-r--r--drivers/net/tsi108_eth.c20
-rw-r--r--drivers/net/typhoon.c5
-rw-r--r--drivers/net/ucc_geth.c7
-rw-r--r--drivers/net/via-rhine.c6
-rw-r--r--drivers/net/via-velocity.c6
-rw-r--r--drivers/net/virtio_net.c5
-rw-r--r--drivers/net/vmxnet3/vmxnet3_drv.c11
-rw-r--r--drivers/net/vxge/vxge-main.c4
-rw-r--r--drivers/net/yellowfin.c4
-rw-r--r--drivers/net/znet.c3
18 files changed, 42 insertions, 77 deletions
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
index ef9674c6713f..9871a2b61f86 100644
--- a/drivers/net/smc911x.c
+++ b/drivers/net/smc911x.c
@@ -1341,7 +1341,6 @@ static void smc911x_set_multicast_list(struct net_device *dev)
1341 * within that register. 1341 * within that register.
1342 */ 1342 */
1343 else if (!netdev_mc_empty(dev)) { 1343 else if (!netdev_mc_empty(dev)) {
1344 int i;
1345 struct dev_mc_list *cur_addr; 1344 struct dev_mc_list *cur_addr;
1346 1345
1347 /* Set the Hash perfec mode */ 1346 /* Set the Hash perfec mode */
@@ -1350,8 +1349,7 @@ static void smc911x_set_multicast_list(struct net_device *dev)
1350 /* start with a table of all zeros: reject all */ 1349 /* start with a table of all zeros: reject all */
1351 memset(multicast_table, 0, sizeof(multicast_table)); 1350 memset(multicast_table, 0, sizeof(multicast_table));
1352 1351
1353 cur_addr = dev->mc_list; 1352 netdev_for_each_mc_addr(cur_addr, dev) {
1354 for (i = 0; i < netdev_mc_count(dev); i++, cur_addr = cur_addr->next) {
1355 u32 position; 1353 u32 position;
1356 1354
1357 /* do we have a pointer here? */ 1355 /* do we have a pointer here? */
diff --git a/drivers/net/smc9194.c b/drivers/net/smc9194.c
index 41c3dddeab50..f9a960e7fc1f 100644
--- a/drivers/net/smc9194.c
+++ b/drivers/net/smc9194.c
@@ -434,18 +434,18 @@ static void smc_shutdown( int ioaddr )
434*/ 434*/
435 435
436 436
437static void smc_setmulticast( int ioaddr, int count, struct dev_mc_list * addrs ) { 437static void smc_setmulticast(int ioaddr, struct net_device *dev)
438{
438 int i; 439 int i;
439 unsigned char multicast_table[ 8 ]; 440 unsigned char multicast_table[ 8 ];
440 struct dev_mc_list * cur_addr; 441 struct dev_mc_list *cur_addr;
441 /* table for flipping the order of 3 bits */ 442 /* table for flipping the order of 3 bits */
442 unsigned char invert3[] = { 0, 4, 2, 6, 1, 5, 3, 7 }; 443 unsigned char invert3[] = { 0, 4, 2, 6, 1, 5, 3, 7 };
443 444
444 /* start with a table of all zeros: reject all */ 445 /* start with a table of all zeros: reject all */
445 memset( multicast_table, 0, sizeof( multicast_table ) ); 446 memset( multicast_table, 0, sizeof( multicast_table ) );
446 447
447 cur_addr = addrs; 448 netdev_for_each_mc_addr(cur_addr, dev) {
448 for ( i = 0; i < count ; i ++, cur_addr = cur_addr->next ) {
449 int position; 449 int position;
450 450
451 /* do we have a pointer here? */ 451 /* do we have a pointer here? */
@@ -1550,7 +1550,7 @@ static void smc_set_multicast_list(struct net_device *dev)
1550 ioaddr + RCR ); 1550 ioaddr + RCR );
1551 /* NOTE: this has to set the bank, so make sure it is the 1551 /* NOTE: this has to set the bank, so make sure it is the
1552 last thing called. The bank is set to zero at the top */ 1552 last thing called. The bank is set to zero at the top */
1553 smc_setmulticast(ioaddr, netdev_mc_count(dev), dev->mc_list); 1553 smc_setmulticast(ioaddr, dev);
1554 } 1554 }
1555 else { 1555 else {
1556 outw( inw( ioaddr + RCR ) & ~(RCR_PROMISC | RCR_ALMUL), 1556 outw( inw( ioaddr + RCR ) & ~(RCR_PROMISC | RCR_ALMUL),
diff --git a/drivers/net/smc91x.c b/drivers/net/smc91x.c
index 66450127c5a1..fc1b5a1a3583 100644
--- a/drivers/net/smc91x.c
+++ b/drivers/net/smc91x.c
@@ -1413,7 +1413,6 @@ static void smc_set_multicast_list(struct net_device *dev)
1413 * within that register. 1413 * within that register.
1414 */ 1414 */
1415 else if (!netdev_mc_empty(dev)) { 1415 else if (!netdev_mc_empty(dev)) {
1416 int i;
1417 struct dev_mc_list *cur_addr; 1416 struct dev_mc_list *cur_addr;
1418 1417
1419 /* table for flipping the order of 3 bits */ 1418 /* table for flipping the order of 3 bits */
@@ -1422,13 +1421,9 @@ static void smc_set_multicast_list(struct net_device *dev)
1422 /* start with a table of all zeros: reject all */ 1421 /* start with a table of all zeros: reject all */
1423 memset(multicast_table, 0, sizeof(multicast_table)); 1422 memset(multicast_table, 0, sizeof(multicast_table));
1424 1423
1425 cur_addr = dev->mc_list; 1424 netdev_for_each_mc_addr(cur_addr, dev) {
1426 for (i = 0; i < netdev_mc_count(dev); i++, cur_addr = cur_addr->next) {
1427 int position; 1425 int position;
1428 1426
1429 /* do we have a pointer here? */
1430 if (!cur_addr)
1431 break;
1432 /* make sure this is a multicast address - 1427 /* make sure this is a multicast address -
1433 shouldn't this be a given if we have it here ? */ 1428 shouldn't this be a given if we have it here ? */
1434 if (!(*cur_addr->dmi_addr & 1)) 1429 if (!(*cur_addr->dmi_addr & 1))
diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c
index 0f405ef51858..6dfa69899019 100644
--- a/drivers/net/starfire.c
+++ b/drivers/net/starfire.c
@@ -1825,8 +1825,7 @@ static void set_rx_mode(struct net_device *dev)
1825 __le16 mc_filter[32] __attribute__ ((aligned(sizeof(long)))); /* Multicast hash filter */ 1825 __le16 mc_filter[32] __attribute__ ((aligned(sizeof(long)))); /* Multicast hash filter */
1826 1826
1827 memset(mc_filter, 0, sizeof(mc_filter)); 1827 memset(mc_filter, 0, sizeof(mc_filter));
1828 for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev); 1828 netdev_for_each_mc_addr(mclist, dev) {
1829 i++, mclist = mclist->next) {
1830 /* The chip uses the upper 9 CRC bits 1829 /* The chip uses the upper 9 CRC bits
1831 as index into the hash table */ 1830 as index into the hash table */
1832 int bit_nr = ether_crc_le(ETH_ALEN, mclist->dmi_addr) >> 23; 1831 int bit_nr = ether_crc_le(ETH_ALEN, mclist->dmi_addr) >> 23;
diff --git a/drivers/net/tc35815.c b/drivers/net/tc35815.c
index a2c635ecdab8..876f45afbed4 100644
--- a/drivers/net/tc35815.c
+++ b/drivers/net/tc35815.c
@@ -1945,18 +1945,18 @@ tc35815_set_multicast_list(struct net_device *dev)
1945 /* Disable promiscuous mode, use normal mode. */ 1945 /* Disable promiscuous mode, use normal mode. */
1946 tc_writel(CAM_CompEn | CAM_BroadAcc | CAM_GroupAcc, &tr->CAM_Ctl); 1946 tc_writel(CAM_CompEn | CAM_BroadAcc | CAM_GroupAcc, &tr->CAM_Ctl);
1947 } else if (!netdev_mc_empty(dev)) { 1947 } else if (!netdev_mc_empty(dev)) {
1948 struct dev_mc_list *cur_addr = dev->mc_list; 1948 struct dev_mc_list *cur_addr;
1949 int i; 1949 int i;
1950 int ena_bits = CAM_Ena_Bit(CAM_ENTRY_SOURCE); 1950 int ena_bits = CAM_Ena_Bit(CAM_ENTRY_SOURCE);
1951 1951
1952 tc_writel(0, &tr->CAM_Ctl); 1952 tc_writel(0, &tr->CAM_Ctl);
1953 /* Walk the address list, and load the filter */ 1953 /* Walk the address list, and load the filter */
1954 for (i = 0; i < netdev_mc_count(dev); i++, cur_addr = cur_addr->next) { 1954 i = 0;
1955 if (!cur_addr) 1955 netdev_for_each_mc_addr(cur_addr, dev) {
1956 break;
1957 /* entry 0,1 is reserved. */ 1956 /* entry 0,1 is reserved. */
1958 tc35815_set_cam_entry(dev, i + 2, cur_addr->dmi_addr); 1957 tc35815_set_cam_entry(dev, i + 2, cur_addr->dmi_addr);
1959 ena_bits |= CAM_Ena_Bit(i + 2); 1958 ena_bits |= CAM_Ena_Bit(i + 2);
1959 i++;
1960 } 1960 }
1961 tc_writel(ena_bits, &tr->CAM_Ena); 1961 tc_writel(ena_bits, &tr->CAM_Ena);
1962 tc_writel(CAM_CompEn | CAM_BroadAcc, &tr->CAM_Ctl); 1962 tc_writel(CAM_CompEn | CAM_BroadAcc, &tr->CAM_Ctl);
diff --git a/drivers/net/tehuti.c b/drivers/net/tehuti.c
index 2517cc00ac2a..0c9780217c87 100644
--- a/drivers/net/tehuti.c
+++ b/drivers/net/tehuti.c
@@ -824,10 +824,8 @@ static void bdx_setmulti(struct net_device *ndev)
824 /* TBD: sort addreses and write them in ascending order 824 /* TBD: sort addreses and write them in ascending order
825 * into RX_MAC_MCST regs. we skip this phase now and accept ALL 825 * into RX_MAC_MCST regs. we skip this phase now and accept ALL
826 * multicast frames throu IMF */ 826 * multicast frames throu IMF */
827 mclist = ndev->mc_list;
828
829 /* accept the rest of addresses throu IMF */ 827 /* accept the rest of addresses throu IMF */
830 for (; mclist; mclist = mclist->next) { 828 netdev_for_each_mc_addr(mclist, ndev) {
831 hash = 0; 829 hash = 0;
832 for (i = 0; i < ETH_ALEN; i++) 830 for (i = 0; i < ETH_ALEN; i++)
833 hash ^= mclist->dmi_addr[i]; 831 hash ^= mclist->dmi_addr[i];
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index f204f73c4f99..0d06e4007f44 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -9458,15 +9458,12 @@ static void __tg3_set_rx_mode(struct net_device *dev)
9458 } else { 9458 } else {
9459 /* Accept one or more multicast(s). */ 9459 /* Accept one or more multicast(s). */
9460 struct dev_mc_list *mclist; 9460 struct dev_mc_list *mclist;
9461 unsigned int i;
9462 u32 mc_filter[4] = { 0, }; 9461 u32 mc_filter[4] = { 0, };
9463 u32 regidx; 9462 u32 regidx;
9464 u32 bit; 9463 u32 bit;
9465 u32 crc; 9464 u32 crc;
9466 9465
9467 for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev); 9466 netdev_for_each_mc_addr(mclist, dev) {
9468 i++, mclist = mclist->next) {
9469
9470 crc = calc_crc (mclist->dmi_addr, ETH_ALEN); 9467 crc = calc_crc (mclist->dmi_addr, ETH_ALEN);
9471 bit = ~crc & 0x7f; 9468 bit = ~crc & 0x7f;
9472 regidx = (bit & 0x60) >> 5; 9469 regidx = (bit & 0x60) >> 5;
diff --git a/drivers/net/tlan.c b/drivers/net/tlan.c
index e44d5a074c69..390540c101c7 100644
--- a/drivers/net/tlan.c
+++ b/drivers/net/tlan.c
@@ -1314,7 +1314,7 @@ static struct net_device_stats *TLan_GetStats( struct net_device *dev )
1314 1314
1315static void TLan_SetMulticastList( struct net_device *dev ) 1315static void TLan_SetMulticastList( struct net_device *dev )
1316{ 1316{
1317 struct dev_mc_list *dmi = dev->mc_list; 1317 struct dev_mc_list *dmi;
1318 u32 hash1 = 0; 1318 u32 hash1 = 0;
1319 u32 hash2 = 0; 1319 u32 hash2 = 0;
1320 int i; 1320 int i;
@@ -1335,7 +1335,8 @@ static void TLan_SetMulticastList( struct net_device *dev )
1335 TLan_DioWrite32( dev->base_addr, TLAN_HASH_1, 0xFFFFFFFF ); 1335 TLan_DioWrite32( dev->base_addr, TLAN_HASH_1, 0xFFFFFFFF );
1336 TLan_DioWrite32( dev->base_addr, TLAN_HASH_2, 0xFFFFFFFF ); 1336 TLan_DioWrite32( dev->base_addr, TLAN_HASH_2, 0xFFFFFFFF );
1337 } else { 1337 } else {
1338 for ( i = 0; i < netdev_mc_count(dev); i++ ) { 1338 i = 0;
1339 netdev_for_each_mc_addr(dmi, dev) {
1339 if ( i < 3 ) { 1340 if ( i < 3 ) {
1340 TLan_SetMac( dev, i + 1, 1341 TLan_SetMac( dev, i + 1,
1341 (char *) &dmi->dmi_addr ); 1342 (char *) &dmi->dmi_addr );
@@ -1346,7 +1347,7 @@ static void TLan_SetMulticastList( struct net_device *dev )
1346 else 1347 else
1347 hash2 |= ( 1 << ( offset - 32 ) ); 1348 hash2 |= ( 1 << ( offset - 32 ) );
1348 } 1349 }
1349 dmi = dmi->next; 1350 i++;
1350 } 1351 }
1351 for ( ; i < 3; i++ ) 1352 for ( ; i < 3; i++ )
1352 TLan_SetMac( dev, i + 1, NULL ); 1353 TLan_SetMac( dev, i + 1, NULL );
diff --git a/drivers/net/tsi108_eth.c b/drivers/net/tsi108_eth.c
index f4b30c4826fb..647cdd1d4e20 100644
--- a/drivers/net/tsi108_eth.c
+++ b/drivers/net/tsi108_eth.c
@@ -1186,27 +1186,17 @@ static void tsi108_set_rx_mode(struct net_device *dev)
1186 1186
1187 if (dev->flags & IFF_ALLMULTI || !netdev_mc_empty(dev)) { 1187 if (dev->flags & IFF_ALLMULTI || !netdev_mc_empty(dev)) {
1188 int i; 1188 int i;
1189 struct dev_mc_list *mc = dev->mc_list; 1189 struct dev_mc_list *mc;
1190 rxcfg |= TSI108_EC_RXCFG_MFE | TSI108_EC_RXCFG_MC_HASH; 1190 rxcfg |= TSI108_EC_RXCFG_MFE | TSI108_EC_RXCFG_MC_HASH;
1191 1191
1192 memset(data->mc_hash, 0, sizeof(data->mc_hash)); 1192 memset(data->mc_hash, 0, sizeof(data->mc_hash));
1193 1193
1194 while (mc) { 1194 netdev_for_each_mc_addr(mc, dev) {
1195 u32 hash, crc; 1195 u32 hash, crc;
1196 1196
1197 if (mc->dmi_addrlen == 6) { 1197 crc = ether_crc(6, mc->dmi_addr);
1198 crc = ether_crc(6, mc->dmi_addr); 1198 hash = crc >> 23;
1199 hash = crc >> 23; 1199 __set_bit(hash, &data->mc_hash[0]);
1200
1201 __set_bit(hash, &data->mc_hash[0]);
1202 } else {
1203 printk(KERN_ERR
1204 "%s: got multicast address of length %d instead of 6.\n",
1205 dev->name,
1206 mc->dmi_addrlen);
1207 }
1208
1209 mc = mc->next;
1210 } 1200 }
1211 1201
1212 TSI_WRITE(TSI108_EC_HASHADDR, 1202 TSI_WRITE(TSI108_EC_HASHADDR,
diff --git a/drivers/net/typhoon.c b/drivers/net/typhoon.c
index 38c216132ef5..e3ddcb8f29df 100644
--- a/drivers/net/typhoon.c
+++ b/drivers/net/typhoon.c
@@ -922,12 +922,9 @@ typhoon_set_rx_mode(struct net_device *dev)
922 filter |= TYPHOON_RX_FILTER_ALL_MCAST; 922 filter |= TYPHOON_RX_FILTER_ALL_MCAST;
923 } else if (!netdev_mc_empty(dev)) { 923 } else if (!netdev_mc_empty(dev)) {
924 struct dev_mc_list *mclist; 924 struct dev_mc_list *mclist;
925 int i;
926 925
927 memset(mc_filter, 0, sizeof(mc_filter)); 926 memset(mc_filter, 0, sizeof(mc_filter));
928 for (i = 0, mclist = dev->mc_list; 927 netdev_for_each_mc_addr(mclist, dev) {
929 mclist && i < netdev_mc_count(dev);
930 i++, mclist = mclist->next) {
931 int bit = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3f; 928 int bit = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3f;
932 mc_filter[bit >> 5] |= 1 << (bit & 0x1f); 929 mc_filter[bit >> 5] |= 1 << (bit & 0x1f);
933 } 930 }
diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c
index a05720289c7e..23a97518bc1f 100644
--- a/drivers/net/ucc_geth.c
+++ b/drivers/net/ucc_geth.c
@@ -2002,7 +2002,6 @@ static void ucc_geth_set_multi(struct net_device *dev)
2002 struct dev_mc_list *dmi; 2002 struct dev_mc_list *dmi;
2003 struct ucc_fast __iomem *uf_regs; 2003 struct ucc_fast __iomem *uf_regs;
2004 struct ucc_geth_82xx_address_filtering_pram __iomem *p_82xx_addr_filt; 2004 struct ucc_geth_82xx_address_filtering_pram __iomem *p_82xx_addr_filt;
2005 int i;
2006 2005
2007 ugeth = netdev_priv(dev); 2006 ugeth = netdev_priv(dev);
2008 2007
@@ -2029,11 +2028,7 @@ static void ucc_geth_set_multi(struct net_device *dev)
2029 out_be32(&p_82xx_addr_filt->gaddr_h, 0x0); 2028 out_be32(&p_82xx_addr_filt->gaddr_h, 0x0);
2030 out_be32(&p_82xx_addr_filt->gaddr_l, 0x0); 2029 out_be32(&p_82xx_addr_filt->gaddr_l, 0x0);
2031 2030
2032 dmi = dev->mc_list; 2031 netdev_for_each_mc_addr(dmi, dev) {
2033
2034 for (i = 0; i < netdev_mc_count(dev);
2035 i++, dmi = dmi->next) {
2036
2037 /* Only support group multicast for now. 2032 /* Only support group multicast for now.
2038 */ 2033 */
2039 if (!(dmi->dmi_addr[0] & 1)) 2034 if (!(dmi->dmi_addr[0] & 1))
diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c
index 85df7ac636b5..50f881aa3939 100644
--- a/drivers/net/via-rhine.c
+++ b/drivers/net/via-rhine.c
@@ -1705,11 +1705,9 @@ static void rhine_set_rx_mode(struct net_device *dev)
1705 rx_mode = 0x0C; 1705 rx_mode = 0x0C;
1706 } else { 1706 } else {
1707 struct dev_mc_list *mclist; 1707 struct dev_mc_list *mclist;
1708 int i; 1708
1709 memset(mc_filter, 0, sizeof(mc_filter)); 1709 memset(mc_filter, 0, sizeof(mc_filter));
1710 for (i = 0, mclist = dev->mc_list; 1710 netdev_for_each_mc_addr(mclist, dev) {
1711 mclist && i < netdev_mc_count(dev);
1712 i++, mclist = mclist->next) {
1713 int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26; 1711 int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
1714 1712
1715 mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31); 1713 mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c
index 4e47f2683b83..3a486f3bad3d 100644
--- a/drivers/net/via-velocity.c
+++ b/drivers/net/via-velocity.c
@@ -1141,11 +1141,11 @@ static void velocity_set_multi(struct net_device *dev)
1141 int offset = MCAM_SIZE - vptr->multicast_limit; 1141 int offset = MCAM_SIZE - vptr->multicast_limit;
1142 mac_get_cam_mask(regs, vptr->mCAMmask); 1142 mac_get_cam_mask(regs, vptr->mCAMmask);
1143 1143
1144 for (i = 0, mclist = dev->mc_list; 1144 i = 0;
1145 mclist && i < netdev_mc_count(dev); 1145 netdev_for_each_mc_addr(mclist, dev) {
1146 i++, mclist = mclist->next) {
1147 mac_set_cam(regs, i + offset, mclist->dmi_addr); 1146 mac_set_cam(regs, i + offset, mclist->dmi_addr);
1148 vptr->mCAMmask[(offset + i) / 8] |= 1 << ((offset + i) & 7); 1147 vptr->mCAMmask[(offset + i) / 8] |= 1 << ((offset + i) & 7);
1148 i++;
1149 } 1149 }
1150 1150
1151 mac_set_cam_mask(regs, vptr->mCAMmask); 1151 mac_set_cam_mask(regs, vptr->mCAMmask);
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index ce35b42cc2cb..e6095f3aa05f 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -776,8 +776,9 @@ static void virtnet_set_rx_mode(struct net_device *dev)
776 776
777 mac_data->entries = mc_count; 777 mac_data->entries = mc_count;
778 addr = dev->mc_list; 778 addr = dev->mc_list;
779 for (i = 0; i < mc_count; i++, addr = addr->next) 779 i = 0;
780 memcpy(&mac_data->macs[i][0], addr->da_addr, ETH_ALEN); 780 netdev_for_each_mc_addr(addr, dev)
781 memcpy(&mac_data->macs[i++][0], addr->da_addr, ETH_ALEN);
781 782
782 sg_set_buf(&sg[1], mac_data, 783 sg_set_buf(&sg[1], mac_data,
783 sizeof(mac_data->entries) + (mc_count * ETH_ALEN)); 784 sizeof(mac_data->entries) + (mc_count * ETH_ALEN));
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index ee1b397417f3..cff3485d9673 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -1675,15 +1675,12 @@ vmxnet3_copy_mc(struct net_device *netdev)
1675 /* We may be called with BH disabled */ 1675 /* We may be called with BH disabled */
1676 buf = kmalloc(sz, GFP_ATOMIC); 1676 buf = kmalloc(sz, GFP_ATOMIC);
1677 if (buf) { 1677 if (buf) {
1678 int i; 1678 struct dev_mc_list *mc;
1679 struct dev_mc_list *mc = netdev->mc_list; 1679 int i = 0;
1680 1680
1681 for (i = 0; i < netdev_mc_count(netdev); i++) { 1681 netdev_for_each_mc_addr(mc, netdev)
1682 BUG_ON(!mc); 1682 memcpy(buf + i++ * ETH_ALEN, mc->dmi_addr,
1683 memcpy(buf + i * ETH_ALEN, mc->dmi_addr,
1684 ETH_ALEN); 1683 ETH_ALEN);
1685 mc = mc->next;
1686 }
1687 } 1684 }
1688 } 1685 }
1689 return buf; 1686 return buf;
diff --git a/drivers/net/vxge/vxge-main.c b/drivers/net/vxge/vxge-main.c
index c248b01218a1..46a7c9e689ec 100644
--- a/drivers/net/vxge/vxge-main.c
+++ b/drivers/net/vxge/vxge-main.c
@@ -1217,9 +1217,7 @@ static void vxge_set_multicast(struct net_device *dev)
1217 } 1217 }
1218 1218
1219 /* Add new ones */ 1219 /* Add new ones */
1220 for (i = 0, mclist = dev->mc_list; i < netdev_mc_count(dev); 1220 netdev_for_each_mc_addr(mclist, dev) {
1221 i++, mclist = mclist->next) {
1222
1223 memcpy(mac_info.macaddr, mclist->dmi_addr, ETH_ALEN); 1221 memcpy(mac_info.macaddr, mclist->dmi_addr, ETH_ALEN);
1224 for (vpath_idx = 0; vpath_idx < vdev->no_of_vpath; 1222 for (vpath_idx = 0; vpath_idx < vdev->no_of_vpath;
1225 vpath_idx++) { 1223 vpath_idx++) {
diff --git a/drivers/net/yellowfin.c b/drivers/net/yellowfin.c
index e4aab4d5b553..7d4107f5eeb0 100644
--- a/drivers/net/yellowfin.c
+++ b/drivers/net/yellowfin.c
@@ -1303,9 +1303,9 @@ static void set_rx_mode(struct net_device *dev)
1303 struct dev_mc_list *mclist; 1303 struct dev_mc_list *mclist;
1304 u16 hash_table[4]; 1304 u16 hash_table[4];
1305 int i; 1305 int i;
1306
1306 memset(hash_table, 0, sizeof(hash_table)); 1307 memset(hash_table, 0, sizeof(hash_table));
1307 for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev); 1308 netdev_for_each_mc_addr(mclist, dev) {
1308 i++, mclist = mclist->next) {
1309 unsigned int bit; 1309 unsigned int bit;
1310 1310
1311 /* Due to a bug in the early chip versions, multiple filter 1311 /* Due to a bug in the early chip versions, multiple filter
diff --git a/drivers/net/znet.c b/drivers/net/znet.c
index bc5ae0f6e934..def49d2ec69a 100644
--- a/drivers/net/znet.c
+++ b/drivers/net/znet.c
@@ -313,7 +313,8 @@ static void znet_set_multicast_list (struct net_device *dev)
313 /* Byte D */ 313 /* Byte D */
314 cfblk->dummy_1 = 1; /* set to 1 */ 314 cfblk->dummy_1 = 1; /* set to 1 */
315 cfblk->tx_ifs_retrig = 3; /* Hmm... Disabled */ 315 cfblk->tx_ifs_retrig = 3; /* Hmm... Disabled */
316 cfblk->mc_all = (dev->mc_list || (dev->flags&IFF_ALLMULTI));/* multicast all mode */ 316 cfblk->mc_all = (!netdev_mc_empty(dev) ||
317 (dev->flags & IFF_ALLMULTI)); /* multicast all mode */
317 cfblk->rcv_mon = 0; /* Monitor mode disabled */ 318 cfblk->rcv_mon = 0; /* Monitor mode disabled */
318 cfblk->frag_acpt = 0; /* Do not accept fragments */ 319 cfblk->frag_acpt = 0; /* Do not accept fragments */
319 cfblk->tstrttrs = 0; /* No start transmission threshold */ 320 cfblk->tstrttrs = 0; /* No start transmission threshold */