diff options
Diffstat (limited to 'drivers/net/e1000')
-rw-r--r-- | drivers/net/e1000/e1000_main.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 4d6677e4f9f2..7af3255a8e9c 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -1098,6 +1098,11 @@ static void __devexit e1000_remove(struct pci_dev *pdev) | |||
1098 | struct e1000_adapter *adapter = netdev_priv(netdev); | 1098 | struct e1000_adapter *adapter = netdev_priv(netdev); |
1099 | struct e1000_hw *hw = &adapter->hw; | 1099 | struct e1000_hw *hw = &adapter->hw; |
1100 | 1100 | ||
1101 | set_bit(__E1000_DOWN, &adapter->flags); | ||
1102 | del_timer_sync(&adapter->tx_fifo_stall_timer); | ||
1103 | del_timer_sync(&adapter->watchdog_timer); | ||
1104 | del_timer_sync(&adapter->phy_info_timer); | ||
1105 | |||
1101 | cancel_work_sync(&adapter->reset_task); | 1106 | cancel_work_sync(&adapter->reset_task); |
1102 | 1107 | ||
1103 | e1000_release_manageability(adapter); | 1108 | e1000_release_manageability(adapter); |
@@ -2240,7 +2245,7 @@ static void e1000_82547_tx_fifo_stall(unsigned long data) | |||
2240 | adapter->tx_fifo_head = 0; | 2245 | adapter->tx_fifo_head = 0; |
2241 | atomic_set(&adapter->tx_fifo_stall, 0); | 2246 | atomic_set(&adapter->tx_fifo_stall, 0); |
2242 | netif_wake_queue(netdev); | 2247 | netif_wake_queue(netdev); |
2243 | } else { | 2248 | } else if (!test_bit(__E1000_DOWN, &adapter->flags)) { |
2244 | mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1); | 2249 | mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1); |
2245 | } | 2250 | } |
2246 | } | 2251 | } |
@@ -2309,8 +2314,9 @@ static void e1000_watchdog(unsigned long data) | |||
2309 | ew32(TCTL, tctl); | 2314 | ew32(TCTL, tctl); |
2310 | 2315 | ||
2311 | netif_carrier_on(netdev); | 2316 | netif_carrier_on(netdev); |
2312 | mod_timer(&adapter->phy_info_timer, | 2317 | if (!test_bit(__E1000_DOWN, &adapter->flags)) |
2313 | round_jiffies(jiffies + 2 * HZ)); | 2318 | mod_timer(&adapter->phy_info_timer, |
2319 | round_jiffies(jiffies + 2 * HZ)); | ||
2314 | adapter->smartspeed = 0; | 2320 | adapter->smartspeed = 0; |
2315 | } | 2321 | } |
2316 | } else { | 2322 | } else { |
@@ -2320,8 +2326,10 @@ static void e1000_watchdog(unsigned long data) | |||
2320 | printk(KERN_INFO "e1000: %s NIC Link is Down\n", | 2326 | printk(KERN_INFO "e1000: %s NIC Link is Down\n", |
2321 | netdev->name); | 2327 | netdev->name); |
2322 | netif_carrier_off(netdev); | 2328 | netif_carrier_off(netdev); |
2323 | mod_timer(&adapter->phy_info_timer, | 2329 | |
2324 | round_jiffies(jiffies + 2 * HZ)); | 2330 | if (!test_bit(__E1000_DOWN, &adapter->flags)) |
2331 | mod_timer(&adapter->phy_info_timer, | ||
2332 | round_jiffies(jiffies + 2 * HZ)); | ||
2325 | } | 2333 | } |
2326 | 2334 | ||
2327 | e1000_smartspeed(adapter); | 2335 | e1000_smartspeed(adapter); |
@@ -2361,7 +2369,9 @@ static void e1000_watchdog(unsigned long data) | |||
2361 | adapter->detect_tx_hung = true; | 2369 | adapter->detect_tx_hung = true; |
2362 | 2370 | ||
2363 | /* Reset the timer */ | 2371 | /* Reset the timer */ |
2364 | mod_timer(&adapter->watchdog_timer, round_jiffies(jiffies + 2 * HZ)); | 2372 | if (!test_bit(__E1000_DOWN, &adapter->flags)) |
2373 | mod_timer(&adapter->watchdog_timer, | ||
2374 | round_jiffies(jiffies + 2 * HZ)); | ||
2365 | } | 2375 | } |
2366 | 2376 | ||
2367 | enum latency_range { | 2377 | enum latency_range { |
@@ -2977,7 +2987,9 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, | |||
2977 | if (unlikely(hw->mac_type == e1000_82547)) { | 2987 | if (unlikely(hw->mac_type == e1000_82547)) { |
2978 | if (unlikely(e1000_82547_fifo_workaround(adapter, skb))) { | 2988 | if (unlikely(e1000_82547_fifo_workaround(adapter, skb))) { |
2979 | netif_stop_queue(netdev); | 2989 | netif_stop_queue(netdev); |
2980 | mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1); | 2990 | if (!test_bit(__E1000_DOWN, &adapter->flags)) |
2991 | mod_timer(&adapter->tx_fifo_stall_timer, | ||
2992 | jiffies + 1); | ||
2981 | return NETDEV_TX_BUSY; | 2993 | return NETDEV_TX_BUSY; |
2982 | } | 2994 | } |
2983 | } | 2995 | } |