Commit 23f333a2bfafba80339315b724808982a9de57d9

Authored by Tejun Heo
1 parent 6e07ebd84e

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

Showing 23 changed files with 36 additions and 34 deletions Side-by-side Diff

drivers/net/8139too.c
... ... @@ -1092,10 +1092,11 @@
1092 1092 static void __devexit rtl8139_remove_one (struct pci_dev *pdev)
1093 1093 {
1094 1094 struct net_device *dev = pci_get_drvdata (pdev);
  1095 + struct rtl8139_private *tp = netdev_priv(dev);
1095 1096  
1096 1097 assert (dev != NULL);
1097 1098  
1098   - flush_scheduled_work();
  1099 + cancel_delayed_work_sync(&tp->thread);
1099 1100  
1100 1101 unregister_netdev (dev);
1101 1102  
drivers/net/atlx/atl2.c
... ... @@ -1504,8 +1504,8 @@
1504 1504  
1505 1505 del_timer_sync(&adapter->watchdog_timer);
1506 1506 del_timer_sync(&adapter->phy_config_timer);
1507   -
1508   - flush_scheduled_work();
  1507 + cancel_work_sync(&adapter->reset_task);
  1508 + cancel_work_sync(&adapter->link_chg_task);
1509 1509  
1510 1510 unregister_netdev(netdev);
1511 1511  
drivers/net/bcm63xx_enet.c
... ... @@ -1097,7 +1097,7 @@
1097 1097 enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->tx_chan));
1098 1098  
1099 1099 /* make sure no mib update is scheduled */
1100   - flush_scheduled_work();
  1100 + cancel_work_sync(&priv->mib_update_task);
1101 1101  
1102 1102 /* disable dma & mac */
1103 1103 bcm_enet_disable_dma(priv, priv->tx_chan);
... ... @@ -8393,7 +8393,7 @@
8393 8393 struct net_device *dev = pci_get_drvdata(pdev);
8394 8394 struct bnx2 *bp = netdev_priv(dev);
8395 8395  
8396   - flush_scheduled_work();
  8396 + cancel_work_sync(&bp->reset_task);
8397 8397  
8398 8398 unregister_netdev(dev);
8399 8399  
... ... @@ -8431,7 +8431,7 @@
8431 8431 if (!netif_running(dev))
8432 8432 return 0;
8433 8433  
8434   - flush_scheduled_work();
  8434 + cancel_work_sync(&bp->reset_task);
8435 8435 bnx2_netif_stop(bp, true);
8436 8436 netif_device_detach(dev);
8437 8437 del_timer_sync(&bp->timer);
drivers/net/cassini.c
... ... @@ -3880,7 +3880,7 @@
3880 3880 schedule_work(&cp->reset_task);
3881 3881 #endif
3882 3882  
3883   - flush_scheduled_work();
  3883 + flush_work_sync(&cp->reset_task);
3884 3884 return 0;
3885 3885 }
3886 3886  
... ... @@ -5177,7 +5177,7 @@
5177 5177 vfree(cp->fw_data);
5178 5178  
5179 5179 mutex_lock(&cp->pm_mutex);
5180   - flush_scheduled_work();
  5180 + cancel_work_sync(&cp->reset_task);
5181 5181 if (cp->hw_running)
5182 5182 cas_shutdown(cp);
5183 5183 mutex_unlock(&cp->pm_mutex);
drivers/net/cxgb3/cxgb3_main.c
... ... @@ -1359,6 +1359,7 @@
1359 1359 static int offload_close(struct t3cdev *tdev)
1360 1360 {
1361 1361 struct adapter *adapter = tdev2adap(tdev);
  1362 + struct t3c_data *td = T3C_DATA(tdev);
1362 1363  
1363 1364 if (!test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map))
1364 1365 return 0;
... ... @@ -1369,7 +1370,7 @@
1369 1370 sysfs_remove_group(&tdev->lldev->dev.kobj, &offload_attr_group);
1370 1371  
1371 1372 /* Flush work scheduled while releasing TIDs */
1372   - flush_scheduled_work();
  1373 + flush_work_sync(&td->tid_release_task);
