aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2010-12-12 10:45:14 -0500
committerTejun Heo <tj@kernel.org>2010-12-12 10:45:14 -0500
commit23f333a2bfafba80339315b724808982a9de57d9 (patch)
tree55819e6a8eeb9c2d34b42c77e7e38f7f6571baf9 /drivers/net
parent6e07ebd84eef00be9e169a6d15a0bc20b06578fa (diff)
drivers/net: don't use flush_scheduled_work()
flush_scheduled_work() is on its way out. This patch contains simple conversions to replace flush_scheduled_work() usage with direct cancels and flushes. Directly cancel the used works on driver detach and flush them in other cases. The conversions are mostly straight forward and the only dangers are, * Forgetting to cancel/flush one or more used works. * Cancelling when a work should be flushed (ie. the work must be executed once scheduled whether the driver is detaching or not). I've gone over the changes multiple times but it would be much appreciated if you can review with the above points in mind. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: "David S. Miller" <davem@davemloft.net> Cc: Jay Cliburn <jcliburn@gmail.com> Cc: Michael Chan <mchan@broadcom.com> Cc: Divy Le Ray <divy@chelsio.com> Cc: e1000-devel@lists.sourceforge.net Cc: Vasanthy Kolluri <vkolluri@cisco.com> Cc: Samuel Ortiz <samuel@sortiz.org> Cc: Lennert Buytenhek <buytenh@wantstofly.org> Cc: Andrew Gallatin <gallatin@myri.com> Cc: Francois Romieu <romieu@fr.zoreil.com> Cc: Ramkrishna Vepa <ramkrishna.vepa@exar.com> Cc: Matt Carlson <mcarlson@broadcom.com> Cc: David Brownell <dbrownell@users.sourceforge.net> Cc: Shreyas Bhatewara <sbhatewara@vmware.com> Cc: netdev@vger.kernel.org
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/8139too.c3
-rw-r--r--drivers/net/atlx/atl2.c4
-rw-r--r--drivers/net/bcm63xx_enet.c2
-rw-r--r--drivers/net/bnx2.c4
-rw-r--r--drivers/net/cassini.c4
-rw-r--r--drivers/net/cxgb3/cxgb3_main.c3
-rw-r--r--drivers/net/e1000e/netdev.c6
-rw-r--r--drivers/net/enic/enic_main.c2
-rw-r--r--drivers/net/ibm_newemac/core.c2
-rw-r--r--drivers/net/irda/mcs7780.c2
-rw-r--r--drivers/net/ixgb/ixgb_main.c2
-rw-r--r--drivers/net/ixgbevf/ixgbevf_main.c3
-rw-r--r--drivers/net/mv643xx_eth.c2
-rw-r--r--drivers/net/myri10ge/myri10ge.c2
-rw-r--r--drivers/net/niu.c2
-rw-r--r--drivers/net/pxa168_eth.c2
-rw-r--r--drivers/net/r8169.c2
-rw-r--r--drivers/net/s2io.c6
-rw-r--r--drivers/net/sis190.c3
-rw-r--r--drivers/net/tg3.c4
-rw-r--r--drivers/net/usb/sierra_net.c5
-rw-r--r--drivers/net/usb/usbnet.c3
-rw-r--r--drivers/net/vmxnet3/vmxnet3_drv.c2
23 files changed, 36 insertions, 34 deletions
diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c
index f5166dccd8df..98517a373473 100644
--- a/drivers/net/8139too.c
+++ b/drivers/net/8139too.c
@@ -1092,10 +1092,11 @@ err_out:
1092static void __devexit rtl8139_remove_one (struct pci_dev *pdev) 1092static void __devexit rtl8139_remove_one (struct pci_dev *pdev)
1093{ 1093{
1094 struct net_device *dev = pci_get_drvdata (pdev); 1094 struct net_device *dev = pci_get_drvdata (pdev);
1095 struct rtl8139_private *tp = netdev_priv(dev);
1095 1096
1096 assert (dev != NULL); 1097 assert (dev != NULL);
1097 1098
1098 flush_scheduled_work(); 1099 cancel_delayed_work_sync(&tp->thread);
1099 1100
1100 unregister_netdev (dev); 1101 unregister_netdev (dev);
1101 1102
diff --git a/drivers/net/atlx/atl2.c b/drivers/net/atlx/atl2.c
index 35b14bec1207..4e6f4e95a5a0 100644
--- a/drivers/net/atlx/atl2.c
+++ b/drivers/net/atlx/atl2.c
@@ -1504,8 +1504,8 @@ static void __devexit atl2_remove(struct pci_dev *pdev)
1504 1504
1505 del_timer_sync(&adapter->watchdog_timer); 1505 del_timer_sync(&adapter->watchdog_timer);
1506 del_timer_sync(&adapter->phy_config_timer); 1506 del_timer_sync(&adapter->phy_config_timer);
1507 1507 cancel_work_sync(&adapter->reset_task);
1508 flush_scheduled_work(); 1508 cancel_work_sync(&adapter->link_chg_task);
1509 1509
1510 unregister_netdev(netdev); 1510 unregister_netdev(netdev);
1511 1511
diff --git a/drivers/net/bcm63xx_enet.c b/drivers/net/bcm63xx_enet.c
index ecfef240a303..e94a966af418 100644
--- a/drivers/net/bcm63xx_enet.c
+++ b/drivers/net/bcm63xx_enet.c
@@ -1097,7 +1097,7 @@ static int bcm_enet_stop(struct net_device *dev)
1097 enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->tx_chan)); 1097 enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->tx_chan));
1098 1098
1099 /* make sure no mib update is scheduled */ 1099 /* make sure no mib update is scheduled */
1100 flush_scheduled_work(); 1100 cancel_work_sync(&priv->mib_update_task);
1101 1101
1102 /* disable dma & mac */ 1102 /* disable dma & mac */
1103 bcm_enet_disable_dma(priv, priv->tx_chan); 1103 bcm_enet_disable_dma(priv, priv->tx_chan);
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 03209a37883e..5c811f3fa11a 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -8393,7 +8393,7 @@ bnx2_remove_one(struct pci_dev *pdev)
8393 struct net_device *dev = pci_get_drvdata(pdev); 8393 struct net_device *dev = pci_get_drvdata(pdev);
8394 struct bnx2 *bp = netdev_priv(dev); 8394 struct bnx2 *bp = netdev_priv(dev);
8395 8395
8396 flush_scheduled_work(); 8396 cancel_work_sync(&bp->reset_task);
8397 8397
8398 unregister_netdev(dev); 8398 unregister_netdev(dev);
8399 8399
@@ -8431,7 +8431,7 @@ bnx2_suspend(struct pci_dev *pdev, pm_message_t state)
8431 if (!netif_running(dev)) 8431 if (!netif_running(dev))
8432 return 0; 8432 return 0;
8433 8433
8434 flush_scheduled_work(); 8434 cancel_work_sync(&bp->reset_task);
8435 bnx2_netif_stop(bp, true); 8435 bnx2_netif_stop(bp, true);
8436 netif_device_detach(dev); 8436 netif_device_detach(dev);
8437 del_timer_sync(&bp->timer); 8437 del_timer_sync(&bp->timer);
diff --git a/drivers/net/cassini.c b/drivers/net/cassini.c
index d6b6d6aa565a..a8a32bc9aae6 100644
--- a/drivers/net/cassini.c
+++ b/drivers/net/cassini.c
@@ -3880,7 +3880,7 @@ static int cas_change_mtu(struct net_device *dev, int new_mtu)
3880 schedule_work(&cp->reset_task); 3880 schedule_work(&cp->reset_task);
3881#endif 3881#endif
3882 3882
3883 flush_scheduled_work(); 3883 flush_work_sync(&cp->reset_task);
3884 return 0; 3884 return 0;
3885} 3885}
3886 3886
@@ -5177,7 +5177,7 @@ static void __devexit cas_remove_one(struct pci_dev *pdev)
5177 vfree(cp->fw_data); 5177 vfree(cp->fw_data);
5178 5178
5179 mutex_lock(&cp->pm_mutex); 5179 mutex_lock(&cp->pm_mutex);
5180 flush_scheduled_work(); 5180 cancel_work_sync(&cp->reset_task);
5181 if (cp->hw_running) 5181 if (cp->hw_running)
5182 cas_shutdown(cp); 5182 cas_shutdown(cp);
5183 mutex_unlock(&cp->pm_mutex); 5183 mutex_unlock(&cp->pm_mutex);
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index 386461750d0f..4d538a4e9d55 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -1359,6 +1359,7 @@ out:
1359static int offload_close(struct t3cdev *tdev) 1359static int offload_close(struct t3cdev *tdev)
1360{ 1360{
1361 struct adapter *adapter = tdev2adap(tdev); 1361 struct adapter *adapter = tdev2adap(tdev);
1362 struct t3c_data *td = T3C_DATA(tdev);
1362 1363
1363 if (!test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) 1364 if (!test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map))
1364 return 0; 1365 return 0;
@@ -1369,7 +1370,7 @@ static int offload_close(struct t3cdev *tdev)
1369 sysfs_remove_group(&tdev->lldev->dev.kobj, &offload_attr_group); 1370 sysfs_remove_group(&tdev->lldev->dev.kobj, &offload_attr_group);
1370 1371
1371 /* Flush work scheduled while releasing TIDs */ 1372 /* Flush work scheduled while releasing TIDs */
1372 flush_scheduled_work(); 1373 flush_work_sync(&td->tid_release_task);
1373 1374
1374 tdev->lldev = NULL; 1375 tdev->lldev = NULL;
1375 cxgb3_set_dummy_ops(tdev); 1376 cxgb3_set_dummy_ops(tdev);
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 5530d0bdd11a..02d093d1dd5c 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -6028,8 +6028,8 @@ static void __devexit e1000_remove(struct pci_dev *pdev)
6028 bool down = test_bit(__E1000_DOWN, &adapter->state); 6028 bool down = test_bit(__E1000_DOWN, &adapter->state);
6029 6029
6030 /* 6030 /*
6031 * flush_scheduled work may reschedule our watchdog task, so 6031 * The timers may be rescheduled, so explicitly disable them
6032 * explicitly disable watchdog tasks from being rescheduled 6032 * from being rescheduled.
6033 */ 6033 */
6034 if (!down) 6034 if (!down)
6035 set_bit(__E1000_DOWN, &adapter->state); 6035 set_bit(__E1000_DOWN, &adapter->state);
@@ -6040,8 +6040,8 @@ static void __devexit e1000_remove(struct pci_dev *pdev)
6040 cancel_work_sync(&adapter->watchdog_task); 6040 cancel_work_sync(&adapter->watchdog_task);
6041 cancel_work_sync(&adapter->downshift_task); 6041 cancel_work_sync(&adapter->downshift_task);
6042 cancel_work_sync(&adapter->update_phy_task); 6042 cancel_work_sync(&adapter->update_phy_task);
6043 cancel_work_sync(&adapter->led_blink_task);
6043 cancel_work_sync(&adapter->print_hang_task); 6044 cancel_work_sync(&adapter->print_hang_task);
6044 flush_scheduled_work();
6045 6045
6046 if (!(netdev->flags & IFF_UP)) 6046 if (!(netdev->flags & IFF_UP))
6047 e1000_power_down_phy(adapter); 6047 e1000_power_down_phy(adapter);
diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c
index 9befd54ce6e1..77d91381a74d 100644
--- a/drivers/net/enic/enic_main.c
+++ b/drivers/net/enic/enic_main.c
@@ -2834,7 +2834,7 @@ static void __devexit enic_remove(struct pci_dev *pdev)
2834 if (netdev) { 2834 if (netdev) {
2835 struct enic *enic = netdev_priv(netdev); 2835 struct enic *enic = netdev_priv(netdev);
2836 2836
2837 flush_scheduled_work(); 2837 cancel_work_sync(&enic->reset);
2838 unregister_netdev(netdev); 2838 unregister_netdev(netdev);
2839 enic_dev_deinit(enic); 2839 enic_dev_deinit(enic);
2840 vnic_dev_close(enic->vdev); 2840 vnic_dev_close(enic->vdev);
diff --git a/drivers/net/ibm_newemac/core.c b/drivers/net/ibm_newemac/core.c
index 06bb9b799458..8f11d29a5828 100644
--- a/drivers/net/ibm_newemac/core.c
+++ b/drivers/net/ibm_newemac/core.c
@@ -2950,7 +2950,7 @@ static int __devexit emac_remove(struct platform_device *ofdev)
2950 2950
2951 unregister_netdev(dev->ndev); 2951 unregister_netdev(dev->ndev);
2952 2952
2953 flush_scheduled_work(); 2953 cancel_work_sync(&dev->reset_work);
2954 2954
2955 if (emac_has_feature(dev, EMAC_FTR_HAS_TAH)) 2955 if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
2956 tah_detach(dev->tah_dev, dev->tah_port); 2956 tah_detach(dev->tah_dev, dev->tah_port);
diff --git a/drivers/net/irda/mcs7780.c b/drivers/net/irda/mcs7780.c
index 74b20f179cea..cc821de2c966 100644
--- a/drivers/net/irda/mcs7780.c
+++ b/drivers/net/irda/mcs7780.c
@@ -959,7 +959,7 @@ static void mcs_disconnect(struct usb_interface *intf)
959 if (!mcs) 959 if (!mcs)
960 return; 960 return;
961 961
962 flush_scheduled_work(); 962 cancel_work_sync(&mcs->work);
963 963
964 unregister_netdev(mcs->netdev); 964 unregister_netdev(mcs->netdev);
965 free_netdev(mcs->netdev); 965 free_netdev(mcs->netdev);
diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c
index 2e98506d12e3..b021798ef49f 100644
--- a/drivers/net/ixgb/ixgb_main.c
+++ b/drivers/net/ixgb/ixgb_main.c
@@ -527,7 +527,7 @@ ixgb_remove(struct pci_dev *pdev)
527 struct net_device *netdev = pci_get_drvdata(pdev); 527 struct net_device *netdev = pci_get_drvdata(pdev);
528 struct ixgb_adapter *adapter = netdev_priv(netdev); 528 struct ixgb_adapter *adapter = netdev_priv(netdev);
529 529
530 flush_scheduled_work(); 530 cancel_work_sync(&adapter->tx_timeout_task);
531 531
532 unregister_netdev(netdev); 532 unregister_netdev(netdev);
533 533
diff --git a/drivers/net/ixgbevf/ixgbevf_main.c b/drivers/net/ixgbevf/ixgbevf_main.c
index 2216a3c8b12b..809e38ce8a13 100644
--- a/drivers/net/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ixgbevf/ixgbevf_main.c
@@ -3484,10 +3484,9 @@ static void __devexit ixgbevf_remove(struct pci_dev *pdev)
3484 3484
3485 del_timer_sync(&adapter->watchdog_timer); 3485 del_timer_sync(&adapter->watchdog_timer);
3486 3486
3487 cancel_work_sync(&adapter->reset_task);
3487 cancel_work_sync(&adapter->watchdog_task); 3488 cancel_work_sync(&adapter->watchdog_task);
3488 3489
3489 flush_scheduled_work();
3490
3491 if (adapter->netdev_registered) { 3490 if (adapter->netdev_registered) {
3492 unregister_netdev(netdev); 3491 unregister_netdev(netdev);
3493 adapter->netdev_registered = false; 3492 adapter->netdev_registered = false;
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c
index ce31e74a559b..02076e16542a 100644
--- a/drivers/net/mv643xx_eth.c
+++ b/drivers/net/mv643xx_eth.c
@@ -2978,7 +2978,7 @@ static int mv643xx_eth_remove(struct platform_device *pdev)
2978 unregister_netdev(mp->dev); 2978 unregister_netdev(mp->dev);
2979 if (mp->phy != NULL) 2979 if (mp->phy != NULL)
2980 phy_detach(mp->phy); 2980 phy_detach(mp->phy);
2981 flush_scheduled_work(); 2981 cancel_work_sync(&mp->tx_timeout_task);
2982 free_netdev(mp->dev); 2982 free_netdev(mp->dev);
2983 2983
2984 platform_set_drvdata(pdev, NULL); 2984 platform_set_drvdata(pdev, NULL);
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
index 8524cc40ec57..1ce0207e62a9 100644
--- a/drivers/net/myri10ge/myri10ge.c
+++ b/drivers/net/myri10ge/myri10ge.c
@@ -4067,7 +4067,7 @@ static void myri10ge_remove(struct pci_dev *pdev)
4067 if (mgp == NULL) 4067 if (mgp == NULL)
4068 return; 4068 return;
4069 4069
4070 flush_scheduled_work(); 4070 cancel_work_sync(&mgp->watchdog_work);
4071 netdev = mgp->dev; 4071 netdev = mgp->dev;
4072 unregister_netdev(netdev); 4072 unregister_netdev(netdev);
4073 4073
diff --git a/drivers/net/niu.c b/drivers/net/niu.c
index 781e368329f9..f64c42414bd7 100644
--- a/drivers/net/niu.c
+++ b/drivers/net/niu.c
@@ -9917,7 +9917,7 @@ static int niu_suspend(struct pci_dev *pdev, pm_message_t state)
9917 if (!netif_running(dev)) 9917 if (!netif_running(dev))
9918 return 0; 9918 return 0;
9919 9919
9920 flush_scheduled_work(); 9920 flush_work_sync(&np->reset_task);
9921 niu_netif_stop(np); 9921 niu_netif_stop(np);
9922 9922
9923 del_timer_sync(&np->timer); 9923 del_timer_sync(&np->timer);
diff --git a/drivers/net/pxa168_eth.c b/drivers/net/pxa168_eth.c
index 04ed27d0b6be..1b63c8aef121 100644
--- a/drivers/net/pxa168_eth.c
+++ b/drivers/net/pxa168_eth.c
@@ -1602,7 +1602,7 @@ static int pxa168_eth_remove(struct platform_device *pdev)
1602 mdiobus_unregister(pep->smi_bus); 1602 mdiobus_unregister(pep->smi_bus);
1603 mdiobus_free(pep->smi_bus); 1603 mdiobus_free(pep->smi_bus);
1604 unregister_netdev(dev); 1604 unregister_netdev(dev);
1605 flush_scheduled_work(); 1605 cancel_work_sync(&pep->tx_timeout_task);
1606 free_netdev(dev); 1606 free_netdev(dev);
1607 platform_set_drvdata(pdev, NULL); 1607 platform_set_drvdata(pdev, NULL);
1608 return 0; 1608 return 0;
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index 7d33ef4bcb4a..98d792c33877 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -3240,7 +3240,7 @@ static void __devexit rtl8169_remove_one(struct pci_dev *pdev)
3240 struct net_device *dev = pci_get_drvdata(pdev); 3240 struct net_device *dev = pci_get_drvdata(pdev);
3241 struct rtl8169_private *tp = netdev_priv(dev); 3241 struct rtl8169_private *tp = netdev_priv(dev);
3242 3242
3243 flush_scheduled_work(); 3243 cancel_delayed_work_sync(&tp->task);
3244 3244
3245 unregister_netdev(dev); 3245 unregister_netdev(dev);
3246 3246
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c
index 9a1e32fb720b..39c17cecb8b9 100644
--- a/drivers/net/s2io.c
+++ b/drivers/net/s2io.c
@@ -8341,9 +8341,11 @@ static void __devexit s2io_rem_nic(struct pci_dev *pdev)
8341 return; 8341 return;
8342 } 8342 }
8343 8343
8344 flush_scheduled_work();
8345
8346 sp = netdev_priv(dev); 8344 sp = netdev_priv(dev);
8345
8346 cancel_work_sync(&sp->rst_timer_task);
8347 cancel_work_sync(&sp->set_link_task);
8348
8347 unregister_netdev(dev); 8349 unregister_netdev(dev);
8348 8350
8349 free_shared_mem(sp); 8351 free_shared_mem(sp);
diff --git a/drivers/net/sis190.c b/drivers/net/sis190.c
index a5d6a6bd0c1a..3406ed870917 100644
--- a/drivers/net/sis190.c
+++ b/drivers/net/sis190.c
@@ -1915,9 +1915,10 @@ err_release_board:
1915static void __devexit sis190_remove_one(struct pci_dev *pdev) 1915static void __devexit sis190_remove_one(struct pci_dev *pdev)
1916{ 1916{
1917 struct net_device *dev = pci_get_drvdata(pdev); 1917 struct net_device *dev = pci_get_drvdata(pdev);
1918 struct sis190_private *tp = netdev_priv(dev);
1918 1919
1919 sis190_mii_remove(dev); 1920 sis190_mii_remove(dev);
1920 flush_scheduled_work(); 1921 cancel_work_sync(&tp->phy_task);
1921 unregister_netdev(dev); 1922 unregister_netdev(dev);
1922 sis190_release_board(pdev); 1923 sis190_release_board(pdev);
1923 pci_set_drvdata(pdev, NULL); 1924 pci_set_drvdata(pdev, NULL);
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 5faa87d86c66..57e19fb1324f 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -15034,7 +15034,7 @@ static void __devexit tg3_remove_one(struct pci_dev *pdev)
15034 if (tp->fw) 15034 if (tp->fw)
15035 release_firmware(tp->fw); 15035 release_firmware(tp->fw);
15036 15036
15037 flush_scheduled_work(); 15037 cancel_work_sync(&tp->reset_task);
15038 15038
15039 if (tp->tg3_flags3 & TG3_FLG3_USE_PHYLIB) { 15039 if (tp->tg3_flags3 & TG3_FLG3_USE_PHYLIB) {
15040 tg3_phy_fini(tp); 15040 tg3_phy_fini(tp);
@@ -15073,7 +15073,7 @@ static int tg3_suspend(struct pci_dev *pdev, pm_message_t state)
15073 if (!netif_running(dev)) 15073 if (!netif_running(dev))
15074 return 0; 15074 return 0;
15075 15075
15076 flush_scheduled_work(); 15076 flush_work_sync(&tp->reset_task);
15077 tg3_phy_stop(tp); 15077 tg3_phy_stop(tp);
15078 tg3_netif_stop(tp); 15078 tg3_netif_stop(tp);
15079 15079
diff --git a/drivers/net/usb/sierra_net.c b/drivers/net/usb/sierra_net.c
index d1ac15c95faf..ed1b43210584 100644
--- a/drivers/net/usb/sierra_net.c
+++ b/drivers/net/usb/sierra_net.c
@@ -802,10 +802,9 @@ static void sierra_net_unbind(struct usbnet *dev, struct usb_interface *intf)
802 802
803 dev_dbg(&dev->udev->dev, "%s", __func__); 803 dev_dbg(&dev->udev->dev, "%s", __func__);
804 804
805 /* Kill the timer then flush the work queue */ 805 /* kill the timer and work */
806 del_timer_sync(&priv->sync_timer); 806 del_timer_sync(&priv->sync_timer);
807 807 cancel_work_sync(&priv->sierra_net_kevent);
808 flush_scheduled_work();
809 808
810 /* tell modem we are going away */ 809 /* tell modem we are going away */
811 status = sierra_net_send_cmd(dev, priv->shdwn_msg, 810 status = sierra_net_send_cmd(dev, priv->shdwn_msg,
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index cff74b81a7d2..ed9a41643ff4 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1248,8 +1248,7 @@ void usbnet_disconnect (struct usb_interface *intf)
1248 net = dev->net; 1248 net = dev->net;
1249 unregister_netdev (net); 1249 unregister_netdev (net);
1250 1250
1251 /* we don't hold rtnl here ... */ 1251 cancel_work_sync(&dev->kevent);
1252 flush_scheduled_work ();
1253 1252
1254 if (dev->driver_info->unbind) 1253 if (dev->driver_info->unbind)
1255 dev->driver_info->unbind (dev, intf); 1254 dev->driver_info->unbind (dev, intf);
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index 65860a998321..0169be7694a9 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -3069,7 +3069,7 @@ vmxnet3_remove_device(struct pci_dev *pdev)
3069#endif 3069#endif
3070 num_rx_queues = 1; 3070 num_rx_queues = 1;
3071 3071
3072 flush_scheduled_work(); 3072 cancel_work_sync(&adapter->work);
3073 3073
3074 unregister_netdev(netdev); 3074 unregister_netdev(netdev);
3075 3075