|
@@ -926,12 +926,12 @@ static void ixgbe_configure_msix(struct ixgbe_adapter *adapter)
|
|
r_idx + 1);
|
|
r_idx + 1);
|
|
}
|
|
}
|
|
|
|
|
|
- /* if this is a tx only vector halve the interrupt rate */
|
|
|
|
if (q_vector->txr_count && !q_vector->rxr_count)
|
|
if (q_vector->txr_count && !q_vector->rxr_count)
|
|
- q_vector->eitr = (adapter->eitr_param >> 1);
|
|
|
|
|
|
+ /* tx only */
|
|
|
|
+ q_vector->eitr = adapter->tx_eitr_param;
|
|
else if (q_vector->rxr_count)
|
|
else if (q_vector->rxr_count)
|
|
- /* rx only */
|
|
|
|
- q_vector->eitr = adapter->eitr_param;
|
|
|
|
|
|
+ /* rx or mixed */
|
|
|
|
+ q_vector->eitr = adapter->rx_eitr_param;
|
|
|
|
|
|
ixgbe_write_eitr(q_vector);
|
|
ixgbe_write_eitr(q_vector);
|
|
}
|
|
}
|
|
@@ -1359,7 +1359,7 @@ static int ixgbe_clean_rxonly(struct napi_struct *napi, int budget)
|
|
/* If all Rx work done, exit the polling mode */
|
|
/* If all Rx work done, exit the polling mode */
|
|
if (work_done < budget) {
|
|
if (work_done < budget) {
|
|
napi_complete(napi);
|
|
napi_complete(napi);
|
|
- if (adapter->itr_setting & 1)
|
|
|
|
|
|
+ if (adapter->rx_itr_setting & 1)
|
|
ixgbe_set_itr_msix(q_vector);
|
|
ixgbe_set_itr_msix(q_vector);
|
|
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
|
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
|
ixgbe_irq_enable_queues(adapter,
|
|
ixgbe_irq_enable_queues(adapter,
|
|
@@ -1420,7 +1420,7 @@ static int ixgbe_clean_rxtx_many(struct napi_struct *napi, int budget)
|
|
/* If all Rx work done, exit the polling mode */
|
|
/* If all Rx work done, exit the polling mode */
|
|
if (work_done < budget) {
|
|
if (work_done < budget) {
|
|
napi_complete(napi);
|
|
napi_complete(napi);
|
|
- if (adapter->itr_setting & 1)
|
|
|
|
|
|
+ if (adapter->rx_itr_setting & 1)
|
|
ixgbe_set_itr_msix(q_vector);
|
|
ixgbe_set_itr_msix(q_vector);
|
|
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
|
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
|
ixgbe_irq_enable_queues(adapter,
|
|
ixgbe_irq_enable_queues(adapter,
|
|
@@ -1458,10 +1458,10 @@ static int ixgbe_clean_txonly(struct napi_struct *napi, int budget)
|
|
if (!ixgbe_clean_tx_irq(q_vector, tx_ring))
|
|
if (!ixgbe_clean_tx_irq(q_vector, tx_ring))
|
|
work_done = budget;
|
|
work_done = budget;
|
|
|
|
|
|
- /* If all Rx work done, exit the polling mode */
|
|
|
|
|
|
+ /* If all Tx work done, exit the polling mode */
|
|
if (work_done < budget) {
|
|
if (work_done < budget) {
|
|
napi_complete(napi);
|
|
napi_complete(napi);
|
|
- if (adapter->itr_setting & 1)
|
|
|
|
|
|
+ if (adapter->tx_itr_setting & 1)
|
|
ixgbe_set_itr_msix(q_vector);
|
|
ixgbe_set_itr_msix(q_vector);
|
|
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
|
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
|
ixgbe_irq_enable_queues(adapter, ((u64)1 << q_vector->v_idx));
|
|
ixgbe_irq_enable_queues(adapter, ((u64)1 << q_vector->v_idx));
|
|
@@ -1848,7 +1848,7 @@ static void ixgbe_configure_msi_and_legacy(struct ixgbe_adapter *adapter)
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
|
|
|
|
IXGBE_WRITE_REG(hw, IXGBE_EITR(0),
|
|
IXGBE_WRITE_REG(hw, IXGBE_EITR(0),
|
|
- EITR_INTS_PER_SEC_TO_REG(adapter->eitr_param));
|
|
|
|
|
|
+ EITR_INTS_PER_SEC_TO_REG(adapter->rx_eitr_param));
|
|
|
|
|
|
ixgbe_set_ivar(adapter, 0, 0, 0);
|
|
ixgbe_set_ivar(adapter, 0, 0, 0);
|
|
ixgbe_set_ivar(adapter, 1, 0, 0);
|
|
ixgbe_set_ivar(adapter, 1, 0, 0);
|
|
@@ -2991,7 +2991,7 @@ static int ixgbe_poll(struct napi_struct *napi, int budget)
|
|
/* If budget not fully consumed, exit the polling mode */
|
|
/* If budget not fully consumed, exit the polling mode */
|
|
if (work_done < budget) {
|
|
if (work_done < budget) {
|
|
napi_complete(napi);
|
|
napi_complete(napi);
|
|
- if (adapter->itr_setting & 1)
|
|
|
|
|
|
+ if (adapter->rx_itr_setting & 1)
|
|
ixgbe_set_itr(adapter);
|
|
ixgbe_set_itr(adapter);
|
|
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
|
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
|
ixgbe_irq_enable_queues(adapter, IXGBE_EIMS_RTX_QUEUE);
|
|
ixgbe_irq_enable_queues(adapter, IXGBE_EIMS_RTX_QUEUE);
|
|
@@ -3601,7 +3601,10 @@ static int ixgbe_alloc_q_vectors(struct ixgbe_adapter *adapter)
|
|
if (!q_vector)
|
|
if (!q_vector)
|
|
goto err_out;
|
|
goto err_out;
|
|
q_vector->adapter = adapter;
|
|
q_vector->adapter = adapter;
|
|
- q_vector->eitr = adapter->eitr_param;
|
|
|
|
|
|
+ if (q_vector->txr_count && !q_vector->rxr_count)
|
|
|
|
+ q_vector->eitr = adapter->tx_eitr_param;
|
|
|
|
+ else
|
|
|
|
+ q_vector->eitr = adapter->rx_eitr_param;
|
|
q_vector->v_idx = q_idx;
|
|
q_vector->v_idx = q_idx;
|
|
netif_napi_add(adapter->netdev, &q_vector->napi, (*poll), 64);
|
|
netif_napi_add(adapter->netdev, &q_vector->napi, (*poll), 64);
|
|
adapter->q_vector[q_idx] = q_vector;
|
|
adapter->q_vector[q_idx] = q_vector;
|
|
@@ -3870,8 +3873,10 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
|
|
hw->fc.disable_fc_autoneg = false;
|
|
hw->fc.disable_fc_autoneg = false;
|
|
|
|
|
|
/* enable itr by default in dynamic mode */
|
|
/* enable itr by default in dynamic mode */
|
|
- adapter->itr_setting = 1;
|
|
|
|
- adapter->eitr_param = 20000;
|
|
|
|
|
|
+ adapter->rx_itr_setting = 1;
|
|
|
|
+ adapter->rx_eitr_param = 20000;
|
|
|
|
+ adapter->tx_itr_setting = 1;
|
|
|
|
+ adapter->tx_eitr_param = 10000;
|
|
|
|
|
|
/* set defaults for eitr in MegaBytes */
|
|
/* set defaults for eitr in MegaBytes */
|
|
adapter->eitr_low = 10;
|
|
adapter->eitr_low = 10;
|