Skip to content

Commit

Permalink
drivers/net: Omit check for multicast bit in netdev_for_each_mc_addr
Browse files Browse the repository at this point in the history
There is no need to check for the address being a multicast address in
the netdev_for_each_mc_addr loop, so remove it. This patch covers all
remaining network drivers still containing such a check.

Cc: Joe Perches <joe@perches.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Tobias Klauser authored and David S. Miller committed Jul 8, 2011
1 parent 40f5d72 commit 498d8e2
Show file tree
Hide file tree
Showing 20 changed files with 35 additions and 141 deletions.
9 changes: 1 addition & 8 deletions drivers/net/7990.c
Original file line number Diff line number Diff line change
Expand Up @@ -594,7 +594,6 @@ static void lance_load_multicast (struct net_device *dev)
volatile struct lance_init_block *ib = lp->init_block;
volatile u16 *mcast_table = (u16 *)&ib->filter;
struct netdev_hw_addr *ha;
char *addrs;
u32 crc;

/* set all multicast bits */
Expand All @@ -609,13 +608,7 @@ static void lance_load_multicast (struct net_device *dev)

/* Add addresses */
netdev_for_each_mc_addr(ha, dev) {
addrs = ha->addr;

/* multicast address? */
if (!(*addrs & 1))
continue;

crc = ether_crc_le(6, addrs);
crc = ether_crc_le(6, ha->addr);
crc = crc >> 26;
mcast_table [crc >> 4] |= 1 << (crc & 0xf);
}
Expand Down
9 changes: 1 addition & 8 deletions drivers/net/a2065.c
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,6 @@ static void lance_load_multicast(struct net_device *dev)
volatile struct lance_init_block *ib = lp->init_block;
volatile u16 *mcast_table = (u16 *)&ib->filter;
struct netdev_hw_addr *ha;
char *addrs;
u32 crc;

/* set all multicast bits */
Expand All @@ -602,13 +601,7 @@ static void lance_load_multicast(struct net_device *dev)

