Skip to content

Commit 23f333a

Browse files
committed
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
1 parent 6e07ebd commit 23f333a

File tree

23 files changed

+36
-34
lines changed

23 files changed

+36
-34
lines changed

drivers/net/8139too.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1092,10 +1092,11 @@ static int __devinit rtl8139_init_one (struct pci_dev *pdev,
10921092
static void __devexit rtl8139_remove_one (struct pci_dev *pdev)
10931093
{
10941094
struct net_device *dev = pci_get_drvdata (pdev);
1095+
struct rtl8139_private *tp = netdev_priv(dev);
10951096

10961097
assert (dev != NULL);
10971098

1098-
flush_scheduled_work();
1099+
cancel_delayed_work_sync(&tp->thread);
10991100

11001101
unregister_netdev (dev);
11011102

drivers/net/atlx/atl2.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1504,8 +1504,8 @@ static void __devexit atl2_remove(struct pci_dev *pdev)
15041504

15051505
del_timer_sync(&adapter->watchdog_timer);
15061506
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);
15091509

15101510
unregister_netdev(netdev);
15111511

drivers/net/bcm63xx_enet.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1097,7 +1097,7 @@ static int bcm_enet_stop(struct net_device *dev)
10971097
enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->tx_chan));
10981098

10991099
/* make sure no mib update is scheduled */
1100-
flush_scheduled_work();
1100+
cancel_work_sync(&priv->mib_update_task);
11011101

11021102
/* disable dma & mac */
11031103
bcm_enet_disable_dma(priv, priv->tx_chan);

drivers/net/bnx2.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8393,7 +8393,7 @@ bnx2_remove_one(struct pci_dev *pdev)
83938393
struct net_device *dev = pci_get_drvdata(pdev);
83948394
struct bnx2 *bp = netdev_priv(dev);
83958395

8396-
flush_scheduled_work();
8396+
cancel_work_sync(&bp->reset_task);
83978397

83988398
unregister_netdev(dev);
83998399

@@ -8431,7 +8431,7 @@ bnx2_suspend(struct pci_dev *pdev, pm_message_t state)
84318431
if (!netif_running(dev))
84328432
return 0;
84338433

8434-
flush_scheduled_work();
8434+
cancel_work_sync(&bp->reset_task);
84358435
bnx2_netif_stop(bp, true);
84368436
netif_device_detach(dev);
84378437
del_timer_sync(&bp->timer);

drivers/net/cassini.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3880,7 +3880,7 @@ static int cas_change_mtu(struct net_device *dev, int new_mtu)
38803880
schedule_work(&cp->reset_task);
38813881
#endif
38823882

3883-
flush_scheduled_work();
3883+
flush_work_sync(&cp->reset_task);
38843884
return 0;
38853885
}
38863886

@@ -5177,7 +5177,7 @@ static void __devexit cas_remove_one(struct pci_dev *pdev)
51775177
vfree(cp->fw_data);
51785178

51795179
mutex_lock(&cp->pm_mutex);
5180-
flush_scheduled_work();
5180+
cancel_work_sync(&cp->reset_task);
51815181
if (cp->hw_running)
51825182
cas_shutdown(cp);
51835183
mutex_unlock(&cp->pm_mutex);

drivers/net/cxgb3/cxgb3_main.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1359,6 +1359,7 @@ static int offload_open(struct net_device *dev)
13591359
static int offload_close(struct t3cdev *tdev)
13601360
{
13611361
struct adapter *adapter = tdev2adap(tdev);
1362+
struct t3c_data *td = T3C_DATA(tdev);
13621363

13631364
if (!test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map))
13641365
return 0;
@@ -1369,7 +1370,7 @@ static int offload_close(struct t3cdev *tdev)
13691370
sysfs_remove_group(&tdev->lldev->dev.kobj, &offload_attr_group);
13701371

13711372
/* Flush work scheduled while releasing TIDs */
1372-
flush_scheduled_work();
1373+
flush_work_sync(&td->tid_release_task);
13731374

13741375
tdev->lldev = NULL;
13751376
cxgb3_set_dummy_ops(tdev);

drivers/net/e1000e/netdev.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6028,8 +6028,8 @@ static void __devexit e1000_remove(struct pci_dev *pdev)
60286028
bool down = test_bit(__E1000_DOWN, &adapter->state);
60296029

60306030
/*
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.
60336033
*/
60346034
if (!down)
60356035
set_bit(__E1000_DOWN, &adapter->state);
@@ -6040,8 +6040,8 @@ static void __devexit e1000_remove(struct pci_dev *pdev)
60406040
cancel_work_sync(&adapter->watchdog_task);
60416041
cancel_work_sync(&adapter->downshift_task);
60426042
cancel_work_sync(&adapter->update_phy_task);
6043+
cancel_work_sync(&adapter->led_blink_task);
60436044
cancel_work_sync(&adapter->print_hang_task);
6044-
flush_scheduled_work();
60456045

60466046
if (!(netdev->flags & IFF_UP))
60476047
e1000_power_down_phy(adapter);

drivers/net/enic/enic_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2834,7 +2834,7 @@ static void __devexit enic_remove(struct pci_dev *pdev)
28342834
if (netdev) {
28352835
struct enic *enic = netdev_priv(netdev);
28362836

2837-
flush_scheduled_work();
2837+
cancel_work_sync(&enic->reset);
28382838
unregister_netdev(netdev);
28392839
enic_dev_deinit(enic);
28402840
vnic_dev_close(enic->vdev);

drivers/net/ibm_newemac/core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2950,7 +2950,7 @@ static int __devexit emac_remove(struct platform_device *ofdev)
29502950

29512951
unregister_netdev(dev->ndev);
29522952

2953-
flush_scheduled_work();
2953+
cancel_work_sync(&dev->reset_work);
29542954

29552955
if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
29562956
tah_detach(dev->tah_dev, dev->tah_port);

drivers/net/irda/mcs7780.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -959,7 +959,7 @@ static void mcs_disconnect(struct usb_interface *intf)
959959
if (!mcs)
960960
return;
961961

962-
flush_scheduled_work();
962+
cancel_work_sync(&mcs->work);
963963

964964
unregister_netdev(mcs->netdev);
965965
free_netdev(mcs->netdev);

0 commit comments

Comments
 (0)