diff options
| author | David S. Miller <davem@davemloft.net> | 2010-06-15 01:59:34 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-06-15 01:59:34 -0400 |
| commit | 6b08f516244abda22c07b5e7db10ef109dc43f2d (patch) | |
| tree | 098fbb9b45213feeb5e093a9a690ef76e624469a /drivers/net/ixgbe | |
| parent | 0b5c25e8ac3a60bd01a52ca7405ba96aec8c16be (diff) | |
| parent | 28c8e4790ca5ef75f54895ca46437f9fbb433ddf (diff) | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
drivers/net/ixgbe/ixgbe_ethtool.c
With merge conflict help from Stephen Rothwell.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ixgbe')
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_ethtool.c | 35 | ||||
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 4 |
2 files changed, 11 insertions, 28 deletions
diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/ixgbe/ixgbe_ethtool.c index 644e3d21b751..873b45efca40 100644 --- a/drivers/net/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ixgbe/ixgbe_ethtool.c | |||
| @@ -2075,25 +2075,6 @@ static int ixgbe_get_coalesce(struct net_device *netdev, | |||
| 2075 | return 0; | 2075 | return 0; |
| 2076 | } | 2076 | } |
| 2077 | 2077 | ||
| 2078 | /* | ||
| 2079 | * this function must be called before setting the new value of | ||
| 2080 | * rx_itr_setting | ||
| 2081 | */ | ||
| 2082 | static bool ixgbe_reenable_rsc(struct ixgbe_adapter *adapter, | ||
| 2083 | struct ethtool_coalesce *ec) | ||
| 2084 | { | ||
| 2085 | /* check the old value and enable RSC if necessary */ | ||
| 2086 | if ((adapter->rx_itr_setting == 0) && | ||
| 2087 | (adapter->flags2 & IXGBE_FLAG2_RSC_CAPABLE)) { | ||
| 2088 | adapter->flags2 |= IXGBE_FLAG2_RSC_ENABLED; | ||
| 2089 | adapter->netdev->features |= NETIF_F_LRO; | ||
| 2090 | e_info("rx-usecs set to %d, re-enabling RSC\n", | ||
| 2091 | ec->rx_coalesce_usecs); | ||
| 2092 | return true; | ||
| 2093 | } | ||
| 2094 | return false; | ||
| 2095 | } | ||
| 2096 | |||
| 2097 | static int ixgbe_set_coalesce(struct net_device *netdev, | 2078 | static int ixgbe_set_coalesce(struct net_device *netdev, |
| 2098 | struct ethtool_coalesce *ec) | 2079 | struct ethtool_coalesce *ec) |
| 2099 | { | 2080 | { |
| @@ -2122,9 +2103,6 @@ static int ixgbe_set_coalesce(struct net_device *netdev, | |||
| 2122 | (1000000/ec->rx_coalesce_usecs < IXGBE_MIN_INT_RATE)) | 2103 | (1000000/ec->rx_coalesce_usecs < IXGBE_MIN_INT_RATE)) |
| 2123 | return -EINVAL; | 2104 | return -EINVAL; |
| 2124 | 2105 | ||
| 2125 | /* check the old value and enable RSC if necessary */ | ||
| 2126 | need_reset = ixgbe_reenable_rsc(adapter, ec); | ||
| 2127 | |||
| 2128 | /* store the value in ints/second */ | 2106 | /* store the value in ints/second */ |
| 2129 | adapter->rx_eitr_param = 1000000/ec->rx_coalesce_usecs; | 2107 | adapter->rx_eitr_param = 1000000/ec->rx_coalesce_usecs; |
| 2130 | 2108 | ||
| @@ -2133,9 +2111,6 @@ static int ixgbe_set_coalesce(struct net_device *netdev, | |||
| 2133 | /* clear the lower bit as its used for dynamic state */ | 2111 | /* clear the lower bit as its used for dynamic state */ |
| 2134 | adapter->rx_itr_setting &= ~1; | 2112 | adapter->rx_itr_setting &= ~1; |
| 2135 | } else if (ec->rx_coalesce_usecs == 1) { | 2113 | } else if (ec->rx_coalesce_usecs == 1) { |
| 2136 | /* check the old value and enable RSC if necessary */ | ||
| 2137 | need_reset = ixgbe_reenable_rsc(adapter, ec); | ||
| 2138 | |||
| 2139 | /* 1 means dynamic mode */ | 2114 | /* 1 means dynamic mode */ |
| 2140 | adapter->rx_eitr_param = 20000; | 2115 | adapter->rx_eitr_param = 20000; |
| 2141 | adapter->rx_itr_setting = 1; | 2116 | adapter->rx_itr_setting = 1; |
| @@ -2155,9 +2130,10 @@ static int ixgbe_set_coalesce(struct net_device *netdev, | |||
| 2155 | */ | 2130 | */ |
| 2156 | if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) { | 2131 | if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) { |
| 2157 | adapter->flags2 &= ~IXGBE_FLAG2_RSC_ENABLED; | 2132 | adapter->flags2 &= ~IXGBE_FLAG2_RSC_ENABLED; |
| 2158 | netdev->features &= ~NETIF_F_LRO; | 2133 | if (netdev->features & NETIF_F_LRO) { |
| 2159 | e_info("rx-usecs set to 0, disabling RSC\n"); | 2134 | netdev->features &= ~NETIF_F_LRO; |
| 2160 | 2135 | e_info("rx-usecs set to 0, disabling RSC\n"); | |
| 2136 | } | ||
| 2161 | need_reset = true; | 2137 | need_reset = true; |
| 2162 | } | 2138 | } |
| 2163 | } | 2139 | } |
| @@ -2252,6 +2228,9 @@ static int ixgbe_set_flags(struct net_device *netdev, u32 data) | |||
| 2252 | } | 2228 | } |
| 2253 | } else if (!adapter->rx_itr_setting) { | 2229 | } else if (!adapter->rx_itr_setting) { |
| 2254 | netdev->features &= ~ETH_FLAG_LRO; | 2230 | netdev->features &= ~ETH_FLAG_LRO; |
| 2231 | if (data & ETH_FLAG_LRO) | ||
| 2232 | e_info("rx-usecs set to 0, " | ||
| 2233 | "LRO/RSC cannot be enabled.\n"); | ||
| 2255 | } | 2234 | } |
| 2256 | } | 2235 | } |
| 2257 | 2236 | ||
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index 6b483d352f23..9cca737e4885 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
| @@ -5269,6 +5269,10 @@ void ixgbe_update_stats(struct ixgbe_adapter *adapter) | |||
| 5269 | u32 i, missed_rx = 0, mpc, bprc, lxon, lxoff, xon_off_tot; | 5269 | u32 i, missed_rx = 0, mpc, bprc, lxon, lxoff, xon_off_tot; |
| 5270 | u64 non_eop_descs = 0, restart_queue = 0; | 5270 | u64 non_eop_descs = 0, restart_queue = 0; |
| 5271 | 5271 | ||
| 5272 | if (test_bit(__IXGBE_DOWN, &adapter->state) || | ||
| 5273 | test_bit(__IXGBE_RESETTING, &adapter->state)) | ||
| 5274 | return; | ||
| 5275 | |||
| 5272 | if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) { | 5276 | if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) { |
| 5273 | u64 rsc_count = 0; | 5277 | u64 rsc_count = 0; |
| 5274 | u64 rsc_flush = 0; | 5278 | u64 rsc_flush = 0; |
