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. */

_