From: John Fastabend Date: Thu, 25 Feb 2010 23:14:58 +0000 (+0000) Subject: ixgbe: do not stop tx queues in ixgbe_set_tso X-Git-Tag: v2.6.34-rc1~233^2~71 X-Git-Url: https://bbs.cooldavid.org/git/?a=commitdiff_plain;h=a922afb64d2e71115f122e04346163cb8c8453e3;hp=43634e820e393ba48bb2efc3d330dee4203e80d8;p=net-next-2.6.git ixgbe: do not stop tx queues in ixgbe_set_tso Disabling TSO can cause the dev_watchdog timer to be triggered because when TSO is disabled netif_tx_stop_all_queues is called. If the watchdog timer fires while the queues are stopped and traffic has not recently been sent on a paticular queue this is falsly identified as a hang and ndo_tx_timeout() is called. This is ocossionally seen during testing. This removes the netif_tx_stop_all_queues() it is not needed. The scheduler submits skb's with dev_hard_start_xmit(), this checks if netif_needs_gso and if so it calls dev_gso_segment. Disabling TSO will cause dev_hard_start_xmit() to do the gso processing. However ixgbe does not use the features flags to determine if it needs to use tso or not instead it uses skb->gso_size so ixgbe will process these frames correctly regardless of the netdev features flag. Signed-off-by: John Fastabend Acked-by: Peter P Waskiewicz Jr Signed-off-by: Jeff Kirsher Signed-off-by: David S. Miller --- diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/ixgbe/ixgbe_ethtool.c index 0d234346a4e..7949a446e4c 100644 --- a/drivers/net/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ixgbe/ixgbe_ethtool.c @@ -441,10 +441,8 @@ static int ixgbe_set_tso(struct net_device *netdev, u32 data) netdev->features |= NETIF_F_TSO; netdev->features |= NETIF_F_TSO6; } else { - netif_tx_stop_all_queues(netdev); netdev->features &= ~NETIF_F_TSO; netdev->features &= ~NETIF_F_TSO6; - netif_tx_start_all_queues(netdev); } return 0; }