ixgbe: Address issues with Tx WHTRESH value not being set correctly
authorAlexander Duyck <alexander.h.duyck@intel.com>
Wed, 8 Feb 2012 07:49:38 +0000 (07:49 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 13 Mar 2012 03:28:25 +0000 (20:28 -0700)
This change is meant to address the fact that the tx_itr_setting was
dropping to 0 when no separate Tx vectors were provided.  This had resulted
in the driver incorrectly configuring the Tx ring with a WTHRESH of 1 in
order to avoid Tx hangs even though that was not necessary. This change
makes it so that we instead take a look at the Tx ring's q_vector to
determine if the ring will have an ITR value less than 8us.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Stephen Ko <stephen.s.ko@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index a2c14bfd4b3f372f544deccbfd2e88bdbeb6e86f..fc3c33a2c205cd097120424c9cd4907c311a5039 100644 (file)
@@ -2595,12 +2595,15 @@ void ixgbe_configure_tx_ring(struct ixgbe_adapter *adapter,
         * to or less than the number of on chip descriptors, which is
         * currently 40.
         */
-       if (!adapter->tx_itr_setting || !adapter->rx_itr_setting)
+       if (!ring->q_vector || (ring->q_vector->itr < 8))
                txdctl |= (1 << 16);    /* WTHRESH = 1 */
        else
                txdctl |= (8 << 16);    /* WTHRESH = 8 */
 
-       /* PTHRESH=32 is needed to avoid a Tx hang with DFP enabled. */
+       /*
+        * Setting PTHRESH to 32 both improves performance
+        * and avoids a TX hang with DFP enabled
+        */
        txdctl |= (1 << 8) |    /* HTHRESH = 1 */
                   32;          /* PTHRESH = 32 */