···6325632563266326 fail:63276327 if (dev) {63286328- if (registered) {63296329- unregister_ieee80211(priv->ieee);63286328+ if (registered)63306329 unregister_netdev(dev);63316331- }6332633063336331 ipw2100_hw_stop_adapter(priv);63346332···63836385 /* Unregister the device first - this results in close()63846386 * being called if the device is open. If we free storage63856387 * first, then close() will crash. */63866386- unregister_ieee80211(priv->ieee);63876388 unregister_netdev(dev);6388638963896390 /* ipw2100_down will ensure that there is no more pending work
···815815816816 mutex_init(&rt2x00dev->csr_mutex);817817818818+ set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);819819+818820 /*819821 * Make room for rt2x00_intf inside the per-interface820822 * structure ieee80211_vif.···872870 rt2x00link_register(rt2x00dev);873871 rt2x00leds_register(rt2x00dev);874872 rt2x00debug_register(rt2x00dev);875875-876876- set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);877873878874 return 0;879875
+7-4
drivers/net/wireless/rt2x00/rt2x00link.c
···362362363363 rt2x00link_reset_tuner(rt2x00dev, false);364364365365- ieee80211_queue_delayed_work(rt2x00dev->hw,366366- &link->work, LINK_TUNE_INTERVAL);365365+ if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))366366+ ieee80211_queue_delayed_work(rt2x00dev->hw,367367+ &link->work, LINK_TUNE_INTERVAL);367368}368369369370void rt2x00link_stop_tuner(struct rt2x00_dev *rt2x00dev)···470469 * Increase tuner counter, and reschedule the next link tuner run.471470 */472471 link->count++;473473- ieee80211_queue_delayed_work(rt2x00dev->hw,474474- &link->work, LINK_TUNE_INTERVAL);472472+473473+ if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))474474+ ieee80211_queue_delayed_work(rt2x00dev->hw,475475+ &link->work, LINK_TUNE_INTERVAL);475476}476477477478void rt2x00link_register(struct rt2x00_dev *rt2x00dev)
+8-1
drivers/net/wireless/rt2x00/rt2x00usb.c
···4747 (requesttype == USB_VENDOR_REQUEST_IN) ?4848 usb_rcvctrlpipe(usb_dev, 0) : usb_sndctrlpipe(usb_dev, 0);49495050+ if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))5151+ return -ENODEV;50525153 for (i = 0; i < REGISTER_BUSY_COUNT; i++) {5254 status = usb_control_msg(usb_dev, pipe, request, requesttype,···6260 * -ENODEV: Device has disappeared, no point continuing.6361 * All other errors: Try again.6462 */6565- else if (status == -ENODEV)6363+ else if (status == -ENODEV) {6464+ clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);6665 break;6666+ }6767 }68686969 ERROR(rt2x00dev,···164160 u32 *reg)165161{166162 unsigned int i;163163+164164+ if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))165165+ return -ENODEV;167166168167 for (i = 0; i < REGISTER_BUSY_COUNT; i++) {169168 rt2x00usb_register_read_lock(rt2x00dev, offset, reg);
+2-2
drivers/net/wireless/rtl818x/rtl8187_leds.c
···210210211211 /* turn the LED off before exiting */212212 ieee80211_queue_delayed_work(dev, &priv->led_off, 0);213213- cancel_delayed_work_sync(&priv->led_off);214214- cancel_delayed_work_sync(&priv->led_on);215213 rtl8187_unregister_led(&priv->led_rx);216214 rtl8187_unregister_led(&priv->led_tx);215215+ cancel_delayed_work_sync(&priv->led_off);216216+ cancel_delayed_work_sync(&priv->led_on);217217}218218#endif /* def CONFIG_RTL8187_LED */219219