aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-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