Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6

+25 -25
+1 -4
drivers/net/wireless/ipw2x00/ipw2100.c
··· 6325 6325 6326 6326 fail: 6327 6327 if (dev) { 6328 - if (registered) { 6329 - unregister_ieee80211(priv->ieee); 6328 + if (registered) 6330 6329 unregister_netdev(dev); 6331 - } 6332 6330 6333 6331 ipw2100_hw_stop_adapter(priv); 6334 6332 ··· 6383 6385 /* Unregister the device first - this results in close() 6384 6386 * being called if the device is open. If we free storage 6385 6387 * first, then close() will crash. */ 6386 - unregister_ieee80211(priv->ieee); 6387 6388 unregister_netdev(dev); 6388 6389 6389 6390 /* ipw2100_down will ensure that there is no more pending work
-2
drivers/net/wireless/ipw2x00/ipw2200.c
··· 11821 11821 if (err) { 11822 11822 IPW_ERROR("Failed to register promiscuous network " 11823 11823 "device (error %d).\n", err); 11824 - unregister_ieee80211(priv->ieee); 11825 11824 unregister_netdev(priv->net_dev); 11826 11825 goto out_remove_sysfs; 11827 11826 } ··· 11871 11872 11872 11873 mutex_unlock(&priv->mutex); 11873 11874 11874 - unregister_ieee80211(priv->ieee); 11875 11875 unregister_netdev(priv->net_dev); 11876 11876 11877 11877 if (priv->rxq) {
-1
drivers/net/wireless/ipw2x00/libipw.h
··· 1020 1020 /* ieee80211.c */ 1021 1021 extern void free_ieee80211(struct net_device *dev, int monitor); 1022 1022 extern struct net_device *alloc_ieee80211(int sizeof_priv, int monitor); 1023 - extern void unregister_ieee80211(struct libipw_device *ieee); 1024 1023 extern int libipw_change_mtu(struct net_device *dev, int new_mtu); 1025 1024 1026 1025 extern void libipw_networks_age(struct libipw_device *ieee,
+5 -9
drivers/net/wireless/ipw2x00/libipw_module.c
··· 235 235 libipw_networks_free(ieee); 236 236 237 237 /* free cfg80211 resources */ 238 - if (!monitor) 238 + if (!monitor) { 239 + wiphy_unregister(ieee->wdev.wiphy); 240 + kfree(ieee->a_band.channels); 241 + kfree(ieee->bg_band.channels); 239 242 wiphy_free(ieee->wdev.wiphy); 243 + } 240 244 241 245 free_netdev(dev); 242 - } 243 - 244 - void unregister_ieee80211(struct libipw_device *ieee) 245 - { 246 - wiphy_unregister(ieee->wdev.wiphy); 247 - kfree(ieee->a_band.channels); 248 - kfree(ieee->bg_band.channels); 249 246 } 250 247 251 248 #ifdef CONFIG_LIBIPW_DEBUG ··· 330 333 331 334 EXPORT_SYMBOL(alloc_ieee80211); 332 335 EXPORT_SYMBOL(free_ieee80211); 333 - EXPORT_SYMBOL(unregister_ieee80211);
+2 -2
drivers/net/wireless/rt2x00/rt2x00dev.c
··· 815 815 816 816 mutex_init(&rt2x00dev->csr_mutex); 817 817 818 + set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); 819 + 818 820 /* 819 821 * Make room for rt2x00_intf inside the per-interface 820 822 * structure ieee80211_vif. ··· 872 870 rt2x00link_register(rt2x00dev); 873 871 rt2x00leds_register(rt2x00dev); 874 872 rt2x00debug_register(rt2x00dev); 875 - 876 - set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); 877 873 878 874 return 0; 879 875
+7 -4
drivers/net/wireless/rt2x00/rt2x00link.c
··· 362 362 363 363 rt2x00link_reset_tuner(rt2x00dev, false); 364 364 365 - ieee80211_queue_delayed_work(rt2x00dev->hw, 366 - &link->work, LINK_TUNE_INTERVAL); 365 + if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) 366 + ieee80211_queue_delayed_work(rt2x00dev->hw, 367 + &link->work, LINK_TUNE_INTERVAL); 367 368 } 368 369 369 370 void rt2x00link_stop_tuner(struct rt2x00_dev *rt2x00dev) ··· 470 469 * Increase tuner counter, and reschedule the next link tuner run. 471 470 */ 472 471 link->count++; 473 - ieee80211_queue_delayed_work(rt2x00dev->hw, 474 - &link->work, LINK_TUNE_INTERVAL); 472 + 473 + if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) 474 + ieee80211_queue_delayed_work(rt2x00dev->hw, 475 + &link->work, LINK_TUNE_INTERVAL); 475 476 } 476 477 477 478 void rt2x00link_register(struct rt2x00_dev *rt2x00dev)
+8 -1
drivers/net/wireless/rt2x00/rt2x00usb.c
··· 47 47 (requesttype == USB_VENDOR_REQUEST_IN) ? 48 48 usb_rcvctrlpipe(usb_dev, 0) : usb_sndctrlpipe(usb_dev, 0); 49 49 50 + if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) 51 + return -ENODEV; 50 52 51 53 for (i = 0; i < REGISTER_BUSY_COUNT; i++) { 52 54 status = usb_control_msg(usb_dev, pipe, request, requesttype, ··· 62 60 * -ENODEV: Device has disappeared, no point continuing. 63 61 * All other errors: Try again. 64 62 */ 65 - else if (status == -ENODEV) 63 + else if (status == -ENODEV) { 64 + clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); 66 65 break; 66 + } 67 67 } 68 68 69 69 ERROR(rt2x00dev, ··· 164 160 u32 *reg) 165 161 { 166 162 unsigned int i; 163 + 164 + if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) 165 + return -ENODEV; 167 166 168 167 for (i = 0; i < REGISTER_BUSY_COUNT; i++) { 169 168 rt2x00usb_register_read_lock(rt2x00dev, offset, reg);
+2 -2
drivers/net/wireless/rtl818x/rtl8187_leds.c
··· 210 210 211 211 /* turn the LED off before exiting */ 212 212 ieee80211_queue_delayed_work(dev, &priv->led_off, 0); 213 - cancel_delayed_work_sync(&priv->led_off); 214 - cancel_delayed_work_sync(&priv->led_on); 215 213 rtl8187_unregister_led(&priv->led_rx); 216 214 rtl8187_unregister_led(&priv->led_tx); 215 + cancel_delayed_work_sync(&priv->led_off); 216 + cancel_delayed_work_sync(&priv->led_on); 217 217 } 218 218 #endif /* def CONFIG_RTL8187_LED */ 219 219