ixgbe: fix default setting of TXDCTL.WTHRESH
The q_vector->itr check in ixgbe_configure_tx_ring() was done prior to it being set, which resulted in TXDCTL.WTHRESH always being set to 1 on driver load, while consequent resets would set it to 8. This patch moves the setting of q_vector->itr in ixgbe_alloc_q_vector() to make sure that TXDCTL.WTHRESH is set to 8 by default. 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>
This commit is contained in:
committed by
Jeff Kirsher
parent
3645adbbab
commit
3af3361e6c
@@ -824,6 +824,21 @@ static int ixgbe_alloc_q_vector(struct ixgbe_adapter *adapter,
|
|||||||
/* initialize pointer to rings */
|
/* initialize pointer to rings */
|
||||||
ring = q_vector->ring;
|
ring = q_vector->ring;
|
||||||
|
|
||||||
|
/* intialize ITR */
|
||||||
|
if (txr_count && !rxr_count) {
|
||||||
|
/* tx only vector */
|
||||||
|
if (adapter->tx_itr_setting == 1)
|
||||||
|
q_vector->itr = IXGBE_10K_ITR;
|
||||||
|
else
|
||||||
|
q_vector->itr = adapter->tx_itr_setting;
|
||||||
|
} else {
|
||||||
|
/* rx or rx/tx vector */
|
||||||
|
if (adapter->rx_itr_setting == 1)
|
||||||
|
q_vector->itr = IXGBE_20K_ITR;
|
||||||
|
else
|
||||||
|
q_vector->itr = adapter->rx_itr_setting;
|
||||||
|
}
|
||||||
|
|
||||||
while (txr_count) {
|
while (txr_count) {
|
||||||
/* assign generic ring traits */
|
/* assign generic ring traits */
|
||||||
ring->dev = &adapter->pdev->dev;
|
ring->dev = &adapter->pdev->dev;
|
||||||
|
@@ -1976,20 +1976,6 @@ static void ixgbe_configure_msix(struct ixgbe_adapter *adapter)
|
|||||||
ixgbe_for_each_ring(ring, q_vector->tx)
|
ixgbe_for_each_ring(ring, q_vector->tx)
|
||||||
ixgbe_set_ivar(adapter, 1, ring->reg_idx, v_idx);
|
ixgbe_set_ivar(adapter, 1, ring->reg_idx, v_idx);
|
||||||
|
|
||||||
if (q_vector->tx.ring && !q_vector->rx.ring) {
|
|
||||||
/* tx only vector */
|
|
||||||
if (adapter->tx_itr_setting == 1)
|
|
||||||
q_vector->itr = IXGBE_10K_ITR;
|
|
||||||
else
|
|
||||||
q_vector->itr = adapter->tx_itr_setting;
|
|
||||||
} else {
|
|
||||||
/* rx or rx/tx vector */
|
|
||||||
if (adapter->rx_itr_setting == 1)
|
|
||||||
q_vector->itr = IXGBE_20K_ITR;
|
|
||||||
else
|
|
||||||
q_vector->itr = adapter->rx_itr_setting;
|
|
||||||
}
|
|
||||||
|
|
||||||
ixgbe_write_eitr(q_vector);
|
ixgbe_write_eitr(q_vector);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2761,12 +2747,6 @@ static void ixgbe_configure_msi_and_legacy(struct ixgbe_adapter *adapter)
|
|||||||
{
|
{
|
||||||
struct ixgbe_q_vector *q_vector = adapter->q_vector[0];
|
struct ixgbe_q_vector *q_vector = adapter->q_vector[0];
|
||||||
|
|
||||||
/* rx/tx vector */
|
|
||||||
if (adapter->rx_itr_setting == 1)
|
|
||||||
q_vector->itr = IXGBE_20K_ITR;
|
|
||||||
else
|
|
||||||
q_vector->itr = adapter->rx_itr_setting;
|
|
||||||
|
|
||||||
ixgbe_write_eitr(q_vector);
|
ixgbe_write_eitr(q_vector);
|
||||||
|
|
||||||
ixgbe_set_ivar(adapter, 0, 0, 0);
|
ixgbe_set_ivar(adapter, 0, 0, 0);
|
||||||
|
Reference in New Issue
Block a user