aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/igb/igb_main.c
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2009-10-27 19:45:42 -0400
committerDavid S. Miller <davem@davemloft.net>2009-10-28 06:25:31 -0400
commit4fc82adfb01bdee79ec21e44557dc409ef31419a (patch)
treeca9dbca3e71231e7a875ada6000660ec1c65c05f /drivers/net/igb/igb_main.c
parent9c1bbbaf3eef357b15c0e94085d96f18c6f1bde6 (diff)
igb: add support for seperate tx-usecs setting in ethtool
This patch adds support for a seperate tx-usecs interrupt moderation setting in ethtool which is supported when tx and rx interrupt vectors are sperated. Signed-off-by: Alexander Duyck <alexander.h.duyck@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/igb/igb_main.c')
-rw-r--r--drivers/net/igb/igb_main.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index c9fda113abe6..5724ac8c1ca9 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -734,6 +734,8 @@ msi_only:
734 dev_info(&adapter->pdev->dev, "IOV Disabled\n"); 734 dev_info(&adapter->pdev->dev, "IOV Disabled\n");
735 } 735 }
736#endif 736#endif
737 adapter->vfs_allocated_count = 0;
738 adapter->flags |= IGB_FLAG_QUEUE_PAIRS;
737 adapter->num_rx_queues = 1; 739 adapter->num_rx_queues = 1;
738 adapter->num_tx_queues = 1; 740 adapter->num_tx_queues = 1;
739 adapter->num_q_vectors = 1; 741 adapter->num_q_vectors = 1;
@@ -791,7 +793,9 @@ static void igb_map_rx_ring_to_vector(struct igb_adapter *adapter,
791 q_vector = adapter->q_vector[v_idx]; 793 q_vector = adapter->q_vector[v_idx];
792 q_vector->rx_ring = &adapter->rx_ring[ring_idx]; 794 q_vector->rx_ring = &adapter->rx_ring[ring_idx];
793 q_vector->rx_ring->q_vector = q_vector; 795 q_vector->rx_ring->q_vector = q_vector;
794 q_vector->itr_val = adapter->itr; 796 q_vector->itr_val = adapter->rx_itr_setting;
797 if (q_vector->itr_val && q_vector->itr_val <= 3)
798 q_vector->itr_val = IGB_START_ITR;
795} 799}
796 800
797static void igb_map_tx_ring_to_vector(struct igb_adapter *adapter, 801static void igb_map_tx_ring_to_vector(struct igb_adapter *adapter,
@@ -802,7 +806,9 @@ static void igb_map_tx_ring_to_vector(struct igb_adapter *adapter,
802 q_vector = adapter->q_vector[v_idx]; 806 q_vector = adapter->q_vector[v_idx];
803 q_vector->tx_ring = &adapter->tx_ring[ring_idx]; 807 q_vector->tx_ring = &adapter->tx_ring[ring_idx];
804 q_vector->tx_ring->q_vector = q_vector; 808 q_vector->tx_ring->q_vector = q_vector;
805 q_vector->itr_val = adapter->itr; 809 q_vector->itr_val = adapter->tx_itr_setting;
810 if (q_vector->itr_val && q_vector->itr_val <= 3)
811 q_vector->itr_val = IGB_START_ITR;
806} 812}
807 813
808/** 814/**
@@ -1597,9 +1603,6 @@ static int __devinit igb_probe(struct pci_dev *pdev,
1597 hw->fc.requested_mode = e1000_fc_default; 1603 hw->fc.requested_mode = e1000_fc_default;
1598 hw->fc.current_mode = e1000_fc_default; 1604 hw->fc.current_mode = e1000_fc_default;
1599 1605
1600 adapter->itr_setting = IGB_DEFAULT_ITR;
1601 adapter->itr = IGB_START_ITR;
1602
1603 igb_validate_mdi_setting(hw); 1606 igb_validate_mdi_setting(hw);
1604 1607
1605 /* Initial Wake on LAN setting If APM wake is enabled in the EEPROM, 1608 /* Initial Wake on LAN setting If APM wake is enabled in the EEPROM,
@@ -1854,6 +1857,9 @@ static int __devinit igb_sw_init(struct igb_adapter *adapter)
1854 1857
1855 adapter->tx_ring_count = IGB_DEFAULT_TXD; 1858 adapter->tx_ring_count = IGB_DEFAULT_TXD;
1856 adapter->rx_ring_count = IGB_DEFAULT_RXD; 1859 adapter->rx_ring_count = IGB_DEFAULT_RXD;
1860 adapter->rx_itr_setting = IGB_DEFAULT_ITR;
1861 adapter->tx_itr_setting = IGB_DEFAULT_ITR;
1862
1857 adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN; 1863 adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN;
1858 adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN; 1864 adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN;
1859 1865
@@ -3052,7 +3058,6 @@ enum latency_range {
3052 latency_invalid = 255 3058 latency_invalid = 255
3053}; 3059};
3054 3060
3055
3056/** 3061/**
3057 * igb_update_ring_itr - update the dynamic ITR value based on packet size 3062 * igb_update_ring_itr - update the dynamic ITR value based on packet size
3058 * 3063 *
@@ -3216,7 +3221,7 @@ static void igb_set_itr(struct igb_adapter *adapter)
3216 current_itr = max(adapter->rx_itr, adapter->tx_itr); 3221 current_itr = max(adapter->rx_itr, adapter->tx_itr);
3217 3222
3218 /* conservative mode (itr 3) eliminates the lowest_latency setting */ 3223 /* conservative mode (itr 3) eliminates the lowest_latency setting */
3219 if (adapter->itr_setting == 3 && current_itr == lowest_latency) 3224 if (adapter->rx_itr_setting == 3 && current_itr == lowest_latency)
3220 current_itr = low_latency; 3225 current_itr = low_latency;
3221 3226
3222 switch (current_itr) { 3227 switch (current_itr) {
@@ -4577,7 +4582,8 @@ static inline void igb_ring_irq_enable(struct igb_q_vector *q_vector)
4577 struct igb_adapter *adapter = q_vector->adapter; 4582 struct igb_adapter *adapter = q_vector->adapter;
4578 struct e1000_hw *hw = &adapter->hw; 4583 struct e1000_hw *hw = &adapter->hw;
4579 4584
4580 if (adapter->itr_setting & 3) { 4585 if ((q_vector->rx_ring && (adapter->rx_itr_setting & 3)) ||
4586 (!q_vector->rx_ring && (adapter->tx_itr_setting & 3))) {
4581 if (!adapter->msix_entries) 4587 if (!adapter->msix_entries)
4582 igb_set_itr(adapter); 4588 igb_set_itr(adapter);
4583 else 4589 else