]> err.no Git - linux-2.6/blobdiff - drivers/net/ixgbe/ixgbe_ethtool.c
ixgbe: Introduce Multiqueue TX
[linux-2.6] / drivers / net / ixgbe / ixgbe_ethtool.c
index a119cbd8dbb8b2aad03186d12a8e2150f3752a1b..85b7d15e12171bc0cfc7038461d24c676154d022 100644 (file)
@@ -246,13 +246,26 @@ static int ixgbe_set_tx_csum(struct net_device *netdev, u32 data)
 
 static int ixgbe_set_tso(struct net_device *netdev, u32 data)
 {
-
        if (data) {
                netdev->features |= NETIF_F_TSO;
                netdev->features |= NETIF_F_TSO6;
        } else {
+#ifdef CONFIG_NETDEVICES_MULTIQUEUE
+               struct ixgbe_adapter *adapter = netdev_priv(netdev);
+               int i;
+#endif
+               netif_stop_queue(netdev);
+#ifdef CONFIG_NETDEVICES_MULTIQUEUE
+               for (i = 0; i < adapter->num_tx_queues; i++)
+                       netif_stop_subqueue(netdev, i);
+#endif
                netdev->features &= ~NETIF_F_TSO;
                netdev->features &= ~NETIF_F_TSO6;
+#ifdef CONFIG_NETDEVICES_MULTIQUEUE
+               for (i = 0; i < adapter->num_tx_queues; i++)
+                       netif_start_subqueue(netdev, i);
+#endif
+               netif_start_queue(netdev);
        }
        return 0;
 }