diff options
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_ethtool.c')
-rw-r--r-- | drivers/net/ixgbe/ixgbe_ethtool.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/ixgbe/ixgbe_ethtool.c index a119cbd8dbb8..85b7d15e1217 100644 --- a/drivers/net/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ixgbe/ixgbe_ethtool.c | |||
@@ -246,13 +246,26 @@ static int ixgbe_set_tx_csum(struct net_device *netdev, u32 data) | |||
246 | 246 | ||
247 | static int ixgbe_set_tso(struct net_device *netdev, u32 data) | 247 | static int ixgbe_set_tso(struct net_device *netdev, u32 data) |
248 | { | 248 | { |
249 | |||
250 | if (data) { | 249 | if (data) { |
251 | netdev->features |= NETIF_F_TSO; | 250 | netdev->features |= NETIF_F_TSO; |
252 | netdev->features |= NETIF_F_TSO6; | 251 | netdev->features |= NETIF_F_TSO6; |
253 | } else { | 252 | } else { |
253 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | ||
254 | struct ixgbe_adapter *adapter = netdev_priv(netdev); | ||
255 | int i; | ||
256 | #endif | ||
257 | netif_stop_queue(netdev); | ||
258 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | ||
259 | for (i = 0; i < adapter->num_tx_queues; i++) | ||
260 | netif_stop_subqueue(netdev, i); | ||
261 | #endif | ||
254 | netdev->features &= ~NETIF_F_TSO; | 262 | netdev->features &= ~NETIF_F_TSO; |
255 | netdev->features &= ~NETIF_F_TSO6; | 263 | netdev->features &= ~NETIF_F_TSO6; |
264 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | ||
265 | for (i = 0; i < adapter->num_tx_queues; i++) | ||
266 | netif_start_subqueue(netdev, i); | ||
267 | #endif | ||
268 | netif_start_queue(netdev); | ||
256 | } | 269 | } |
257 | return 0; | 270 | return 0; |
258 | } | 271 | } |