ixgbe: Fix Receive Address Register (RAR) cleaning and accounting
authorShannon Nelson <shannon.nelson@intel.com>
Tue, 24 Nov 2009 18:52:10 +0000 (18:52 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 29 Nov 2009 08:34:00 +0000 (00:34 -0800)
This fixes an issue when clearing out the RAR entries.  If RAR[0]
is the only address in use, don't clear the others.

Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ixgbe/ixgbe_common.c

index 79533e2720f9685c5ac9e39ac56b5fedd0f89227..688b8ca5da322ab782857e77f5c5b4fcd53c759b 100644 (file)
@@ -1382,10 +1382,10 @@ s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw,
        hw->addr_ctrl.overflow_promisc = 0;
 
        /* Zero out the other receive addresses */
-       hw_dbg(hw, "Clearing RAR[1-%d]\n", uc_addr_in_use);
-       for (i = 1; i <= uc_addr_in_use; i++) {
-               IXGBE_WRITE_REG(hw, IXGBE_RAL(i), 0);
-               IXGBE_WRITE_REG(hw, IXGBE_RAH(i), 0);
+       hw_dbg(hw, "Clearing RAR[1-%d]\n", uc_addr_in_use + 1);
+       for (i = 0; i < uc_addr_in_use; i++) {
+               IXGBE_WRITE_REG(hw, IXGBE_RAL(1+i), 0);
+               IXGBE_WRITE_REG(hw, IXGBE_RAH(1+i), 0);
        }
 
        /* Add the new addresses */