1373 1374  
1374 1375 tdev->lldev = NULL;
1375 1376 cxgb3_set_dummy_ops(tdev);
drivers/net/e1000e/netdev.c
... ... @@ -6028,8 +6028,8 @@
6028 6028 bool down = test_bit(__E1000_DOWN, &adapter->state);
6029 6029  
6030 6030 /*
6031   - * flush_scheduled work may reschedule our watchdog task, so
6032   - * explicitly disable watchdog tasks from being rescheduled
  6031 + * The timers may be rescheduled, so explicitly disable them
  6032 + * from being rescheduled.
6033 6033 */
6034 6034 if (!down)
6035 6035 set_bit(__E1000_DOWN, &adapter->state);
6036 6036  
... ... @@ -6040,8 +6040,8 @@
6040 6040 cancel_work_sync(&adapter->watchdog_task);
6041 6041 cancel_work_sync(&adapter->downshift_task);
6042 6042 cancel_work_sync(&adapter->update_phy_task);
  6043 + cancel_work_sync(&adapter->led_blink_task);
6043 6044 cancel_work_sync(&adapter->print_hang_task);
6044   - flush_scheduled_work();
6045 6045  
6046 6046 if (!(netdev->flags & IFF_UP))
6047 6047 e1000_power_down_phy(adapter);
drivers/net/enic/enic_main.c
... ... @@ -2834,7 +2834,7 @@
2834 2834 if (netdev) {
2835 2835 struct enic *enic = netdev_priv(netdev);
2836 2836  
2837   - flush_scheduled_work();
  2837 + cancel_work_sync(&enic->reset);
2838 2838 unregister_netdev(netdev);
2839 2839 enic_dev_deinit(enic);
2840 2840 vnic_dev_close(enic->vdev);
drivers/net/ibm_newemac/core.c
... ... @@ -2950,7 +2950,7 @@
2950 2950  
2951 2951 unregister_netdev(dev->ndev);
2952 2952  
2953   - flush_scheduled_work();
  2953 + cancel_work_sync(&dev->reset_work);
2954 2954  
2955 2955 if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
2956 2956 tah_detach(dev->tah_dev, dev->tah_port);
drivers/net/irda/mcs7780.c
... ... @@ -959,7 +959,7 @@
959 959 if (!mcs)
960 960 return;
961 961  
962   - flush_scheduled_work();
  962 + cancel_work_sync(&mcs->work);
963 963  
964 964 unregister_netdev(mcs->netdev);
965 965 free_netdev(mcs->netdev);
drivers/net/ixgb/ixgb_main.c
... ... @@ -527,7 +527,7 @@
527 527 struct net_device *netdev = pci_get_drvdata(pdev);
528 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 532 unregister_netdev(netdev);
533 533  
drivers/net/ixgbevf/ixgbevf_main.c
... ... @@ -3484,9 +3484,8 @@
3484 3484  
3485 3485 del_timer_sync(&adapter->watchdog_timer);
3486 3486  
  3487 + cancel_work_sync(&adapter->reset_task);
3487 3488 cancel_work_sync(&adapter->watchdog_task);
3488   -
3489   - flush_scheduled_work();
3490 3489  
3491 3490 if (adapter->netdev_registered) {
3492 3491 unregister_netdev(netdev);
drivers/net/mv643xx_eth.c
... ... @@ -2978,7 +2978,7 @@
2978 2978 unregister_netdev(mp->dev);
2979 2979 if (mp->phy != NULL)
2980 2980 phy_detach(mp->phy);
2981   - flush_scheduled_work();
  2981 + cancel_work_sync(&mp->tx_timeout_task);
2982 2982 free_netdev(mp->dev);
2983 2983  
2984 2984 platform_set_drvdata(pdev, NULL);
drivers/net/myri10ge/myri10ge.c
... ... @@ -4067,7 +4067,7 @@
4067 4067 if (mgp == NULL)
4068 4068 return;
4069 4069  
4070   - flush_scheduled_work();
  4070 + cancel_work_sync(&mgp->watchdog_work);
4071 4071 netdev = mgp->dev;
4072 4072 unregister_netdev(netdev);
4073 4073  
... ... @@ -9917,7 +9917,7 @@
9917 9917 if (!netif_running(dev))
9918 9918 return 0;
9919 9919  
9920   - flush_scheduled_work();
  9920 + flush_work_sync(&np->reset_task);
9921 9921 niu_netif_stop(np);
9922 9922  
9923 9923 del_timer_sync(&np->timer);
drivers/net/pxa168_eth.c
... ... @@ -1602,7 +1602,7 @@
1602 1602 mdiobus_unregister(pep->smi_bus);
1603 1603 mdiobus_free(pep->smi_bus);
1604 1604 unregister_netdev(dev);
1605   - flush_scheduled_work();
  1605 + cancel_work_sync(&pep->tx_timeout_task);
1606 1606 free_netdev(dev);
1607 1607 platform_set_drvdata(pdev, NULL);
1608 1608 return 0;
... ... @@ -3240,7 +3240,7 @@
3240 3240 struct net_device *dev = pci_get_drvdata(pdev);
3241 3241 struct rtl8169_private *tp = netdev_priv(dev);
3242 3242  
3243   - flush_scheduled_work();
  3243 + cancel_delayed_work_sync(&tp->task);
3244 3244  
3245 3245 unregister_netdev(dev);
3246 3246  
... ... @@ -8341,9 +8341,11 @@
8341 8341 return;
8342 8342 }
8343 8343  
8344   - flush_scheduled_work();
8345   -
8346 8344 sp = netdev_priv(dev);
  8345 +
  8346 + cancel_work_sync(&sp->rst_timer_task);
  8347 + cancel_work_sync(&sp->set_link_task);
  8348 +
8347 8349 unregister_netdev(dev);
8348 8350  
8349 8351 free_shared_mem(sp);
drivers/net/sis190.c
... ... @@ -1915,9 +1915,10 @@
1915 1915 static void __devexit sis190_remove_one(struct pci_dev *pdev)
1916 1916 {
1917 1917 struct net_device *dev = pci_get_drvdata(pdev);
  1918 + struct sis190_private *tp = netdev_priv(dev);
1918 1919  
1919 1920 sis190_mii_remove(dev);
1920   - flush_scheduled_work();
  1921 + cancel_work_sync(&tp->phy_task);
1921 1922 unregister_netdev(dev);
1922 1923 sis190_release_board(pdev);
1923 1924 pci_set_drvdata(pdev, NULL);
... ... @@ -15034,7 +15034,7 @@
15034 15034 if (tp->fw)
15035 15035 release_firmware(tp->fw);
15036 15036  
15037   - flush_scheduled_work();
  15037 + cancel_work_sync(&tp->reset_task);
15038 15038  
15039 15039 if (tp->tg3_flags3 & TG3_FLG3_USE_PHYLIB) {
15040 15040 tg3_phy_fini(tp);
... ... @@ -15073,7 +15073,7 @@
15073 15073 if (!netif_running(dev))
15074 15074 return 0;
15075 15075  
15076   - flush_scheduled_work();
  15076 + flush_work_sync(&tp->reset_task);
15077 15077 tg3_phy_stop(tp);
15078 15078 tg3_netif_stop(tp);
15079 15079  
drivers/net/usb/sierra_net.c
... ... @@ -802,10 +802,9 @@
802 802  
803 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 806 del_timer_sync(&priv->sync_timer);
807   -
808   - flush_scheduled_work();
  807 + cancel_work_sync(&priv->sierra_net_kevent);
809 808  
810 809 /* tell modem we are going away */
811 810 status = sierra_net_send_cmd(dev, priv->shdwn_msg,
drivers/net/usb/usbnet.c
... ... @@ -1248,8 +1248,7 @@
1248 1248 net = dev->net;
1249 1249 unregister_netdev (net);
1250 1250  
1251   - /* we don't hold rtnl here ... */
1252   - flush_scheduled_work ();
  1251 + cancel_work_sync(&dev->kevent);
1253 1252  
1254 1253 if (dev->driver_info->unbind)
1255 1254 dev->driver_info->unbind (dev, intf);
drivers/net/vmxnet3/vmxnet3_drv.c
... ... @@ -3069,7 +3069,7 @@
3069 3069 #endif
3070 3070 num_rx_queues = 1;
3071 3071  
3072   - flush_scheduled_work();
  3072 + cancel_work_sync(&adapter->work);
3073 3073  
3074 3074 unregister_netdev(netdev);
3075 3075