Commit 23f333a2bfafba80339315b724808982a9de57d9
1 parent
6e07ebd84e
Exists in
master
and in
7 other branches
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
- drivers/net/atlx/atl2.c
- drivers/net/bcm63xx_enet.c
- drivers/net/bnx2.c
- drivers/net/cassini.c
- drivers/net/cxgb3/cxgb3_main.c
- drivers/net/e1000e/netdev.c
- drivers/net/enic/enic_main.c
- drivers/net/ibm_newemac/core.c
- drivers/net/irda/mcs7780.c
- drivers/net/ixgb/ixgb_main.c
- drivers/net/ixgbevf/ixgbevf_main.c
- drivers/net/mv643xx_eth.c
- drivers/net/myri10ge/myri10ge.c
- drivers/net/niu.c
- drivers/net/pxa168_eth.c
- drivers/net/r8169.c
- drivers/net/s2io.c
- drivers/net/sis190.c
- drivers/net/tg3.c
- drivers/net/usb/sierra_net.c
- drivers/net/usb/usbnet.c
- drivers/net/vmxnet3/vmxnet3_drv.c
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); |
drivers/net/bnx2.c
... | ... | @@ -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
drivers/net/ibm_newemac/core.c
drivers/net/irda/mcs7780.c
drivers/net/ixgb/ixgb_main.c
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
drivers/net/myri10ge/myri10ge.c
drivers/net/niu.c
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; |
drivers/net/r8169.c
drivers/net/s2io.c
... | ... | @@ -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); |
drivers/net/tg3.c
... | ... | @@ -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); |