This driver is doing set_bit() on a u16*. drivers/net/yellowfin.c | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-) diff -puN drivers/net/yellowfin.c~yellowfin-set_bit-fix drivers/net/yellowfin.c --- 25/drivers/net/yellowfin.c~yellowfin-set_bit-fix 2003-03-02 21:40:05.000000000 -0800 +++ 25-akpm/drivers/net/yellowfin.c 2003-03-02 21:48:39.000000000 -0800 @@ -1349,6 +1349,11 @@ static struct net_device_stats *yellowfi /* Set or clear the multicast filter for this adaptor. */ +static void set_hash_bit(int bit, u16 *hash) +{ + hash[bit / 2] |= 1 << (bit & 15); +} + static void set_rx_mode(struct net_device *dev) { struct yellowfin_private *yp = dev->priv; @@ -1368,20 +1373,21 @@ static void set_rx_mode(struct net_devic struct dev_mc_list *mclist; u16 hash_table[4]; int i; + memset(hash_table, 0, sizeof(hash_table)); for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count; i++, mclist = mclist->next) { /* Due to a bug in the early chip versions, multiple filter slots must be set for each address. */ if (yp->drv_flags & HasMulticastBug) { - set_bit((ether_crc_le(3, mclist->dmi_addr) >> 3) & 0x3f, + set_hash_bit((ether_crc_le(3, mclist->dmi_addr) >> 3) & 0x3f, hash_table); - set_bit((ether_crc_le(4, mclist->dmi_addr) >> 3) & 0x3f, + set_hash_bit((ether_crc_le(4, mclist->dmi_addr) >> 3) & 0x3f, hash_table); - set_bit((ether_crc_le(5, mclist->dmi_addr) >> 3) & 0x3f, + set_hash_bit((ether_crc_le(5, mclist->dmi_addr) >> 3) & 0x3f, hash_table); } - set_bit((ether_crc_le(6, mclist->dmi_addr) >> 3) & 0x3f, + set_hash_bit((ether_crc_le(6, mclist->dmi_addr) >> 3) & 0x3f, hash_table); } /* Copy the hash table to the chip. */ _