aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmil Tantilov <emil.s.tantilov@intel.com>2014-09-18 04:05:02 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2014-10-02 05:17:42 -0400
commitffefa9f64ce021b26aa3fd6558f1d3b6c47b3619 (patch)
treec9ec64bf3575fd52cf0828de7f60b493065875da
parent340c5203bc3158d6991dfe280f62ba7bd9584d62 (diff)
ixgbe: fix setting of TXDCTL.WTRHESH when ITR is set to 0 and no BQL
This patch consolidates the logic behind dynamically setting TXDCTL.WTHRESH depending on interrupt throttle rate (ITR) setting regardless of BQL. Previously TXDCTL.WTHRESH was dynamically being set only with BQL being enabled, but we have to set it regardless of BQL when ITR is low to avoid Tx stalls/hangs. CC: John Greene <jogreene@redhat.com> Reported by: Masayuki Gouji <gouji.masayuki@jp.fujitsu.com> 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>
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c3
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c4
2 files changed, 1 insertions, 6 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
index cff383b1cbb0..3ce4a258f945 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
@@ -2267,7 +2267,6 @@ static int ixgbe_set_coalesce(struct net_device *netdev,
2267 if (adapter->q_vector[0]->tx.count && adapter->q_vector[0]->rx.count) 2267 if (adapter->q_vector[0]->tx.count && adapter->q_vector[0]->rx.count)
2268 adapter->tx_itr_setting = adapter->rx_itr_setting; 2268 adapter->tx_itr_setting = adapter->rx_itr_setting;
2269 2269
2270#if IS_ENABLED(CONFIG_BQL)
2271 /* detect ITR changes that require update of TXDCTL.WTHRESH */ 2270 /* detect ITR changes that require update of TXDCTL.WTHRESH */
2272 if ((adapter->tx_itr_setting != 1) && 2271 if ((adapter->tx_itr_setting != 1) &&
2273 (adapter->tx_itr_setting < IXGBE_100K_ITR)) { 2272 (adapter->tx_itr_setting < IXGBE_100K_ITR)) {
@@ -2279,7 +2278,7 @@ static int ixgbe_set_coalesce(struct net_device *netdev,
2279 (tx_itr_prev < IXGBE_100K_ITR)) 2278 (tx_itr_prev < IXGBE_100K_ITR))
2280 need_reset = true; 2279 need_reset = true;
2281 } 2280 }
2282#endif 2281
2283 /* check the old value and enable RSC if necessary */ 2282 /* check the old value and enable RSC if necessary */
2284 need_reset |= ixgbe_update_rsc(adapter); 2283 need_reset |= ixgbe_update_rsc(adapter);
2285 2284
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 2daf257dea7c..d677b5a23b58 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -2982,11 +2982,7 @@ void ixgbe_configure_tx_ring(struct ixgbe_adapter *adapter,
2982 * to or less than the number of on chip descriptors, which is 2982 * to or less than the number of on chip descriptors, which is
2983 * currently 40. 2983 * currently 40.
2984 */ 2984 */
2985#if IS_ENABLED(CONFIG_BQL)
2986 if (!ring->q_vector || (ring->q_vector->itr < IXGBE_100K_ITR)) 2985 if (!ring->q_vector || (ring->q_vector->itr < IXGBE_100K_ITR))
2987#else
2988 if (!ring->q_vector || (ring->q_vector->itr < 8))
2989#endif
2990 txdctl |= (1 << 16); /* WTHRESH = 1 */ 2986 txdctl |= (1 << 16); /* WTHRESH = 1 */
2991 else 2987 else
2992 txdctl |= (8 << 16); /* WTHRESH = 8 */ 2988 txdctl |= (8 << 16); /* WTHRESH = 8 */