diff options
author | Alexander Duyck <alexander.h.duyck@intel.com> | 2009-10-27 19:45:42 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-10-28 06:25:31 -0400 |
commit | 4fc82adfb01bdee79ec21e44557dc409ef31419a (patch) | |
tree | ca9dbca3e71231e7a875ada6000660ec1c65c05f /drivers/net/igb/igb_main.c | |
parent | 9c1bbbaf3eef357b15c0e94085d96f18c6f1bde6 (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.c | 22 |
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 | ||
797 | static void igb_map_tx_ring_to_vector(struct igb_adapter *adapter, | 801 | static 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 |