diff options
| -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 4d6677e4f9f..7af3255a8e9 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 | } |
