|
@@ -2161,29 +2161,26 @@ static void e1000_set_rx_mode(struct net_device *netdev)
|
|
|
|
|
|
WARN_ON(i == rar_entries);
|
|
|
|
|
|
- mc_ptr = netdev->mc_list;
|
|
|
-
|
|
|
- for (; i < rar_entries; i++) {
|
|
|
- if (mc_ptr) {
|
|
|
- e1000_rar_set(hw, mc_ptr->da_addr, i);
|
|
|
- mc_ptr = mc_ptr->next;
|
|
|
- } else {
|
|
|
- E1000_WRITE_REG_ARRAY(hw, RA, i << 1, 0);
|
|
|
- E1000_WRITE_FLUSH();
|
|
|
- E1000_WRITE_REG_ARRAY(hw, RA, (i << 1) + 1, 0);
|
|
|
- E1000_WRITE_FLUSH();
|
|
|
+ netdev_for_each_mc_addr(mc_ptr, netdev) {
|
|
|
+ if (i == rar_entries) {
|
|
|
+ /* load any remaining addresses into the hash table */
|
|
|
+ u32 hash_reg, hash_bit, mta;
|
|
|
+ hash_value = e1000_hash_mc_addr(hw, mc_ptr->da_addr);
|
|
|
+ hash_reg = (hash_value >> 5) & 0x7F;
|
|
|
+ hash_bit = hash_value & 0x1F;
|
|
|
+ mta = (1 << hash_bit);
|
|
|
+ mcarray[hash_reg] |= mta;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ e1000_rar_set(hw, mc_ptr->da_addr, i++);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* load any remaining addresses into the hash table */
|
|
|
-
|
|
|
- for (; mc_ptr; mc_ptr = mc_ptr->next) {
|
|
|
- u32 hash_reg, hash_bit, mta;
|
|
|
- hash_value = e1000_hash_mc_addr(hw, mc_ptr->da_addr);
|
|
|
- hash_reg = (hash_value >> 5) & 0x7F;
|
|
|
- hash_bit = hash_value & 0x1F;
|
|
|
- mta = (1 << hash_bit);
|
|
|
- mcarray[hash_reg] |= mta;
|
|
|
+ for (; i < rar_entries; i++) {
|
|
|
+ E1000_WRITE_REG_ARRAY(hw, RA, i << 1, 0);
|
|
|
+ E1000_WRITE_FLUSH();
|
|
|
+ E1000_WRITE_REG_ARRAY(hw, RA, (i << 1) + 1, 0);
|
|
|
+ E1000_WRITE_FLUSH();
|
|
|
}
|
|
|
|
|
|
/* write the hash table completely, write from bottom to avoid
|