aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ixgbe/ixgbe_main.c
diff options
context:
space:
mode:
authorNelson, Shannon <shannon.nelson@intel.com>2009-09-18 05:46:06 -0400
committerDavid S. Miller <davem@davemloft.net>2009-09-21 14:32:31 -0400
commitf7554a2bf2696daad25465734bb962d0184469f2 (patch)
tree368ef7fd5bd0a460b37553619be790b9d9c68683 /drivers/net/ixgbe/ixgbe_main.c
parent0a1f87cbdbf26e1257b36cc5e9c00a08c2236ff2 (diff)
ixgbe: Allow tx itr specific settings
Allow the user to set Tx specific itr values. This only makes sense when there are separate vectors for Tx and Rx. When the queues are doubled up RxTx on the vectors, we still only use the rx itr value. Signed-off-by: Shannon Nelson <shannon.nelson@intel.com> Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_main.c')
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index 056434c9831..1aa9f6a5adf 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -926,12 +926,12 @@ static void ixgbe_configure_msix(struct ixgbe_adapter *adapter)
926 r_idx + 1); 926 r_idx + 1);
927 } 927 }
928 928
929 /* if this is a tx only vector halve the interrupt rate */
930 if (q_vector->txr_count && !q_vector->rxr_count) 929 if (q_vector->txr_count && !q_vector->rxr_count)
931 q_vector->eitr = (adapter->eitr_param >> 1); 930 /* tx only */
931 q_vector->eitr = adapter->tx_eitr_param;
932 else if (q_vector->rxr_count) 932 else if (q_vector->rxr_count)
933 /* rx only */ 933 /* rx or mixed */
934 q_vector->eitr = adapter->eitr_param; 934 q_vector->eitr = adapter->rx_eitr_param;
935 935
936 ixgbe_write_eitr(q_vector); 936 ixgbe_write_eitr(q_vector);
937 } 937 }
@@ -1359,7 +1359,7 @@ static int ixgbe_clean_rxonly(struct napi_struct *napi, int budget)
1359 /* If all Rx work done, exit the polling mode */ 1359 /* If all Rx work done, exit the polling mode */
1360 if (work_done < budget) { 1360 if (work_done < budget) {
1361 napi_complete(napi); 1361 napi_complete(napi);
1362 if (adapter->itr_setting & 1) 1362 if (adapter->rx_itr_setting & 1)
1363 ixgbe_set_itr_msix(q_vector); 1363 ixgbe_set_itr_msix(q_vector);
1364 if (!test_bit(__IXGBE_DOWN, &adapter->state)) 1364 if (!test_bit(__IXGBE_DOWN, &adapter->state))
1365 ixgbe_irq_enable_queues(adapter, 1365 ixgbe_irq_enable_queues(adapter,
@@ -1420,7 +1420,7 @@ static int ixgbe_clean_rxtx_many(struct napi_struct *napi, int budget)
1420 /* If all Rx work done, exit the polling mode */ 1420 /* If all Rx work done, exit the polling mode */
1421 if (work_done < budget) { 1421 if (work_done < budget) {
1422 napi_complete(napi); 1422 napi_complete(napi);
1423 if (adapter->itr_setting & 1) 1423 if (adapter->rx_itr_setting & 1)
1424 ixgbe_set_itr_msix(q_vector); 1424 ixgbe_set_itr_msix(q_vector);
1425 if (!test_bit(__IXGBE_DOWN, &adapter->state)) 1425 if (!test_bit(__IXGBE_DOWN, &adapter->state))
1426 ixgbe_irq_enable_queues(adapter, 1426 ixgbe_irq_enable_queues(adapter,
@@ -1458,10 +1458,10 @@ static int ixgbe_clean_txonly(struct napi_struct *napi, int budget)
1458 if (!ixgbe_clean_tx_irq(q_vector, tx_ring)) 1458 if (!ixgbe_clean_tx_irq(q_vector, tx_ring))
1459 work_done = budget; 1459 work_done = budget;
1460 1460
1461 /* If all Rx work done, exit the polling mode */ 1461 /* If all Tx work done, exit the polling mode */
1462 if (work_done < budget) { 1462 if (work_done < budget) {
1463 napi_complete(napi); 1463 napi_complete(napi);
1464 if (adapter->itr_setting & 1) 1464 if (adapter->tx_itr_setting & 1)
1465 ixgbe_set_itr_msix(q_vector); 1465 ixgbe_set_itr_msix(q_vector);
1466 if (!test_bit(__IXGBE_DOWN, &adapter->state)) 1466 if (!test_bit(__IXGBE_DOWN, &adapter->state))
1467 ixgbe_irq_enable_queues(adapter, ((u64)1 << q_vector->v_idx)); 1467 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)
1848 struct ixgbe_hw *hw = &adapter->hw; 1848 struct ixgbe_hw *hw = &adapter->hw;
1849 1849
1850 IXGBE_WRITE_REG(hw, IXGBE_EITR(0), 1850 IXGBE_WRITE_REG(hw, IXGBE_EITR(0),
1851 EITR_INTS_PER_SEC_TO_REG(adapter->eitr_param)); 1851 EITR_INTS_PER_SEC_TO_REG(adapter->rx_eitr_param));
1852 1852
1853 ixgbe_set_ivar(adapter, 0, 0, 0); 1853 ixgbe_set_ivar(adapter, 0, 0, 0);
1854 ixgbe_set_ivar(adapter, 1, 0, 0); 1854 ixgbe_set_ivar(adapter, 1, 0, 0);
@@ -2991,7 +2991,7 @@ static int ixgbe_poll(struct napi_struct *napi, int budget)
2991 /* If budget not fully consumed, exit the polling mode */ 2991 /* If budget not fully consumed, exit the polling mode */
2992 if (work_done < budget) { 2992 if (work_done < budget) {
2993 napi_complete(napi); 2993 napi_complete(napi);
2994 if (adapter->itr_setting & 1) 2994 if (adapter->rx_itr_setting & 1)
2995 ixgbe_set_itr(adapter); 2995 ixgbe_set_itr(adapter);
2996 if (!test_bit(__IXGBE_DOWN, &adapter->state)) 2996 if (!test_bit(__IXGBE_DOWN, &adapter->state))
2997 ixgbe_irq_enable_queues(adapter, IXGBE_EIMS_RTX_QUEUE); 2997 ixgbe_irq_enable_queues(adapter, IXGBE_EIMS_RTX_QUEUE);
@@ -3601,7 +3601,10 @@ static int ixgbe_alloc_q_vectors(struct ixgbe_adapter *adapter)
3601 if (!q_vector) 3601 if (!q_vector)
3602 goto err_out; 3602 goto err_out;
3603 q_vector->adapter = adapter; 3603 q_vector->adapter = adapter;
3604 q_vector->eitr = adapter->eitr_param; 3604 if (q_vector->txr_count && !q_vector->rxr_count)
3605 q_vector->eitr = adapter->tx_eitr_param;
3606 else
3607 q_vector->eitr = adapter->rx_eitr_param;
3605 q_vector->v_idx = q_idx; 3608 q_vector->v_idx = q_idx;
3606 netif_napi_add(adapter->netdev, &q_vector->napi, (*poll), 64); 3609 netif_napi_add(adapter->netdev, &q_vector->napi, (*poll), 64);
3607 adapter->q_vector[q_idx] = q_vector; 3610 adapter->q_vector[q_idx] = q_vector;
@@ -3870,8 +3873,10 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
3870 hw->fc.disable_fc_autoneg = false; 3873 hw->fc.disable_fc_autoneg = false;
3871 3874
3872 /* enable itr by default in dynamic mode */ 3875 /* enable itr by default in dynamic mode */
3873 adapter->itr_setting = 1; 3876 adapter->rx_itr_setting = 1;
3874 adapter->eitr_param = 20000; 3877 adapter->rx_eitr_param = 20000;
3878 adapter->tx_itr_setting = 1;
3879 adapter->tx_eitr_param = 10000;
3875 3880
3876 /* set defaults for eitr in MegaBytes */ 3881 /* set defaults for eitr in MegaBytes */
3877 adapter->eitr_low = 10; 3882 adapter->eitr_low = 10;