/* Add addresses */
netdev_for_each_mc_addr(ha, dev) {
addrs = ha->addr;

/* multicast address? */
if (!(*addrs & 1))
continue;

crc = ether_crc_le(6, addrs);
crc = ether_crc_le(6, ha->addr);
crc = crc >> 26;
mcast_table[crc >> 4] |= 1 << (crc & 0xf);
}
Expand Down
8 changes: 1 addition & 7 deletions drivers/net/bmac.c
Original file line number Diff line number Diff line change
Expand Up @@ -1015,7 +1015,6 @@ static void bmac_set_multicast(struct net_device *dev)
static void bmac_set_multicast(struct net_device *dev)
{
struct netdev_hw_addr *ha;
char *addrs;
int i;
unsigned short rx_cfg;
u32 crc;
Expand All @@ -1039,12 +1038,7 @@ static void bmac_set_multicast(struct net_device *dev)
for(i = 0; i < 4; i++) hash_table[i] = 0;

netdev_for_each_mc_addr(ha, dev) {
addrs = ha->addr;

if(!(*addrs & 1))
continue;

crc = ether_crc_le(6, addrs);
crc = ether_crc_le(6, ha->addr);
crc >>= 26;
hash_table[crc >> 4] |= 1 << (crc & 0xf);
}
Expand Down
9 changes: 1 addition & 8 deletions drivers/net/declance.c
Original file line number Diff line number Diff line change
Expand Up @@ -946,7 +946,6 @@ static void lance_load_multicast(struct net_device *dev)
struct lance_private *lp = netdev_priv(dev);
volatile u16 *ib = (volatile u16 *)dev->mem_start;
struct netdev_hw_addr *ha;
char *addrs;
u32 crc;

/* set all multicast bits */
Expand All @@ -965,13 +964,7 @@ static void lance_load_multicast(struct net_device *dev)

/* Add addresses */
netdev_for_each_mc_addr(ha, dev) {
addrs = ha->addr;

/* multicast address? */
if (!(*addrs & 1))
continue;

crc = ether_crc_le(ETH_ALEN, addrs);
crc = ether_crc_le(ETH_ALEN, ha->addr);
crc = crc >> 26;
*lib_ptr(ib, filter[crc >> 4], lp->type) |= 1 << (crc & 0xf);
}
Expand Down
31 changes: 14 additions & 17 deletions drivers/net/ewrk3.c
Original file line number Diff line number Diff line change
Expand Up @@ -1169,7 +1169,7 @@ static void SetMulticastFilter(struct net_device *dev)
struct netdev_hw_addr *ha;
u_long iobase = dev->base_addr;
int i;
char *addrs, bit, byte;
char bit, byte;
short __iomem *p = lp->mctbl;
u16 hashcode;
u32 crc;
Expand Down Expand Up @@ -1211,25 +1211,22 @@ static void SetMulticastFilter(struct net_device *dev)

/* Update table */
netdev_for_each_mc_addr(ha, dev) {
addrs = ha->addr;
if ((*addrs & 0x01) == 1) { /* multicast address? */
crc = ether_crc_le(ETH_ALEN, addrs);
hashcode = crc & ((1 << 9) - 1); /* hashcode is 9 LSb of CRC */
crc = ether_crc_le(ETH_ALEN, ha->addr);
hashcode = crc & ((1 << 9) - 1); /* hashcode is 9 LSb of CRC */

byte = hashcode >> 3; /* bit[3-8] -> byte in filter */
bit = 1 << (hashcode & 0x07); /* bit[0-2] -> bit in byte */
byte = hashcode >> 3; /* bit[3-8] -> byte in filter */
bit = 1 << (hashcode & 0x07); /* bit[0-2] -> bit in byte */

if (lp->shmem_length == IO_ONLY) {
u_char tmp;
if (lp->shmem_length == IO_ONLY) {
u_char tmp;

outw(PAGE0_HTE + byte, EWRK3_PIR1);
tmp = inb(EWRK3_DATA);
tmp |= bit;
outw(PAGE0_HTE + byte, EWRK3_PIR1);
outb(tmp, EWRK3_DATA);
} else {
writeb(readb(lp->mctbl + byte) | bit, lp->mctbl + byte);
}
outw(PAGE0_HTE + byte, EWRK3_PIR1);
tmp = inb(EWRK3_DATA);
tmp |= bit;
outw(PAGE0_HTE + byte, EWRK3_PIR1);
outb(tmp, EWRK3_DATA);
} else {
writeb(readb(lp->mctbl + byte) | bit, lp->mctbl + byte);
}
}
}
Expand Down
4 changes: 0 additions & 4 deletions drivers/net/fec.c
Original file line number Diff line number Diff line change
Expand Up @@ -1227,10 +1227,6 @@ static void set_multicast_list(struct net_device *ndev)
writel(0, fep->hwp + FEC_GRP_HASH_TABLE_LOW);

netdev_for_each_mc_addr(ha, ndev) {
/* Only support group multicast for now */
if (!(ha->addr[0] & 1))
continue;

/* calculate crc32 value of mac address */
crc = 0xffffffff;

Expand Down
18 changes: 8 additions & 10 deletions drivers/net/hp100.c
Original file line number Diff line number Diff line change
Expand Up @@ -2103,20 +2103,18 @@ static void hp100_set_multicast_list(struct net_device *dev)
#endif
netdev_for_each_mc_addr(ha, dev) {
addrs = ha->addr;
if ((*addrs & 0x01) == 0x01) { /* multicast address? */
#ifdef HP100_DEBUG
printk("hp100: %s: multicast = %pM, ",
dev->name, addrs);
printk("hp100: %s: multicast = %pM, ",
dev->name, addrs);
#endif
for (i = idx = 0; i < 6; i++) {
idx ^= *addrs++ & 0x3f;
printk(":%02x:", idx);
}
for (i = idx = 0; i < 6; i++) {
idx ^= *addrs++ & 0x3f;
printk(":%02x:", idx);
}
#ifdef HP100_DEBUG
printk("idx = %i\n", idx);
printk("idx = %i\n", idx);
#endif
lp->hash_bytes[idx >> 3] |= (1 << (idx & 7));
}
lp->hash_bytes[idx >> 3] |= (1 << (idx & 7));
}
}
#else
Expand Down
7 changes: 1 addition & 6 deletions drivers/net/ioc3-eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -1664,12 +1664,7 @@ static void ioc3_set_multicast_list(struct net_device *dev)
ip->ehar_l = 0xffffffff;
} else {
netdev_for_each_mc_addr(ha, dev) {
char *addr = ha->addr;

if (!(*addr & 1))
continue;

ehar |= (1UL << ioc3_hash(addr));
ehar |= (1UL << ioc3_hash(ha->addr));
}
ip->ehar_h = ehar >> 32;
ip->ehar_l = ehar & 0xffffffff;
Expand Down
7 changes: 1 addition & 6 deletions drivers/net/korina.c
Original file line number Diff line number Diff line change
Expand Up @@ -504,12 +504,7 @@ static void korina_multicast_list(struct net_device *dev)
hash_table[i] = 0;

netdev_for_each_mc_addr(ha, dev) {
char *addrs = ha->addr;

if (!(*addrs & 1))
continue;

crc = ether_crc_le(6, addrs);
crc = ether_crc_le(6, ha->addr);
crc >>= 26;
hash_table[crc >> 4] |= 1 << (15 - (crc & 0xf));
}
Expand Down
2 changes: 0 additions & 2 deletions drivers/net/ks8851_mll.c
Original file line number Diff line number Diff line change
Expand Up @@ -1190,8 +1190,6 @@ static void ks_set_rx_mode(struct net_device *netdev)
int i = 0;

netdev_for_each_mc_addr(ha, netdev) {
if (!(*ha->addr & 1))
continue;
if (i >= MAX_MCAST_LST)
break;
memcpy(ks->mcast_lst[i++], ha->addr, ETH_ALEN);
Expand Down
2 changes: 0 additions & 2 deletions drivers/net/ksz884x.c
Original file line number Diff line number Diff line change
Expand Up @@ -5785,8 +5785,6 @@ static void netdev_set_rx_mode(struct net_device *dev)
}

netdev_for_each_mc_addr(ha, dev) {
if (!(*ha->addr & 1))
continue;
if (i >= MAX_MULTICAST_LIST)
break;
memcpy(hw->multi_list[i++], ha->addr, MAC_ADDR_LEN);
Expand Down
9 changes: 1 addition & 8 deletions drivers/net/pcnet32.c
Original file line number Diff line number Diff line change
Expand Up @@ -2570,7 +2570,6 @@ static void pcnet32_load_multicast(struct net_device *dev)
volatile __le16 *mcast_table = (__le16 *)ib->filter;
struct netdev_hw_addr *ha;
unsigned long ioaddr = dev->base_addr;
char *addrs;
int i;
u32 crc;

Expand All @@ -2590,13 +2589,7 @@ static void pcnet32_load_multicast(struct net_device *dev)

/* Add addresses */
netdev_for_each_mc_addr(ha, dev) {
addrs = ha->addr;

/* multicast address? */
if (!(*addrs & 1))
continue;

crc = ether_crc_le(6, addrs);
crc = ether_crc_le(6, ha->addr);
crc = crc >> 26;
mcast_table[crc >> 4] |= cpu_to_le16(1 << (crc & 0xf));
}
Expand Down
5 changes: 0 additions & 5 deletions drivers/net/smc911x.c
Original file line number Diff line number Diff line change
Expand Up @@ -1351,11 +1351,6 @@ static void smc911x_set_multicast_list(struct net_device *dev)
netdev_for_each_mc_addr(ha, dev) {
u32 position;

/* make sure this is a multicast address -
shouldn't this be a given if we have it here ? */
if (!(*ha->addr & 1))
continue;

/* upper 6 bits are used as hash index */
position = ether_crc(ETH_ALEN, ha->addr)>>26;

Expand Down
5 changes: 0 additions & 5 deletions drivers/net/smc9194.c
Original file line number Diff line number Diff line change
Expand Up @@ -447,11 +447,6 @@ static void smc_setmulticast(int ioaddr, struct net_device *dev)
netdev_for_each_mc_addr(ha, dev) {
int position;

/* make sure this is a multicast address - shouldn't this
be a given if we have it here ? */
if (!(*ha->addr & 1))
continue;

/* only use the low order bits */
position = ether_crc_le(6, ha->addr) & 0x3f;

Expand Down
5 changes: 0 additions & 5 deletions drivers/net/smc91x.c
Original file line number Diff line number Diff line change
Expand Up @@ -1425,11 +1425,6 @@ static void smc_set_multicast_list(struct net_device *dev)
netdev_for_each_mc_addr(ha, dev) {
int position;

/* make sure this is a multicast address -
shouldn't this be a given if we have it here ? */
if (!(*ha->addr & 1))
continue;

/* only use the low order bits */
position = crc32_le(~0, ha->addr, 6) & 0x3f;

Expand Down
8 changes: 1 addition & 7 deletions drivers/net/sunbmac.c
Original file line number Diff line number Diff line change
Expand Up @@ -998,7 +998,6 @@ static void bigmac_set_multicast(struct net_device *dev)
struct bigmac *bp = netdev_priv(dev);
void __iomem *bregs = bp->bregs;
struct netdev_hw_addr *ha;
char *addrs;
int i;
u32 tmp, crc;

Expand Down Expand Up @@ -1027,12 +1026,7 @@ static void bigmac_set_multicast(struct net_device *dev)
hash_table[i] = 0;

netdev_for_each_mc_addr(ha, dev) {
addrs = ha->addr;

if (!(*addrs & 1))
continue;

crc = ether_crc_le(6, addrs);
crc = ether_crc_le(6, ha->addr);
crc >>= 26;
hash_table[crc >> 4] |= 1 << (crc & 0xf);
}
Expand Down
7 changes: 1 addition & 6 deletions drivers/net/sungem.c
Original file line number Diff line number Diff line change
Expand Up @@ -1802,12 +1802,7 @@ static u32 gem_setup_multicast(struct gem *gp)

memset(hash_table, 0, sizeof(hash_table));
netdev_for_each_mc_addr(ha, gp->dev) {
char *addrs = ha->addr;

if (!(*addrs & 1))
continue;

crc = ether_crc_le(6, addrs);
crc = ether_crc_le(6, ha->addr);
crc >>= 24;
hash_table[crc >> 4] |= 1 << (15 - (crc & 0xf));
}
Expand Down
16 changes: 2 additions & 14 deletions drivers/net/sunhme.c
Original file line number Diff line number Diff line change
Expand Up @@ -1524,17 +1524,11 @@ static int happy_meal_init(struct happy_meal *hp)
} else if ((hp->dev->flags & IFF_PROMISC) == 0) {
u16 hash_table[4];
struct netdev_hw_addr *ha;
char *addrs;
u32 crc;

memset(hash_table, 0, sizeof(hash_table));
netdev_for_each_mc_addr(ha, hp->dev) {
addrs = ha->addr;

if (!(*addrs & 1))
continue;

crc = ether_crc_le(6, addrs);
crc = ether_crc_le(6, ha->addr);
crc >>= 26;
hash_table[crc >> 4] |= 1 << (crc & 0xf);
}
Expand Down Expand Up @@ -2361,7 +2355,6 @@ static void happy_meal_set_multicast(struct net_device *dev)
struct happy_meal *hp = netdev_priv(dev);
void __iomem *bregs = hp->bigmacregs;
struct netdev_hw_addr *ha;
char *addrs;
u32 crc;

spin_lock_irq(&hp->happy_lock);
Expand All @@ -2379,12 +2372,7 @@ static void happy_meal_set_multicast(struct net_device *dev)

memset(hash_table, 0, sizeof(hash_table));
netdev_for_each_mc_addr(ha, dev) {
addrs = ha->addr;

if (!(*addrs & 1))
continue;

crc = ether_crc_le(6, addrs);
crc = ether_crc_le(6, ha->addr);
crc >>= 26;
hash_table[crc >> 4] |= 1 << (crc & 0xf);
}
Expand Down
8 changes: 1 addition & 7 deletions drivers/net/sunlance.c
Original file line number Diff line number Diff line change
Expand Up @@ -1170,7 +1170,6 @@ static void lance_load_multicast(struct net_device *dev)
{
struct lance_private *lp = netdev_priv(dev);
struct netdev_hw_addr *ha;
char *addrs;
u32 crc;
u32 val;

Expand All @@ -1195,12 +1194,7 @@ static void lance_load_multicast(struct net_device *dev)

/* Add addresses */
netdev_for_each_mc_addr(ha, dev) {
addrs = ha->addr;

/* multicast address? */
if (!(*addrs & 1))
continue;
crc = ether_crc_le(6, addrs);
crc = ether_crc_le(6, ha->addr);
crc = crc >> 26;
if (lp->pio_buffer) {
struct lance_init_block __iomem *ib = lp->init_block_iomem;
Expand Down
Loading

0 comments on commit 498d8e2

Please sign in to comment.