ixgbevf: Do not rewind the Rx ring before bumping tail
authorAlexander Duyck <alexander.h.duyck@intel.com>
Fri, 11 May 2012 08:33:11 +0000 (08:33 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Wed, 18 Jul 2012 20:12:08 +0000 (13:12 -0700)
The driver is going back one step from its' previous location before
bumping tail. This is incorrect.  We should just be writing the value of
next_to_use into the tail register.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Tested-by: Sibai Li <sibai.li@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c

index b88218c7f60f723b9f235479bfbd55cecee7d315..c27ce447e04e15cb4dddd85c01c2ccee1556e90c 100644 (file)
@@ -375,8 +375,6 @@ static void ixgbevf_alloc_rx_buffers(struct ixgbevf_adapter *adapter,
 no_buffers:
        if (rx_ring->next_to_use != i) {
                rx_ring->next_to_use = i;
-               if (i-- == 0)
-                       i = (rx_ring->count - 1);
 
                ixgbevf_release_rx_desc(&adapter->hw, rx_ring, i);
        }
@@ -1240,9 +1238,8 @@ static void ixgbevf_configure(struct ixgbevf_adapter *adapter)
        ixgbevf_configure_rx(adapter);
        for (i = 0; i < adapter->num_rx_queues; i++) {
                struct ixgbevf_ring *ring = &adapter->rx_ring[i];
-               ixgbevf_alloc_rx_buffers(adapter, ring, ring->count);
-               ring->next_to_use = ring->count - 1;
-               writel(ring->next_to_use, adapter->hw.hw_addr + ring->tail);
+               ixgbevf_alloc_rx_buffers(adapter, ring,
+                                        IXGBE_DESC_UNUSED(ring));
        }
 }