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

+40 -15
+1 -1
drivers/net/wireless/airo.c
··· 2905 2905 2906 2906 static int waitbusy (struct airo_info *ai) { 2907 2907 int delay = 0; 2908 - while ((IN4500 (ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) { 2908 + while ((IN4500(ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) { 2909 2909 udelay (10); 2910 2910 if ((++delay % 20) == 0) 2911 2911 OUT4500(ai, EVACK, EV_CLEARCOMMANDBUSY);
+9 -8
drivers/net/wireless/b43legacy/main.c
··· 3039 3039 /* Locking: wl->mutex */ 3040 3040 static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev) 3041 3041 { 3042 - struct b43legacy_wl *wl = dev->wl; 3043 3042 struct b43legacy_phy *phy = &dev->phy; 3044 3043 u32 macctl; 3045 3044 ··· 3052 3053 macctl &= ~B43legacy_MACCTL_PSM_RUN; 3053 3054 macctl |= B43legacy_MACCTL_PSM_JMP0; 3054 3055 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl); 3055 - 3056 - mutex_unlock(&wl->mutex); 3057 - /* Must unlock as it would otherwise deadlock. No races here. 3058 - * Cancel possibly pending workqueues. */ 3059 - cancel_work_sync(&dev->restart_work); 3060 - mutex_lock(&wl->mutex); 3061 3056 3062 3057 b43legacy_leds_exit(dev); 3063 3058 b43legacy_rng_exit(dev->wl); ··· 3479 3486 } 3480 3487 } 3481 3488 out: 3489 + if (err) 3490 + wl->current_dev = NULL; /* Failed to init the dev. */ 3482 3491 mutex_unlock(&wl->mutex); 3483 3492 if (err) 3484 3493 b43legacyerr(wl, "Controller restart FAILED\n"); ··· 3613 3618 struct b43legacy_wldev *wldev; 3614 3619 struct b43legacy_wl *wl; 3615 3620 3621 + /* Do not cancel ieee80211-workqueue based work here. 3622 + * See comment in b43legacy_remove(). */ 3623 + 3616 3624 wldev = ssb_get_drvdata(dev); 3617 3625 wl = wldev->wl; 3618 - cancel_work_sync(&wldev->restart_work); 3619 3626 b43legacy_debugfs_remove_device(wldev); 3620 3627 b43legacy_wireless_core_detach(wldev); 3621 3628 list_del(&wldev->list); ··· 3785 3788 { 3786 3789 struct b43legacy_wl *wl = ssb_get_devtypedata(dev); 3787 3790 struct b43legacy_wldev *wldev = ssb_get_drvdata(dev); 3791 + 3792 + /* We must cancel any work here before unregistering from ieee80211, 3793 + * as the ieee80211 unreg will destroy the workqueue. */ 3794 + cancel_work_sync(&wldev->restart_work); 3788 3795 3789 3796 B43legacy_WARN_ON(!wl); 3790 3797 if (wl->current_dev == wldev)
+25 -2
drivers/net/wireless/ipw2200.c
··· 7558 7558 priv->ieee->iw_mode == IW_MODE_ADHOC && 7559 7559 priv->config & CFG_ADHOC_CREATE && 7560 7560 priv->config & CFG_STATIC_ESSID && 7561 - priv->config & CFG_STATIC_CHANNEL && 7562 - !list_empty(&priv->ieee->network_free_list)) { 7561 + priv->config & CFG_STATIC_CHANNEL) { 7562 + /* Use oldest network if the free list is empty */ 7563 + if (list_empty(&priv->ieee->network_free_list)) { 7564 + struct ieee80211_network *oldest = NULL; 7565 + struct ieee80211_network *target; 7566 + DECLARE_MAC_BUF(mac); 7567 + 7568 + list_for_each_entry(target, &priv->ieee->network_list, list) { 7569 + if ((oldest == NULL) || 7570 + (target->last_scanned < oldest->last_scanned)) 7571 + oldest = target; 7572 + } 7573 + 7574 + /* If there are no more slots, expire the oldest */ 7575 + list_del(&oldest->list); 7576 + target = oldest; 7577 + IPW_DEBUG_ASSOC("Expired '%s' (%s) from " 7578 + "network list.\n", 7579 + escape_essid(target->ssid, 7580 + target->ssid_len), 7581 + print_mac(mac, target->bssid)); 7582 + list_add_tail(&target->list, 7583 + &priv->ieee->network_free_list); 7584 + } 7585 + 7563 7586 element = priv->ieee->network_free_list.next; 7564 7587 network = list_entry(element, struct ieee80211_network, list); 7565 7588 ipw_adhoc_create(priv, network);
+2 -2
drivers/net/wireless/libertas/debugfs.c
··· 312 312 if (tlv_type != TLV_TYPE_BCNMISS) 313 313 tlv->freq = freq; 314 314 315 - /* The command header, the event mask, and the one TLV */ 316 - events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 2 + sizeof(*tlv)); 315 + /* The command header, the action, the event mask, and one TLV */ 316 + events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 4 + sizeof(*tlv)); 317 317 318 318 ret = lbs_cmd_with_response(priv, CMD_802_11_SUBSCRIBE_EVENT, events); 319 319
+1
drivers/net/wireless/p54/p54usb.c
··· 49 49 {USB_DEVICE(0x5041, 0x2235)}, /* Linksys WUSB54G Portable */ 50 50 51 51 /* Version 2 devices (3887) */ 52 + {USB_DEVICE(0x0471, 0x1230)}, /* Philips CPWUA054/00 */ 52 53 {USB_DEVICE(0x050d, 0x7050)}, /* Belkin F5D7050 ver 1000 */ 53 54 {USB_DEVICE(0x0572, 0x2000)}, /* Cohiba Proto board */ 54 55 {USB_DEVICE(0x0572, 0x2002)}, /* Cohiba Proto board */
+2 -2
drivers/ssb/driver_pcicore.c
··· 537 537 int err = 0; 538 538 u32 tmp; 539 539 540 - might_sleep(); 541 - 542 540 if (!pdev) 543 541 goto out; 544 542 bus = pdev->bus; 543 + 544 + might_sleep_if(pdev->id.coreid != SSB_DEV_PCI); 545 545 546 546 /* Enable interrupts for this device. */ 547 547 if (bus->host_pci &&