ixgbe: fix rx-usecs range checks for BQL
authorEmil Tantilov <emil.s.tantilov@intel.com>
Tue, 22 Oct 2013 08:21:04 +0000 (08:21 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Thu, 24 Oct 2013 14:03:12 +0000 (07:03 -0700)
This patch resolves an issue where the logic used to detect changes in rx-usecs
was incorrect and was masked by the call to ixgbe_update_rsc().

Setting rx-usecs between 0,2-9 and 1,10 and up requires a reset to allow
ixgbe_configure_tx_ring() to set the correct value for TXDCTL.WTHRESH in
order to avoid Tx hangs with BQL enabled.

Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c

index 90aac31b3551746d8fd3bd95d61d5000d2fc4a1a..4e7c9b098b58f51441fe23a46f7a158834ed93c6 100644 (file)
@@ -2257,13 +2257,13 @@ static int ixgbe_set_coalesce(struct net_device *netdev,
 
 #if IS_ENABLED(CONFIG_BQL)
        /* detect ITR changes that require update of TXDCTL.WTHRESH */
-       if ((adapter->tx_itr_setting > 1) &&
+       if ((adapter->tx_itr_setting != 1) &&
            (adapter->tx_itr_setting < IXGBE_100K_ITR)) {
                if ((tx_itr_prev == 1) ||
-                   (tx_itr_prev > IXGBE_100K_ITR))
+                   (tx_itr_prev >= IXGBE_100K_ITR))
                        need_reset = true;
        } else {
-               if ((tx_itr_prev > 1) &&
+               if ((tx_itr_prev != 1) &&
                    (tx_itr_prev < IXGBE_100K_ITR))
                        need_reset = true;
        }