aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e/ethtool.c
diff options
context:
space:
mode:
authorJesse Brandeburg <jesse.brandeburg@intel.com>2010-05-04 18:26:03 -0400
committerDavid S. Miller <davem@davemloft.net>2010-05-06 00:15:32 -0400
commiteab2abf5826b78b126826cc70e564c44816396da (patch)
treef771389b55090767e8aecdc36f3e80019b3b60bf /drivers/net/e1000e/ethtool.c
parentedf15c17420fed108046da50b3d3ae53dfa0e0ae (diff)
e1000/e1000e: implement a simple interrupt moderation
Back before e1000-7.3.20, the e1000 driver had a simple algorithm that managed interrupt moderation. The driver was updated in 7.3.20 to have the new "adaptive" interrupt moderation but we have customer requests to redeploy the old way as an option. This patch adds the old functionality back. The new functionality can be enabled via module parameter or at runtime via ethtool. Module parameter: (InterruptThrottleRate=4) to use this new moderation method. Ethtool method: ethtool -C ethX rx-usecs 4 Signed-off-by: Jesse Brandeburg <jesse.brandeburg@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/e1000e/ethtool.c')
-rw-r--r--drivers/net/e1000e/ethtool.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
index b72c1c0876fc..6ff376cfe139 100644
--- a/drivers/net/e1000e/ethtool.c
+++ b/drivers/net/e1000e/ethtool.c
@@ -1890,7 +1890,7 @@ static int e1000_get_coalesce(struct net_device *netdev,
1890{ 1890{
1891 struct e1000_adapter *adapter = netdev_priv(netdev); 1891 struct e1000_adapter *adapter = netdev_priv(netdev);
1892 1892
1893 if (adapter->itr_setting <= 3) 1893 if (adapter->itr_setting <= 4)
1894 ec->rx_coalesce_usecs = adapter->itr_setting; 1894 ec->rx_coalesce_usecs = adapter->itr_setting;
1895 else 1895 else
1896 ec->rx_coalesce_usecs = 1000000 / adapter->itr_setting; 1896 ec->rx_coalesce_usecs = 1000000 / adapter->itr_setting;
@@ -1905,12 +1905,14 @@ static int e1000_set_coalesce(struct net_device *netdev,
1905 struct e1000_hw *hw = &adapter->hw; 1905 struct e1000_hw *hw = &adapter->hw;
1906 1906
1907 if ((ec->rx_coalesce_usecs > E1000_MAX_ITR_USECS) || 1907 if ((ec->rx_coalesce_usecs > E1000_MAX_ITR_USECS) ||
1908 ((ec->rx_coalesce_usecs > 3) && 1908 ((ec->rx_coalesce_usecs > 4) &&
1909 (ec->rx_coalesce_usecs < E1000_MIN_ITR_USECS)) || 1909 (ec->rx_coalesce_usecs < E1000_MIN_ITR_USECS)) ||
1910 (ec->rx_coalesce_usecs == 2)) 1910 (ec->rx_coalesce_usecs == 2))
1911 return -EINVAL; 1911 return -EINVAL;
1912 1912
1913 if (ec->rx_coalesce_usecs <= 3) { 1913 if (ec->rx_coalesce_usecs == 4) {
1914 adapter->itr = adapter->itr_setting = 4;
1915 } else if (ec->rx_coalesce_usecs <= 3) {
1914 adapter->itr = 20000; 1916 adapter->itr = 20000;
1915 adapter->itr_setting = ec->rx_coalesce_usecs; 1917 adapter->itr_setting = ec->rx_coalesce_usecs;
1916 } else { 1918 } else {