aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorJesse Brandeburg <jesse.brandeburg@intel.com>2009-05-07 07:07:35 -0400
committerDavid S. Miller <davem@davemloft.net>2009-05-07 17:52:32 -0400
commitc2d5ab4973bfaa72cbb677801825ce56c8f69b56 (patch)
tree80a5a2f555285a45c8e38f409aa996953f60fee6 /drivers/net
parentc9c7d2e5a06cd3a26b6be096949e3371ec2aa123 (diff)
e1000/e1000e/igb/ixgb: don't txhang after link down
after the recent changes to wired drivers to use only netif_carrier_off the driver can have outstanding tx work to complete that will never complete once link is down. Since the intel hardware will hold this tx work forever, the driver notices a tx timeout condition internally and might try to instigate printk and reset of the part with a netif_stop_queue, which doesn't work because link is down. Don't bother arming to tx hang detection when link is down. 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')
-rw-r--r--drivers/net/e1000/e1000_main.c2
-rw-r--r--drivers/net/e1000e/netdev.c2
-rw-r--r--drivers/net/igb/igb_main.c2
-rw-r--r--drivers/net/ixgb/ixgb_main.c2
4 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index 71d4fe15976a..b455dca0901e 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -2646,6 +2646,8 @@ static void e1000_watchdog(unsigned long data)
2646 * (Do the reset outside of interrupt context). */ 2646 * (Do the reset outside of interrupt context). */
2647 adapter->tx_timeout_count++; 2647 adapter->tx_timeout_count++;
2648 schedule_work(&adapter->reset_task); 2648 schedule_work(&adapter->reset_task);
2649 /* return immediately since reset is imminent */
2650 return;
2649 } 2651 }
2650 } 2652 }
2651 2653
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index da6b37e05bea..ccaaee0951cf 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -3651,6 +3651,8 @@ link_up:
3651 */ 3651 */
3652 adapter->tx_timeout_count++; 3652 adapter->tx_timeout_count++;
3653 schedule_work(&adapter->reset_task); 3653 schedule_work(&adapter->reset_task);
3654 /* return immediately since reset is imminent */
3655 return;
3654 } 3656 }
3655 } 3657 }
3656 3658
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index 8de8629b07ec..8784c051707e 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -2711,6 +2711,8 @@ link_up:
2711 * (Do the reset outside of interrupt context). */ 2711 * (Do the reset outside of interrupt context). */
2712 adapter->tx_timeout_count++; 2712 adapter->tx_timeout_count++;
2713 schedule_work(&adapter->reset_task); 2713 schedule_work(&adapter->reset_task);
2714 /* return immediately since reset is imminent */
2715 return;
2714 } 2716 }
2715 } 2717 }
2716 2718
diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c
index cb9ecc48f6d0..04cb81a739c2 100644
--- a/drivers/net/ixgb/ixgb_main.c
+++ b/drivers/net/ixgb/ixgb_main.c
@@ -1140,6 +1140,8 @@ ixgb_watchdog(unsigned long data)
1140 * to get done, so reset controller to flush Tx. 1140 * to get done, so reset controller to flush Tx.
1141 * (Do the reset outside of interrupt context). */ 1141 * (Do the reset outside of interrupt context). */
1142 schedule_work(&adapter->tx_timeout_task); 1142 schedule_work(&adapter->tx_timeout_task);
1143 /* return immediately since reset is imminent */
1144 return;
1143 } 1145 }
1144 } 1146 }
1145 1147