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.infradead.org/users/linville/wireless

Conflicts:
drivers/net/wireless/iwlwifi/iwl-pci.c
drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
drivers/net/wireless/rt2x00/rt2800usb.c
drivers/net/wireless/wl12xx/main.c

+361 -282
+12
drivers/bcma/main.c
··· 15 15 static int bcma_bus_match(struct device *dev, struct device_driver *drv); 16 16 static int bcma_device_probe(struct device *dev); 17 17 static int bcma_device_remove(struct device *dev); 18 + static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env); 18 19 19 20 static ssize_t manuf_show(struct device *dev, struct device_attribute *attr, char *buf) 20 21 { ··· 50 49 .match = bcma_bus_match, 51 50 .probe = bcma_device_probe, 52 51 .remove = bcma_device_remove, 52 + .uevent = bcma_device_uevent, 53 53 .dev_attrs = bcma_device_attrs, 54 54 }; 55 55 ··· 295 293 adrv->remove(core); 296 294 297 295 return 0; 296 + } 297 + 298 + static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env) 299 + { 300 + struct bcma_device *core = container_of(dev, struct bcma_device, dev); 301 + 302 + return add_uevent_var(env, 303 + "MODALIAS=bcma:m%04Xid%04Xrev%02Xcl%02X", 304 + core->id.manuf, core->id.id, 305 + core->id.rev, core->id.class); 298 306 } 299 307 300 308 static int __init bcma_modinit(void)
+1
drivers/bluetooth/ath3k.c
··· 63 63 /* Atheros AR3011 with sflash firmware*/ 64 64 { USB_DEVICE(0x0CF3, 0x3002) }, 65 65 { USB_DEVICE(0x13d3, 0x3304) }, 66 + { USB_DEVICE(0x0930, 0x0215) }, 66 67 67 68 /* Atheros AR9285 Malbec with sflash firmware */ 68 69 { USB_DEVICE(0x03F0, 0x311D) },
+16 -3
drivers/bluetooth/btusb.c
··· 72 72 /* Apple MacBookAir3,1, MacBookAir3,2 */ 73 73 { USB_DEVICE(0x05ac, 0x821b) }, 74 74 75 + /* Apple MacBookAir4,1 */ 76 + { USB_DEVICE(0x05ac, 0x821f) }, 77 + 75 78 /* Apple MacBookPro8,2 */ 76 79 { USB_DEVICE(0x05ac, 0x821a) }, 80 + 81 + /* Apple MacMini5,1 */ 82 + { USB_DEVICE(0x05ac, 0x8281) }, 77 83 78 84 /* AVM BlueFRITZ! USB v2.0 */ 79 85 { USB_DEVICE(0x057c, 0x3800) }, ··· 112 106 /* Atheros 3011 with sflash firmware */ 113 107 { USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE }, 114 108 { USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE }, 109 + { USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE }, 115 110 116 111 /* Atheros AR9285 Malbec with sflash firmware */ 117 112 { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE }, ··· 263 256 264 257 err = usb_submit_urb(urb, GFP_ATOMIC); 265 258 if (err < 0) { 266 - if (err != -EPERM) 259 + /* -EPERM: urb is being killed; 260 + * -ENODEV: device got disconnected */ 261 + if (err != -EPERM && err != -ENODEV) 267 262 BT_ERR("%s urb %p failed to resubmit (%d)", 268 263 hdev->name, urb, -err); 269 264 usb_unanchor_urb(urb); ··· 350 341 351 342 err = usb_submit_urb(urb, GFP_ATOMIC); 352 343 if (err < 0) { 353 - if (err != -EPERM) 344 + /* -EPERM: urb is being killed; 345 + * -ENODEV: device got disconnected */ 346 + if (err != -EPERM && err != -ENODEV) 354 347 BT_ERR("%s urb %p failed to resubmit (%d)", 355 348 hdev->name, urb, -err); 356 349 usb_unanchor_urb(urb); ··· 442 431 443 432 err = usb_submit_urb(urb, GFP_ATOMIC); 444 433 if (err < 0) { 445 - if (err != -EPERM) 434 + /* -EPERM: urb is being killed; 435 + * -ENODEV: device got disconnected */ 436 + if (err != -EPERM && err != -ENODEV) 446 437 BT_ERR("%s urb %p failed to resubmit (%d)", 447 438 hdev->name, urb, -err); 448 439 usb_unanchor_urb(urb);
+8 -8
drivers/bluetooth/btwilink.c
··· 125 125 /* protocol structure registered with shared transport */ 126 126 static struct st_proto_s ti_st_proto[MAX_BT_CHNL_IDS] = { 127 127 { 128 + .chnl_id = HCI_EVENT_PKT, /* HCI Events */ 129 + .hdr_len = sizeof(struct hci_event_hdr), 130 + .offset_len_in_hdr = offsetof(struct hci_event_hdr, plen), 131 + .len_size = 1, /* sizeof(plen) in struct hci_event_hdr */ 132 + .reserve = 8, 133 + }, 134 + { 128 135 .chnl_id = HCI_ACLDATA_PKT, /* ACL */ 129 136 .hdr_len = sizeof(struct hci_acl_hdr), 130 137 .offset_len_in_hdr = offsetof(struct hci_acl_hdr, dlen), ··· 143 136 .hdr_len = sizeof(struct hci_sco_hdr), 144 137 .offset_len_in_hdr = offsetof(struct hci_sco_hdr, dlen), 145 138 .len_size = 1, /* sizeof(dlen) in struct hci_sco_hdr */ 146 - .reserve = 8, 147 - }, 148 - { 149 - .chnl_id = HCI_EVENT_PKT, /* HCI Events */ 150 - .hdr_len = sizeof(struct hci_event_hdr), 151 - .offset_len_in_hdr = offsetof(struct hci_event_hdr, plen), 152 - .len_size = 1, /* sizeof(plen) in struct hci_event_hdr */ 153 139 .reserve = 8, 154 140 }, 155 141 }; ··· 240 240 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags)) 241 241 return 0; 242 242 243 - for (i = 0; i < MAX_BT_CHNL_IDS; i++) { 243 + for (i = MAX_BT_CHNL_IDS-1; i >= 0; i--) { 244 244 err = st_unregister(&ti_st_proto[i]); 245 245 if (err) 246 246 BT_ERR("st_unregister(%d) failed with error %d",
+14 -9
drivers/net/wireless/ath/ath5k/base.c
··· 1729 1729 1730 1730 if (dma_mapping_error(ah->dev, bf->skbaddr)) { 1731 1731 ATH5K_ERR(ah, "beacon DMA mapping failed\n"); 1732 + dev_kfree_skb_any(skb); 1733 + bf->skb = NULL; 1732 1734 return -EIO; 1733 1735 } 1734 1736 ··· 1815 1813 ath5k_txbuf_free_skb(ah, avf->bbuf); 1816 1814 avf->bbuf->skb = skb; 1817 1815 ret = ath5k_beacon_setup(ah, avf->bbuf); 1818 - if (ret) 1819 - avf->bbuf->skb = NULL; 1820 1816 out: 1821 1817 return ret; 1822 1818 } ··· 1834 1834 struct ath5k_vif *avf; 1835 1835 struct ath5k_buf *bf; 1836 1836 struct sk_buff *skb; 1837 + int err; 1837 1838 1838 1839 ATH5K_DBG_UNLIMIT(ah, ATH5K_DEBUG_BEACON, "in beacon_send\n"); 1839 1840 ··· 1883 1882 1884 1883 avf = (void *)vif->drv_priv; 1885 1884 bf = avf->bbuf; 1886 - if (unlikely(bf->skb == NULL || ah->opmode == NL80211_IFTYPE_STATION || 1887 - ah->opmode == NL80211_IFTYPE_MONITOR)) { 1888 - ATH5K_WARN(ah, "bf=%p bf_skb=%p\n", bf, bf ? bf->skb : NULL); 1889 - return; 1890 - } 1891 1885 1892 1886 /* 1893 1887 * Stop any current dma and put the new frame on the queue. ··· 1896 1900 1897 1901 /* refresh the beacon for AP or MESH mode */ 1898 1902 if (ah->opmode == NL80211_IFTYPE_AP || 1899 - ah->opmode == NL80211_IFTYPE_MESH_POINT) 1900 - ath5k_beacon_update(ah->hw, vif); 1903 + ah->opmode == NL80211_IFTYPE_MESH_POINT) { 1904 + err = ath5k_beacon_update(ah->hw, vif); 1905 + if (err) 1906 + return; 1907 + } 1908 + 1909 + if (unlikely(bf->skb == NULL || ah->opmode == NL80211_IFTYPE_STATION || 1910 + ah->opmode == NL80211_IFTYPE_MONITOR)) { 1911 + ATH5K_WARN(ah, "bf=%p bf_skb=%p\n", bf, bf->skb); 1912 + return; 1913 + } 1901 1914 1902 1915 trace_ath5k_tx(ah, bf->skb, &ah->txqs[ah->bhalq]); 1903 1916
+2 -1
drivers/net/wireless/ath/ath9k/ar9002_calib.c
··· 41 41 case ADC_DC_CAL: 42 42 /* Run ADC Gain Cal for non-CCK & non 2GHz-HT20 only */ 43 43 if (!IS_CHAN_B(chan) && 44 - !(IS_CHAN_2GHZ(chan) && IS_CHAN_HT20(chan))) 44 + !((IS_CHAN_2GHZ(chan) || IS_CHAN_A_FAST_CLOCK(ah, chan)) && 45 + IS_CHAN_HT20(chan))) 45 46 supported = true; 46 47 break; 47 48 }
+5 -5
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
··· 50 50 static const struct ar9300_eeprom ar9300_default = { 51 51 .eepromVersion = 2, 52 52 .templateVersion = 2, 53 - .macAddr = {1, 2, 3, 4, 5, 6}, 53 + .macAddr = {0, 2, 3, 4, 5, 6}, 54 54 .custData = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55 55 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 56 56 .baseEepHeader = { ··· 288 288 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, 289 289 { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } }, 290 290 291 - { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } }, 291 + { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0) } }, 292 292 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, 293 293 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, 294 294 ··· 865 865 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, 866 866 { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } }, 867 867 868 - { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } }, 868 + { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0) } }, 869 869 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, 870 870 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, 871 871 ··· 2021 2021 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, 2022 2022 { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } }, 2023 2023 2024 - { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } }, 2024 + { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0) } }, 2025 2025 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, 2026 2026 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, 2027 2027 ··· 3887 3887 } 3888 3888 } else { 3889 3889 reg_pmu_set = (5 << 1) | (7 << 4) | 3890 - (1 << 8) | (2 << 14) | 3890 + (2 << 8) | (2 << 14) | 3891 3891 (6 << 17) | (1 << 20) | 3892 3892 (3 << 24) | (1 << 28); 3893 3893 }
+1 -1
drivers/net/wireless/ath/ath9k/ar9003_phy.c
··· 681 681 REG_WRITE_ARRAY(&ah->iniModesAdditional, 682 682 modesIndex, regWrites); 683 683 684 - if (AR_SREV_9300(ah)) 684 + if (AR_SREV_9330(ah)) 685 685 REG_WRITE_ARRAY(&ah->iniModesAdditional, 1, regWrites); 686 686 687 687 if (AR_SREV_9340(ah) && !ah->is_clk_25mhz)
+1 -1
drivers/net/wireless/ath/ath9k/ar9003_phy.h
··· 898 898 #define AR_PHY_TPC_19_B1_ALPHA_THERM 0xff 899 899 #define AR_PHY_TPC_19_B1_ALPHA_THERM_S 0 900 900 #define AR_PHY_TX_IQCAL_STATUS_B1 (AR_SM1_BASE + 0x48c) 901 - #define AR_PHY_TX_IQCAL_CORR_COEFF_B1(_i) (AR_SM_BASE + 0x450 + ((_i) << 2)) 901 + #define AR_PHY_TX_IQCAL_CORR_COEFF_B1(_i) (AR_SM1_BASE + 0x450 + ((_i) << 2)) 902 902 903 903 /* SM 1 AIC Registers */ 904 904
+10
drivers/net/wireless/ath/ath9k/main.c
··· 2273 2273 2274 2274 mutex_lock(&sc->mutex); 2275 2275 ah->coverage_class = coverage_class; 2276 + 2277 + ath9k_ps_wakeup(sc); 2276 2278 ath9k_hw_init_global_settings(ah); 2279 + ath9k_ps_restore(sc); 2280 + 2277 2281 mutex_unlock(&sc->mutex); 2278 2282 } 2279 2283 ··· 2292 2288 2293 2289 mutex_lock(&sc->mutex); 2294 2290 cancel_delayed_work_sync(&sc->tx_complete_work); 2291 + 2292 + if (ah->ah_flags & AH_UNPLUGGED) { 2293 + ath_dbg(common, ATH_DBG_ANY, "Device has been unplugged!\n"); 2294 + mutex_unlock(&sc->mutex); 2295 + return; 2296 + } 2295 2297 2296 2298 if (sc->sc_flags & SC_OP_INVALID) { 2297 2299 ath_dbg(common, ATH_DBG_ANY, "Device not present\n");
+3 -1
drivers/net/wireless/ath/carl9170/main.c
··· 1115 1115 * the high througput speed in 802.11n networks. 1116 1116 */ 1117 1117 1118 - if (!is_main_vif(ar, vif)) 1118 + if (!is_main_vif(ar, vif)) { 1119 + mutex_lock(&ar->mutex); 1119 1120 goto err_softw; 1121 + } 1120 1122 1121 1123 /* 1122 1124 * While the hardware supports *catch-all* key, for offloading
+17 -3
drivers/net/wireless/b43/dma.c
··· 817 817 u32 tmp; 818 818 u16 mmio_base; 819 819 820 - tmp = b43_read32(dev, SSB_TMSHIGH); 821 - if (tmp & SSB_TMSHIGH_DMA64) 822 - return DMA_BIT_MASK(64); 820 + switch (dev->dev->bus_type) { 821 + #ifdef CONFIG_B43_BCMA 822 + case B43_BUS_BCMA: 823 + tmp = bcma_aread32(dev->dev->bdev, BCMA_IOST); 824 + if (tmp & BCMA_IOST_DMA64) 825 + return DMA_BIT_MASK(64); 826 + break; 827 + #endif 828 + #ifdef CONFIG_B43_SSB 829 + case B43_BUS_SSB: 830 + tmp = ssb_read32(dev->dev->sdev, SSB_TMSHIGH); 831 + if (tmp & SSB_TMSHIGH_DMA64) 832 + return DMA_BIT_MASK(64); 833 + break; 834 + #endif 835 + } 836 + 823 837 mmio_base = b43_dmacontroller_base(0, 0); 824 838 b43_write32(dev, mmio_base + B43_DMA32_TXCTL, B43_DMA32_TXADDREXT_MASK); 825 839 tmp = b43_read32(dev, mmio_base + B43_DMA32_TXCTL);
+2 -1
drivers/net/wireless/b43/main.c
··· 1637 1637 u32 cmd, beacon0_valid, beacon1_valid; 1638 1638 1639 1639 if (!b43_is_mode(wl, NL80211_IFTYPE_AP) && 1640 - !b43_is_mode(wl, NL80211_IFTYPE_MESH_POINT)) 1640 + !b43_is_mode(wl, NL80211_IFTYPE_MESH_POINT) && 1641 + !b43_is_mode(wl, NL80211_IFTYPE_ADHOC)) 1641 1642 return; 1642 1643 1643 1644 /* This is the bottom half of the asynchronous beacon update. */
+14 -7
drivers/net/wireless/ipw2x00/ipw2100.c
··· 1903 1903 static int ipw2100_net_init(struct net_device *dev) 1904 1904 { 1905 1905 struct ipw2100_priv *priv = libipw_priv(dev); 1906 + 1907 + return ipw2100_up(priv, 1); 1908 + } 1909 + 1910 + static int ipw2100_wdev_init(struct net_device *dev) 1911 + { 1912 + struct ipw2100_priv *priv = libipw_priv(dev); 1906 1913 const struct libipw_geo *geo = libipw_get_geo(priv->ieee); 1907 1914 struct wireless_dev *wdev = &priv->ieee->wdev; 1908 - int ret; 1909 1915 int i; 1910 - 1911 - ret = ipw2100_up(priv, 1); 1912 - if (ret) 1913 - return ret; 1914 1916 1915 1917 memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN); 1916 1918 ··· 6352 6350 "Error calling register_netdev.\n"); 6353 6351 goto fail; 6354 6352 } 6353 + registered = 1; 6354 + 6355 + err = ipw2100_wdev_init(dev); 6356 + if (err) 6357 + goto fail; 6355 6358 6356 6359 mutex_lock(&priv->action_mutex); 6357 - registered = 1; 6358 6360 6359 6361 IPW_DEBUG_INFO("%s: Bound to %s\n", dev->name, pci_name(pci_dev)); 6360 6362 ··· 6395 6389 6396 6390 fail_unlock: 6397 6391 mutex_unlock(&priv->action_mutex); 6398 - 6392 + wiphy_unregister(priv->ieee->wdev.wiphy); 6393 + kfree(priv->ieee->bg_band.channels); 6399 6394 fail: 6400 6395 if (dev) { 6401 6396 if (registered)
+26 -13
drivers/net/wireless/ipw2x00/ipw2200.c
··· 11426 11426 /* Called by register_netdev() */ 11427 11427 static int ipw_net_init(struct net_device *dev) 11428 11428 { 11429 + int rc = 0; 11430 + struct ipw_priv *priv = libipw_priv(dev); 11431 + 11432 + mutex_lock(&priv->mutex); 11433 + if (ipw_up(priv)) 11434 + rc = -EIO; 11435 + mutex_unlock(&priv->mutex); 11436 + 11437 + return rc; 11438 + } 11439 + 11440 + static int ipw_wdev_init(struct net_device *dev) 11441 + { 11429 11442 int i, rc = 0; 11430 11443 struct ipw_priv *priv = libipw_priv(dev); 11431 11444 const struct libipw_geo *geo = libipw_get_geo(priv->ieee); 11432 11445 struct wireless_dev *wdev = &priv->ieee->wdev; 11433 - mutex_lock(&priv->mutex); 11434 - 11435 - if (ipw_up(priv)) { 11436 - rc = -EIO; 11437 - goto out; 11438 - } 11439 11446 11440 11447 memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN); 11441 11448 ··· 11527 11520 set_wiphy_dev(wdev->wiphy, &priv->pci_dev->dev); 11528 11521 11529 11522 /* With that information in place, we can now register the wiphy... */ 11530 - if (wiphy_register(wdev->wiphy)) { 11523 + if (wiphy_register(wdev->wiphy)) 11531 11524 rc = -EIO; 11532 - goto out; 11533 - } 11534 - 11535 11525 out: 11536 - mutex_unlock(&priv->mutex); 11537 11526 return rc; 11538 11527 } 11539 11528 ··· 11836 11833 goto out_remove_sysfs; 11837 11834 } 11838 11835 11836 + err = ipw_wdev_init(net_dev); 11837 + if (err) { 11838 + IPW_ERROR("failed to register wireless device\n"); 11839 + goto out_unregister_netdev; 11840 + } 11841 + 11839 11842 #ifdef CONFIG_IPW2200_PROMISCUOUS 11840 11843 if (rtap_iface) { 11841 11844 err = ipw_prom_alloc(priv); 11842 11845 if (err) { 11843 11846 IPW_ERROR("Failed to register promiscuous network " 11844 11847 "device (error %d).\n", err); 11845 - unregister_netdev(priv->net_dev); 11846 - goto out_remove_sysfs; 11848 + wiphy_unregister(priv->ieee->wdev.wiphy); 11849 + kfree(priv->ieee->a_band.channels); 11850 + kfree(priv->ieee->bg_band.channels); 11851 + goto out_unregister_netdev; 11847 11852 } 11848 11853 } 11849 11854 #endif ··· 11863 11852 11864 11853 return 0; 11865 11854 11855 + out_unregister_netdev: 11856 + unregister_netdev(priv->net_dev); 11866 11857 out_remove_sysfs: 11867 11858 sysfs_remove_group(&pdev->dev.kobj, &ipw_attribute_group); 11868 11859 out_release_irq:
+8 -5
drivers/net/wireless/iwlegacy/iwl-3945-rs.c
··· 821 821 822 822 out: 823 823 824 - rs_sta->last_txrate_idx = index; 825 - if (sband->band == IEEE80211_BAND_5GHZ) 826 - info->control.rates[0].idx = rs_sta->last_txrate_idx - 827 - IWL_FIRST_OFDM_RATE; 828 - else 824 + if (sband->band == IEEE80211_BAND_5GHZ) { 825 + if (WARN_ON_ONCE(index < IWL_FIRST_OFDM_RATE)) 826 + index = IWL_FIRST_OFDM_RATE; 827 + rs_sta->last_txrate_idx = index; 828 + info->control.rates[0].idx = index - IWL_FIRST_OFDM_RATE; 829 + } else { 830 + rs_sta->last_txrate_idx = index; 829 831 info->control.rates[0].idx = rs_sta->last_txrate_idx; 832 + } 830 833 831 834 IWL_DEBUG_RATE(priv, "leave: %d\n", index); 832 835 }
+1 -1
drivers/net/wireless/iwlwifi/iwl-agn-ucode.c
··· 163 163 164 164 memset(&cmd, 0, sizeof(cmd)); 165 165 iwl_set_calib_hdr(&cmd.hdr, IWL_PHY_CALIBRATE_TEMP_OFFSET_CMD); 166 - memcpy(&cmd.radio_sensor_offset, offset_calib, sizeof(offset_calib)); 166 + memcpy(&cmd.radio_sensor_offset, offset_calib, sizeof(*offset_calib)); 167 167 if (!(cmd.radio_sensor_offset)) 168 168 cmd.radio_sensor_offset = DEFAULT_RADIO_SENSOR_OFFSET; 169 169
+5
drivers/net/wireless/iwlwifi/iwl-agn.c
··· 1657 1657 IEEE80211_HW_SPECTRUM_MGMT | 1658 1658 IEEE80211_HW_REPORTS_TX_ACK_STATUS; 1659 1659 1660 + /* 1661 + * Including the following line will crash some AP's. This 1662 + * workaround removes the stimulus which causes the crash until 1663 + * the AP software can be fixed. 1660 1664 hw->max_tx_aggregation_subframes = LINK_QUAL_AGG_FRAME_LIMIT_DEF; 1665 + */ 1661 1666 1662 1667 hw->flags |= IEEE80211_HW_SUPPORTS_PS | 1663 1668 IEEE80211_HW_SUPPORTS_DYNAMIC_PS;
+6 -5
drivers/net/wireless/iwlwifi/iwl-pci.c
··· 483 483 { 484 484 struct iwl_bus *bus = pci_get_drvdata(pdev); 485 485 struct iwl_pci_bus *pci_bus = IWL_BUS_GET_PCI_BUS(bus); 486 + struct pci_dev *pci_dev = IWL_BUS_GET_PCI_DEV(bus); 486 487 struct iwl_shared *shrd = bus->shrd; 487 488 488 489 iwl_remove(shrd->priv); 489 490 490 - pci_disable_msi(pci_bus->pci_dev); 491 - pci_iounmap(pci_bus->pci_dev, pci_bus->hw_base); 492 - pci_release_regions(pci_bus->pci_dev); 493 - pci_disable_device(pci_bus->pci_dev); 494 - pci_set_drvdata(pci_bus->pci_dev, NULL); 491 + pci_disable_msi(pci_dev); 492 + pci_iounmap(pci_dev, pci_bus->hw_base); 493 + pci_release_regions(pci_dev); 494 + pci_disable_device(pci_dev); 495 + pci_set_drvdata(pci_dev, NULL); 495 496 496 497 kfree(bus); 497 498 }
+2
drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
··· 928 928 cmd = txq->cmd[cmd_index]; 929 929 meta = &txq->meta[cmd_index]; 930 930 931 + txq->time_stamp = jiffies; 932 + 931 933 iwlagn_unmap_tfd(trans, meta, &txq->tfds[index], 932 934 DMA_BIDIRECTIONAL); 933 935
+26 -21
drivers/net/wireless/rt2x00/rt2800lib.c
··· 3769 3769 rt2800_regbusy_read(rt2x00dev, EFUSE_CTRL, EFUSE_CTRL_KICK, &reg); 3770 3770 3771 3771 /* Apparently the data is read from end to start */ 3772 - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, 3773 - (u32 *)&rt2x00dev->eeprom[i]); 3774 - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, 3775 - (u32 *)&rt2x00dev->eeprom[i + 2]); 3776 - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, 3777 - (u32 *)&rt2x00dev->eeprom[i + 4]); 3778 - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0, 3779 - (u32 *)&rt2x00dev->eeprom[i + 6]); 3772 + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, &reg); 3773 + /* The returned value is in CPU order, but eeprom is le */ 3774 + rt2x00dev->eeprom[i] = cpu_to_le32(reg); 3775 + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, &reg); 3776 + *(u32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg); 3777 + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, &reg); 3778 + *(u32 *)&rt2x00dev->eeprom[i + 4] = cpu_to_le32(reg); 3779 + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0, &reg); 3780 + *(u32 *)&rt2x00dev->eeprom[i + 6] = cpu_to_le32(reg); 3780 3781 3781 3782 mutex_unlock(&rt2x00dev->csr_mutex); 3782 3783 } ··· 3943 3942 return -ENODEV; 3944 3943 } 3945 3944 3946 - if (!rt2x00_rf(rt2x00dev, RF2820) && 3947 - !rt2x00_rf(rt2x00dev, RF2850) && 3948 - !rt2x00_rf(rt2x00dev, RF2720) && 3949 - !rt2x00_rf(rt2x00dev, RF2750) && 3950 - !rt2x00_rf(rt2x00dev, RF3020) && 3951 - !rt2x00_rf(rt2x00dev, RF2020) && 3952 - !rt2x00_rf(rt2x00dev, RF3021) && 3953 - !rt2x00_rf(rt2x00dev, RF3022) && 3954 - !rt2x00_rf(rt2x00dev, RF3052) && 3955 - !rt2x00_rf(rt2x00dev, RF3320) && 3956 - !rt2x00_rf(rt2x00dev, RF5370) && 3957 - !rt2x00_rf(rt2x00dev, RF5390)) { 3958 - ERROR(rt2x00dev, "Invalid RF chipset detected.\n"); 3945 + switch (rt2x00dev->chip.rf) { 3946 + case RF2820: 3947 + case RF2850: 3948 + case RF2720: 3949 + case RF2750: 3950 + case RF3020: 3951 + case RF2020: 3952 + case RF3021: 3953 + case RF3022: 3954 + case RF3052: 3955 + case RF3320: 3956 + case RF5370: 3957 + case RF5390: 3958 + break; 3959 + default: 3960 + ERROR(rt2x00dev, "Invalid RF chipset 0x%x detected.\n", 3961 + rt2x00dev->chip.rf); 3959 3962 return -ENODEV; 3960 3963 } 3961 3964
+18 -6
drivers/net/wireless/rt2x00/rt2800usb.c
··· 464 464 int wcid, ack, pid; 465 465 int tx_wcid, tx_ack, tx_pid; 466 466 467 + if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) || 468 + !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) { 469 + WARNING(entry->queue->rt2x00dev, 470 + "Data pending for entry %u in queue %u\n", 471 + entry->entry_idx, entry->queue->qid); 472 + cond_resched(); 473 + return false; 474 + } 475 + 467 476 wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID); 468 477 ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED); 469 478 pid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE); ··· 538 529 entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE); 539 530 if (rt2800usb_txdone_entry_check(entry, reg)) 540 531 break; 532 + entry = NULL; 541 533 } 542 534 543 - if (!entry || rt2x00queue_empty(queue)) 544 - break; 545 - 546 - rt2800_txdone_entry(entry, reg, 547 - rt2800usb_get_txwi(entry)); 535 + if (entry) 536 + rt2800_txdone_entry(entry, reg, 537 + rt2800usb_get_txwi(entry)); 548 538 } 549 539 } 550 540 ··· 567 559 while (!rt2x00queue_empty(queue)) { 568 560 entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE); 569 561 570 - if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) 562 + if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) || 563 + !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) 571 564 break; 565 + 572 566 if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags)) 573 567 rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE); 574 568 else if (rt2x00queue_status_timeout(entry)) ··· 936 926 { USB_DEVICE(0x07d1, 0x3c16) }, 937 927 /* Draytek */ 938 928 { USB_DEVICE(0x07fa, 0x7712) }, 929 + /* DVICO */ 930 + { USB_DEVICE(0x0fe9, 0xb307) }, 939 931 /* Edimax */ 940 932 { USB_DEVICE(0x7392, 0x7711) }, 941 933 { USB_DEVICE(0x7392, 0x7717) },
+8 -23
drivers/net/wireless/rt2x00/rt2x00usb.c
··· 262 262 struct queue_entry *entry = (struct queue_entry *)urb->context; 263 263 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; 264 264 265 - if (!test_and_clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) 265 + if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) 266 266 return; 267 - 268 - if (rt2x00dev->ops->lib->tx_dma_done) 269 - rt2x00dev->ops->lib->tx_dma_done(entry); 270 - 271 - /* 272 - * Report the frame as DMA done 273 - */ 274 - rt2x00lib_dmadone(entry); 275 - 276 267 /* 277 268 * Check if the frame was correctly uploaded 278 269 */ 279 270 if (urb->status) 280 271 set_bit(ENTRY_DATA_IO_FAILED, &entry->flags); 272 + /* 273 + * Report the frame as DMA done 274 + */ 275 + rt2x00lib_dmadone(entry); 281 276 277 + if (rt2x00dev->ops->lib->tx_dma_done) 278 + rt2x00dev->ops->lib->tx_dma_done(entry); 282 279 /* 283 280 * Schedule the delayed work for reading the TX status 284 281 * from the device. ··· 871 874 { 872 875 struct ieee80211_hw *hw = usb_get_intfdata(usb_intf); 873 876 struct rt2x00_dev *rt2x00dev = hw->priv; 874 - int retval; 875 877 876 - retval = rt2x00lib_suspend(rt2x00dev, state); 877 - if (retval) 878 - return retval; 879 - 880 - /* 881 - * Decrease usbdev refcount. 882 - */ 883 - usb_put_dev(interface_to_usbdev(usb_intf)); 884 - 885 - return 0; 878 + return rt2x00lib_suspend(rt2x00dev, state); 886 879 } 887 880 EXPORT_SYMBOL_GPL(rt2x00usb_suspend); 888 881 ··· 880 893 { 881 894 struct ieee80211_hw *hw = usb_get_intfdata(usb_intf); 882 895 struct rt2x00_dev *rt2x00dev = hw->priv; 883 - 884 - usb_get_dev(interface_to_usbdev(usb_intf)); 885 896 886 897 return rt2x00lib_resume(rt2x00dev); 887 898 }
+1
drivers/net/wireless/rt2x00/rt73usb.c
··· 2420 2420 /* Buffalo */ 2421 2421 { USB_DEVICE(0x0411, 0x00d8) }, 2422 2422 { USB_DEVICE(0x0411, 0x00d9) }, 2423 + { USB_DEVICE(0x0411, 0x00e6) }, 2423 2424 { USB_DEVICE(0x0411, 0x00f4) }, 2424 2425 { USB_DEVICE(0x0411, 0x0116) }, 2425 2426 { USB_DEVICE(0x0411, 0x0119) },
+8
drivers/net/wireless/rtlwifi/core.c
··· 610 610 611 611 mac->link_state = MAC80211_NOLINK; 612 612 memset(mac->bssid, 0, 6); 613 + 614 + /* reset sec info */ 615 + rtl_cam_reset_sec_info(hw); 616 + 617 + rtl_cam_reset_all_entry(hw); 613 618 mac->vendor = PEER_UNKNOWN; 614 619 615 620 RT_TRACE(rtlpriv, COMP_MAC80211, DBG_DMESG, ··· 1068 1063 *or clear all entry here. 1069 1064 */ 1070 1065 rtl_cam_delete_one_entry(hw, mac_addr, key_idx); 1066 + 1067 + rtl_cam_reset_sec_info(hw); 1068 + 1071 1069 break; 1072 1070 default: 1073 1071 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
+8 -3
drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
··· 281 281 {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817d, rtl92cu_hal_cfg)}, 282 282 /* 8188CE-VAU USB minCard (b/g mode only) */ 283 283 {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817e, rtl92cu_hal_cfg)}, 284 + /* 8188RU in Alfa AWUS036NHR */ 285 + {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817f, rtl92cu_hal_cfg)}, 284 286 /* 8188 Combo for BC4 */ 285 287 {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754, rtl92cu_hal_cfg)}, 286 288 ··· 305 303 {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/ 306 304 /* HP - Lite-On ,8188CUS Slim Combo */ 307 305 {RTL_USB_DEVICE(0x103c, 0x1629, rtl92cu_hal_cfg)}, 306 + {RTL_USB_DEVICE(0x13d3, 0x3357, rtl92cu_hal_cfg)}, /* AzureWave */ 308 307 {RTL_USB_DEVICE(0x2001, 0x3308, rtl92cu_hal_cfg)}, /*D-Link - Alpha*/ 309 308 {RTL_USB_DEVICE(0x2019, 0xab2a, rtl92cu_hal_cfg)}, /*Planex - Abocom*/ 310 309 {RTL_USB_DEVICE(0x2019, 0xed17, rtl92cu_hal_cfg)}, /*PCI - Edimax*/ 311 310 {RTL_USB_DEVICE(0x20f4, 0x648b, rtl92cu_hal_cfg)}, /*TRENDnet - Cameo*/ 312 311 {RTL_USB_DEVICE(0x7392, 0x7811, rtl92cu_hal_cfg)}, /*Edimax - Edimax*/ 313 - {RTL_USB_DEVICE(0x3358, 0x13d3, rtl92cu_hal_cfg)}, /*Azwave 8188CE-VAU*/ 312 + {RTL_USB_DEVICE(0x13d3, 0x3358, rtl92cu_hal_cfg)}, /*Azwave 8188CE-VAU*/ 314 313 /* Russian customer -Azwave (8188CE-VAU b/g mode only) */ 315 - {RTL_USB_DEVICE(0x3359, 0x13d3, rtl92cu_hal_cfg)}, 314 + {RTL_USB_DEVICE(0x13d3, 0x3359, rtl92cu_hal_cfg)}, 315 + {RTL_USB_DEVICE(0x4855, 0x0090, rtl92cu_hal_cfg)}, /* Feixun */ 316 + {RTL_USB_DEVICE(0x4855, 0x0091, rtl92cu_hal_cfg)}, /* NetweeN-Feixun */ 317 + {RTL_USB_DEVICE(0x9846, 0x9041, rtl92cu_hal_cfg)}, /* Netgear Cameo */ 316 318 317 319 /****** 8192CU ********/ 318 320 {RTL_USB_DEVICE(0x0586, 0x341f, rtl92cu_hal_cfg)}, /*Zyxel -Abocom*/ 319 321 {RTL_USB_DEVICE(0x07aa, 0x0056, rtl92cu_hal_cfg)}, /*ATKK-Gemtek*/ 320 322 {RTL_USB_DEVICE(0x07b8, 0x8178, rtl92cu_hal_cfg)}, /*Funai -Abocom*/ 321 - {RTL_USB_DEVICE(0x07b8, 0x8178, rtl92cu_hal_cfg)}, /*Abocom -Abocom*/ 322 323 {RTL_USB_DEVICE(0x2001, 0x3307, rtl92cu_hal_cfg)}, /*D-Link-Cameo*/ 323 324 {RTL_USB_DEVICE(0x2001, 0x3309, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/ 324 325 {RTL_USB_DEVICE(0x2001, 0x330a, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/
+6 -5
drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
··· 548 548 (tcb_desc->rts_use_shortpreamble ? 1 : 0) 549 549 : (tcb_desc->rts_use_shortgi ? 1 : 0))); 550 550 if (mac->bw_40) { 551 - if (tcb_desc->packet_bw) { 551 + if (rate_flag & IEEE80211_TX_RC_DUP_DATA) { 552 552 SET_TX_DESC_DATA_BW(txdesc, 1); 553 553 SET_TX_DESC_DATA_SC(txdesc, 3); 554 + } else if(rate_flag & IEEE80211_TX_RC_40_MHZ_WIDTH){ 555 + SET_TX_DESC_DATA_BW(txdesc, 1); 556 + SET_TX_DESC_DATA_SC(txdesc, mac->cur_40_prime_sc); 554 557 } else { 555 558 SET_TX_DESC_DATA_BW(txdesc, 0); 556 - if (rate_flag & IEEE80211_TX_RC_DUP_DATA) 557 - SET_TX_DESC_DATA_SC(txdesc, 558 - mac->cur_40_prime_sc); 559 - } 559 + SET_TX_DESC_DATA_SC(txdesc, 0); 560 + } 560 561 } else { 561 562 SET_TX_DESC_DATA_BW(txdesc, 0); 562 563 SET_TX_DESC_DATA_SC(txdesc, 0);
+1 -5
drivers/net/wireless/wl1251/acx.c
··· 140 140 auth->sleep_auth = sleep_auth; 141 141 142 142 ret = wl1251_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth)); 143 - if (ret < 0) 144 - return ret; 145 143 146 144 out: 147 145 kfree(auth); ··· 679 681 680 682 ret = wl1251_cmd_configure(wl, ACX_CCA_THRESHOLD, 681 683 detection, sizeof(*detection)); 682 - if (ret < 0) { 684 + if (ret < 0) 683 685 wl1251_warning("failed to set cca threshold: %d", ret); 684 - return ret; 685 - } 686 686 687 687 out: 688 688 kfree(detection);
+1 -1
drivers/net/wireless/wl1251/cmd.c
··· 241 241 if (ret < 0) { 242 242 wl1251_error("tx %s cmd for channel %d failed", 243 243 enable ? "start" : "stop", channel); 244 - return ret; 244 + goto out; 245 245 } 246 246 247 247 wl1251_debug(DEBUG_BOOT, "tx %s cmd channel %d",
+1 -5
drivers/net/wireless/wl12xx/acx.c
··· 78 78 auth->sleep_auth = sleep_auth; 79 79 80 80 ret = wl1271_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth)); 81 - if (ret < 0) 82 - return ret; 83 81 84 82 out: 85 83 kfree(auth); ··· 574 576 575 577 ret = wl1271_cmd_configure(wl, ACX_CCA_THRESHOLD, 576 578 detection, sizeof(*detection)); 577 - if (ret < 0) { 579 + if (ret < 0) 578 580 wl1271_warning("failed to set cca threshold: %d", ret); 579 - return ret; 580 - } 581 581 582 582 out: 583 583 kfree(detection);
+1 -1
drivers/net/wireless/wl12xx/sdio.c
··· 164 164 /* If enabled, tell runtime PM not to power off the card */ 165 165 if (pm_runtime_enabled(&func->dev)) { 166 166 ret = pm_runtime_get_sync(&func->dev); 167 - if (ret) 167 + if (ret < 0) 168 168 goto out; 169 169 } else { 170 170 /* Runtime PM is disabled: power up the card manually */
+4 -46
drivers/net/wireless/wl12xx/testmode.c
··· 36 36 WL1271_TM_CMD_TEST, 37 37 WL1271_TM_CMD_INTERROGATE, 38 38 WL1271_TM_CMD_CONFIGURE, 39 - WL1271_TM_CMD_NVS_PUSH, 40 39 WL1271_TM_CMD_SET_PLT_MODE, 41 40 WL1271_TM_CMD_RECOVER, 42 41 ··· 138 139 139 140 if (ret < 0) { 140 141 wl1271_warning("testmode cmd interrogate failed: %d", ret); 142 + kfree(cmd); 141 143 return ret; 142 144 } 143 145 144 146 skb = cfg80211_testmode_alloc_reply_skb(wl->hw->wiphy, sizeof(*cmd)); 145 - if (!skb) 147 + if (!skb) { 148 + kfree(cmd); 146 149 return -ENOMEM; 150 + } 147 151 148 152 NLA_PUT(skb, WL1271_TM_ATTR_DATA, sizeof(*cmd), cmd); 149 153 ··· 187 185 } 188 186 189 187 return 0; 190 - } 191 - 192 - static int wl1271_tm_cmd_nvs_push(struct wl1271 *wl, struct nlattr *tb[]) 193 - { 194 - int ret = 0; 195 - size_t len; 196 - void *buf; 197 - 198 - wl1271_debug(DEBUG_TESTMODE, "testmode cmd nvs push"); 199 - 200 - if (!tb[WL1271_TM_ATTR_DATA]) 201 - return -EINVAL; 202 - 203 - buf = nla_data(tb[WL1271_TM_ATTR_DATA]); 204 - len = nla_len(tb[WL1271_TM_ATTR_DATA]); 205 - 206 - mutex_lock(&wl->mutex); 207 - 208 - kfree(wl->nvs); 209 - 210 - if ((wl->chip.id == CHIP_ID_1283_PG20) && 211 - (len != sizeof(struct wl128x_nvs_file))) 212 - return -EINVAL; 213 - else if (len != sizeof(struct wl1271_nvs_file)) 214 - return -EINVAL; 215 - 216 - wl->nvs = kzalloc(len, GFP_KERNEL); 217 - if (!wl->nvs) { 218 - wl1271_error("could not allocate memory for the nvs file"); 219 - ret = -ENOMEM; 220 - goto out; 221 - } 222 - 223 - memcpy(wl->nvs, buf, len); 224 - wl->nvs_len = len; 225 - 226 - wl1271_debug(DEBUG_TESTMODE, "testmode pushed nvs"); 227 - 228 - out: 229 - mutex_unlock(&wl->mutex); 230 - 231 - return ret; 232 188 } 233 189 234 190 static int wl1271_tm_cmd_set_plt_mode(struct wl1271 *wl, struct nlattr *tb[]) ··· 245 285 return wl1271_tm_cmd_interrogate(wl, tb); 246 286 case WL1271_TM_CMD_CONFIGURE: 247 287 return wl1271_tm_cmd_configure(wl, tb); 248 - case WL1271_TM_CMD_NVS_PUSH: 249 - return wl1271_tm_cmd_nvs_push(wl, tb); 250 288 case WL1271_TM_CMD_SET_PLT_MODE: 251 289 return wl1271_tm_cmd_set_plt_mode(wl, tb); 252 290 case WL1271_TM_CMD_RECOVER:
+3
include/net/cfg80211.h
··· 1942 1942 * you need use set_wiphy_dev() (see below) */ 1943 1943 struct device dev; 1944 1944 1945 + /* protects ->resume, ->suspend sysfs callbacks against unregister hw */ 1946 + bool registered; 1947 + 1945 1948 /* dir in debugfs: ieee80211/<wiphyname> */ 1946 1949 struct dentry *debugfsdir; 1947 1950
+3 -3
net/bluetooth/af_bluetooth.c
··· 494 494 BT_DBG("sk %p", sk); 495 495 496 496 add_wait_queue(sk_sleep(sk), &wait); 497 + set_current_state(TASK_INTERRUPTIBLE); 497 498 while (sk->sk_state != state) { 498 - set_current_state(TASK_INTERRUPTIBLE); 499 - 500 499 if (!timeo) { 501 500 err = -EINPROGRESS; 502 501 break; ··· 509 510 release_sock(sk); 510 511 timeo = schedule_timeout(timeo); 511 512 lock_sock(sk); 513 + set_current_state(TASK_INTERRUPTIBLE); 512 514 513 515 err = sock_error(sk); 514 516 if (err) 515 517 break; 516 518 } 517 - set_current_state(TASK_RUNNING); 519 + __set_current_state(TASK_RUNNING); 518 520 remove_wait_queue(sk_sleep(sk), &wait); 519 521 return err; 520 522 }
+1
net/bluetooth/bnep/bnep.h
··· 155 155 unsigned int role; 156 156 unsigned long state; 157 157 unsigned long flags; 158 + atomic_t terminate; 158 159 struct task_struct *task; 159 160 160 161 struct ethhdr eh;
+8 -5
net/bluetooth/bnep/core.c
··· 484 484 485 485 init_waitqueue_entry(&wait, current); 486 486 add_wait_queue(sk_sleep(sk), &wait); 487 - while (!kthread_should_stop()) { 487 + while (1) { 488 488 set_current_state(TASK_INTERRUPTIBLE); 489 489 490 + if (atomic_read(&s->terminate)) 491 + break; 490 492 /* RX */ 491 493 while ((skb = skb_dequeue(&sk->sk_receive_queue))) { 492 494 skb_orphan(skb); ··· 506 504 507 505 schedule(); 508 506 } 509 - set_current_state(TASK_RUNNING); 507 + __set_current_state(TASK_RUNNING); 510 508 remove_wait_queue(sk_sleep(sk), &wait); 511 509 512 510 /* Cleanup session */ ··· 642 640 down_read(&bnep_session_sem); 643 641 644 642 s = __bnep_get_session(req->dst); 645 - if (s) 646 - kthread_stop(s->task); 647 - else 643 + if (s) { 644 + atomic_inc(&s->terminate); 645 + wake_up_process(s->task); 646 + } else 648 647 err = -ENOENT; 649 648 650 649 up_read(&bnep_session_sem);
+2 -1
net/bluetooth/cmtp/capi.c
··· 386 386 387 387 capi_ctr_down(ctrl); 388 388 389 - kthread_stop(session->task); 389 + atomic_inc(&session->terminate); 390 + wake_up_process(session->task); 390 391 } 391 392 392 393 static void cmtp_register_appl(struct capi_ctr *ctrl, __u16 appl, capi_register_params *rp)
+1
net/bluetooth/cmtp/cmtp.h
··· 81 81 82 82 char name[BTNAMSIZ]; 83 83 84 + atomic_t terminate; 84 85 struct task_struct *task; 85 86 86 87 wait_queue_head_t wait;
+12 -8
net/bluetooth/cmtp/core.c
··· 292 292 293 293 init_waitqueue_entry(&wait, current); 294 294 add_wait_queue(sk_sleep(sk), &wait); 295 - while (!kthread_should_stop()) { 295 + while (1) { 296 296 set_current_state(TASK_INTERRUPTIBLE); 297 297 298 + if (atomic_read(&session->terminate)) 299 + break; 298 300 if (sk->sk_state != BT_CONNECTED) 299 301 break; 300 302 ··· 309 307 310 308 schedule(); 311 309 } 312 - set_current_state(TASK_RUNNING); 310 + __set_current_state(TASK_RUNNING); 313 311 remove_wait_queue(sk_sleep(sk), &wait); 314 312 315 313 down_write(&cmtp_session_sem); ··· 382 380 383 381 if (!(session->flags & (1 << CMTP_LOOPBACK))) { 384 382 err = cmtp_attach_device(session); 385 - if (err < 0) 386 - goto detach; 383 + if (err < 0) { 384 + atomic_inc(&session->terminate); 385 + wake_up_process(session->task); 386 + up_write(&cmtp_session_sem); 387 + return err; 388 + } 387 389 } 388 390 389 391 up_write(&cmtp_session_sem); 390 392 return 0; 391 - 392 - detach: 393 - cmtp_detach_device(session); 394 393 395 394 unlink: 396 395 __cmtp_unlink_session(session); ··· 417 414 skb_queue_purge(&session->transmit); 418 415 419 416 /* Stop session thread */ 420 - kthread_stop(session->task); 417 + atomic_inc(&session->terminate); 418 + wake_up_process(session->task); 421 419 } else 422 420 err = -ENOENT; 423 421
+5 -3
net/bluetooth/hci_core.c
··· 1209 1209 1210 1210 BT_ERR("%s command tx timeout", hdev->name); 1211 1211 atomic_set(&hdev->cmd_cnt, 1); 1212 - clear_bit(HCI_RESET, &hdev->flags); 1213 1212 tasklet_schedule(&hdev->cmd_task); 1214 1213 } 1215 1214 ··· 1326 1327 1327 1328 entry = kzalloc(sizeof(struct bdaddr_list), GFP_KERNEL); 1328 1329 if (!entry) { 1329 - return -ENOMEM; 1330 + err = -ENOMEM; 1330 1331 goto err; 1331 1332 } 1332 1333 ··· 2407 2408 if (hdev->sent_cmd) { 2408 2409 atomic_dec(&hdev->cmd_cnt); 2409 2410 hci_send_frame(skb); 2410 - mod_timer(&hdev->cmd_timer, 2411 + if (test_bit(HCI_RESET, &hdev->flags)) 2412 + del_timer(&hdev->cmd_timer); 2413 + else 2414 + mod_timer(&hdev->cmd_timer, 2411 2415 jiffies + msecs_to_jiffies(HCI_CMD_TIMEOUT)); 2412 2416 } else { 2413 2417 skb_queue_head(&hdev->cmd_q, skb);
+8 -9
net/bluetooth/hci_event.c
··· 58 58 if (status) 59 59 return; 60 60 61 - if (test_bit(HCI_MGMT, &hdev->flags) && 62 - test_and_clear_bit(HCI_INQUIRY, &hdev->flags)) 61 + if (test_and_clear_bit(HCI_INQUIRY, &hdev->flags) && 62 + test_bit(HCI_MGMT, &hdev->flags)) 63 63 mgmt_discovering(hdev->id, 0); 64 64 65 65 hci_req_complete(hdev, HCI_OP_INQUIRY_CANCEL, status); ··· 76 76 if (status) 77 77 return; 78 78 79 - if (test_bit(HCI_MGMT, &hdev->flags) && 80 - test_and_clear_bit(HCI_INQUIRY, &hdev->flags)) 79 + if (test_and_clear_bit(HCI_INQUIRY, &hdev->flags) && 80 + test_bit(HCI_MGMT, &hdev->flags)) 81 81 mgmt_discovering(hdev->id, 0); 82 82 83 83 hci_conn_check_pending(hdev); ··· 959 959 return; 960 960 } 961 961 962 - if (test_bit(HCI_MGMT, &hdev->flags) && 963 - !test_and_set_bit(HCI_INQUIRY, 964 - &hdev->flags)) 962 + if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags) && 963 + test_bit(HCI_MGMT, &hdev->flags)) 965 964 mgmt_discovering(hdev->id, 1); 966 965 } 967 966 ··· 1339 1340 1340 1341 BT_DBG("%s status %d", hdev->name, status); 1341 1342 1342 - if (test_bit(HCI_MGMT, &hdev->flags) && 1343 - test_and_clear_bit(HCI_INQUIRY, &hdev->flags)) 1343 + if (test_and_clear_bit(HCI_INQUIRY, &hdev->flags) && 1344 + test_bit(HCI_MGMT, &hdev->flags)) 1344 1345 mgmt_discovering(hdev->id, 0); 1345 1346 1346 1347 hci_req_complete(hdev, HCI_OP_INQUIRY, status);
+9 -10
net/bluetooth/hidp/core.c
··· 764 764 765 765 up_write(&hidp_session_sem); 766 766 767 + kfree(session->rd_data); 767 768 kfree(session); 768 769 return 0; 769 770 } ··· 842 841 843 842 err = input_register_device(input); 844 843 if (err < 0) { 845 - hci_conn_put_device(session->conn); 844 + input_free_device(input); 845 + session->input = NULL; 846 846 return err; 847 847 } 848 848 ··· 1046 1044 } 1047 1045 1048 1046 err = hid_add_device(session->hid); 1049 - if (err < 0) 1050 - goto err_add_device; 1047 + if (err < 0) { 1048 + atomic_inc(&session->terminate); 1049 + wake_up_process(session->task); 1050 + up_write(&hidp_session_sem); 1051 + return err; 1052 + } 1051 1053 1052 1054 if (session->input) { 1053 1055 hidp_send_ctrl_message(session, ··· 1064 1058 1065 1059 up_write(&hidp_session_sem); 1066 1060 return 0; 1067 - 1068 - err_add_device: 1069 - hid_destroy_device(session->hid); 1070 - session->hid = NULL; 1071 - atomic_inc(&session->terminate); 1072 - wake_up_process(session->task); 1073 1061 1074 1062 unlink: 1075 1063 hidp_del_timer(session); ··· 1090 1090 failed: 1091 1091 up_write(&hidp_session_sem); 1092 1092 1093 - input_free_device(session->input); 1094 1093 kfree(session); 1095 1094 return err; 1096 1095 }
+3 -3
net/bluetooth/l2cap_core.c
··· 1159 1159 int timeo = HZ/5; 1160 1160 1161 1161 add_wait_queue(sk_sleep(sk), &wait); 1162 - while ((chan->unacked_frames > 0 && chan->conn)) { 1163 - set_current_state(TASK_INTERRUPTIBLE); 1164 - 1162 + set_current_state(TASK_INTERRUPTIBLE); 1163 + while (chan->unacked_frames > 0 && chan->conn) { 1165 1164 if (!timeo) 1166 1165 timeo = HZ/5; 1167 1166 ··· 1172 1173 release_sock(sk); 1173 1174 timeo = schedule_timeout(timeo); 1174 1175 lock_sock(sk); 1176 + set_current_state(TASK_INTERRUPTIBLE); 1175 1177 1176 1178 err = sock_error(sk); 1177 1179 if (err)
+16 -16
net/bluetooth/l2cap_sock.c
··· 235 235 236 236 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); 237 237 238 - if (sk->sk_state != BT_LISTEN) { 239 - err = -EBADFD; 240 - goto done; 241 - } 242 - 243 238 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); 244 239 245 240 BT_DBG("sk %p timeo %ld", sk, timeo); 246 241 247 242 /* Wait for an incoming connection. (wake-one). */ 248 243 add_wait_queue_exclusive(sk_sleep(sk), &wait); 249 - while (!(nsk = bt_accept_dequeue(sk, newsock))) { 244 + while (1) { 250 245 set_current_state(TASK_INTERRUPTIBLE); 251 - if (!timeo) { 252 - err = -EAGAIN; 253 - break; 254 - } 255 - 256 - release_sock(sk); 257 - timeo = schedule_timeout(timeo); 258 - lock_sock_nested(sk, SINGLE_DEPTH_NESTING); 259 246 260 247 if (sk->sk_state != BT_LISTEN) { 261 248 err = -EBADFD; 249 + break; 250 + } 251 + 252 + nsk = bt_accept_dequeue(sk, newsock); 253 + if (nsk) 254 + break; 255 + 256 + if (!timeo) { 257 + err = -EAGAIN; 262 258 break; 263 259 } 264 260 ··· 262 266 err = sock_intr_errno(timeo); 263 267 break; 264 268 } 269 + 270 + release_sock(sk); 271 + timeo = schedule_timeout(timeo); 272 + lock_sock_nested(sk, SINGLE_DEPTH_NESTING); 265 273 } 266 - set_current_state(TASK_RUNNING); 274 + __set_current_state(TASK_RUNNING); 267 275 remove_wait_queue(sk_sleep(sk), &wait); 268 276 269 277 if (err) ··· 993 993 INIT_LIST_HEAD(&bt_sk(sk)->accept_q); 994 994 995 995 sk->sk_destruct = l2cap_sock_destruct; 996 - sk->sk_sndtimeo = msecs_to_jiffies(L2CAP_CONN_TIMEOUT); 996 + sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT; 997 997 998 998 sock_reset_flag(sk, SOCK_ZAPPED); 999 999
+7 -10
net/bluetooth/rfcomm/core.c
··· 62 62 #define rfcomm_lock() mutex_lock(&rfcomm_mutex) 63 63 #define rfcomm_unlock() mutex_unlock(&rfcomm_mutex) 64 64 65 - static unsigned long rfcomm_event; 66 65 67 66 static LIST_HEAD(session_list); 68 67 ··· 119 120 { 120 121 if (!rfcomm_thread) 121 122 return; 122 - set_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event); 123 123 wake_up_process(rfcomm_thread); 124 124 } 125 125 ··· 2036 2038 2037 2039 rfcomm_add_listener(BDADDR_ANY); 2038 2040 2039 - while (!kthread_should_stop()) { 2041 + while (1) { 2040 2042 set_current_state(TASK_INTERRUPTIBLE); 2041 - if (!test_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event)) { 2042 - /* No pending events. Let's sleep. 2043 - * Incoming connections and data will wake us up. */ 2044 - schedule(); 2045 - } 2046 - set_current_state(TASK_RUNNING); 2043 + 2044 + if (kthread_should_stop()) 2045 + break; 2047 2046 2048 2047 /* Process stuff */ 2049 - clear_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event); 2050 2048 rfcomm_process_sessions(); 2049 + 2050 + schedule(); 2051 2051 } 2052 + __set_current_state(TASK_RUNNING); 2052 2053 2053 2054 rfcomm_kill_listener(); 2054 2055
+15 -15
net/bluetooth/rfcomm/sock.c
··· 485 485 486 486 lock_sock(sk); 487 487 488 - if (sk->sk_state != BT_LISTEN) { 489 - err = -EBADFD; 490 - goto done; 491 - } 492 - 493 488 if (sk->sk_type != SOCK_STREAM) { 494 489 err = -EINVAL; 495 490 goto done; ··· 496 501 497 502 /* Wait for an incoming connection. (wake-one). */ 498 503 add_wait_queue_exclusive(sk_sleep(sk), &wait); 499 - while (!(nsk = bt_accept_dequeue(sk, newsock))) { 504 + while (1) { 500 505 set_current_state(TASK_INTERRUPTIBLE); 501 - if (!timeo) { 502 - err = -EAGAIN; 503 - break; 504 - } 505 - 506 - release_sock(sk); 507 - timeo = schedule_timeout(timeo); 508 - lock_sock(sk); 509 506 510 507 if (sk->sk_state != BT_LISTEN) { 511 508 err = -EBADFD; 509 + break; 510 + } 511 + 512 + nsk = bt_accept_dequeue(sk, newsock); 513 + if (nsk) 514 + break; 515 + 516 + if (!timeo) { 517 + err = -EAGAIN; 512 518 break; 513 519 } 514 520 ··· 517 521 err = sock_intr_errno(timeo); 518 522 break; 519 523 } 524 + 525 + release_sock(sk); 526 + timeo = schedule_timeout(timeo); 527 + lock_sock(sk); 520 528 } 521 - set_current_state(TASK_RUNNING); 529 + __set_current_state(TASK_RUNNING); 522 530 remove_wait_queue(sk_sleep(sk), &wait); 523 531 524 532 if (err)
+15 -15
net/bluetooth/sco.c
··· 564 564 565 565 lock_sock(sk); 566 566 567 - if (sk->sk_state != BT_LISTEN) { 568 - err = -EBADFD; 569 - goto done; 570 - } 571 - 572 567 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); 573 568 574 569 BT_DBG("sk %p timeo %ld", sk, timeo); 575 570 576 571 /* Wait for an incoming connection. (wake-one). */ 577 572 add_wait_queue_exclusive(sk_sleep(sk), &wait); 578 - while (!(ch = bt_accept_dequeue(sk, newsock))) { 573 + while (1) { 579 574 set_current_state(TASK_INTERRUPTIBLE); 580 - if (!timeo) { 581 - err = -EAGAIN; 582 - break; 583 - } 584 - 585 - release_sock(sk); 586 - timeo = schedule_timeout(timeo); 587 - lock_sock(sk); 588 575 589 576 if (sk->sk_state != BT_LISTEN) { 590 577 err = -EBADFD; 578 + break; 579 + } 580 + 581 + ch = bt_accept_dequeue(sk, newsock); 582 + if (ch) 583 + break; 584 + 585 + if (!timeo) { 586 + err = -EAGAIN; 591 587 break; 592 588 } 593 589 ··· 591 595 err = sock_intr_errno(timeo); 592 596 break; 593 597 } 598 + 599 + release_sock(sk); 600 + timeo = schedule_timeout(timeo); 601 + lock_sock(sk); 594 602 } 595 - set_current_state(TASK_RUNNING); 603 + __set_current_state(TASK_RUNNING); 596 604 remove_wait_queue(sk_sleep(sk), &wait); 597 605 598 606 if (err)
+1 -1
net/mac80211/main.c
··· 1013 1013 cancel_work_sync(&local->reconfig_filter); 1014 1014 1015 1015 ieee80211_clear_tx_pending(local); 1016 - sta_info_stop(local); 1017 1016 rate_control_deinitialize(local); 1018 1017 1019 1018 if (skb_queue_len(&local->skb_queue) || ··· 1024 1025 1025 1026 destroy_workqueue(local->workqueue); 1026 1027 wiphy_unregister(local->hw.wiphy); 1028 + sta_info_stop(local); 1027 1029 ieee80211_wep_free(local); 1028 1030 ieee80211_led_exit(local); 1029 1031 kfree(local->int_scan_req);
+1 -1
net/mac80211/sta_info.c
··· 792 792 BUG_ON(!sdata->bss); 793 793 794 794 atomic_dec(&sdata->bss->num_sta_ps); 795 - __sta_info_clear_tim_bit(sdata->bss, sta); 795 + sta_info_clear_tim_bit(sta); 796 796 } 797 797 798 798 local->num_sta--;
+7
net/wireless/core.c
··· 616 616 if (res) 617 617 goto out_rm_dev; 618 618 619 + rtnl_lock(); 620 + rdev->wiphy.registered = true; 621 + rtnl_unlock(); 619 622 return 0; 620 623 621 624 out_rm_dev: ··· 649 646 void wiphy_unregister(struct wiphy *wiphy) 650 647 { 651 648 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); 649 + 650 + rtnl_lock(); 651 + rdev->wiphy.registered = false; 652 + rtnl_unlock(); 652 653 653 654 rfkill_unregister(rdev->rfkill); 654 655
+1
net/wireless/reg.c
··· 851 851 return; 852 852 } 853 853 854 + chan->beacon_found = false; 854 855 chan->flags = flags | bw_flags | map_regdom_flags(reg_rule->flags); 855 856 chan->max_antenna_gain = min(chan->orig_mag, 856 857 (int) MBI_TO_DBI(power_rule->max_antenna_gain));
+2
net/wireless/sme.c
··· 118 118 i++, j++) 119 119 request->channels[i] = 120 120 &wdev->wiphy->bands[band]->channels[j]; 121 + request->rates[band] = 122 + (1 << wdev->wiphy->bands[band]->n_bitrates) - 1; 121 123 } 122 124 } 123 125 request->n_channels = n_channels;
+4 -2
net/wireless/sysfs.c
··· 93 93 94 94 if (rdev->ops->suspend) { 95 95 rtnl_lock(); 96 - ret = rdev->ops->suspend(&rdev->wiphy, rdev->wowlan); 96 + if (rdev->wiphy.registered) 97 + ret = rdev->ops->suspend(&rdev->wiphy, rdev->wowlan); 97 98 rtnl_unlock(); 98 99 } 99 100 ··· 113 112 114 113 if (rdev->ops->resume) { 115 114 rtnl_lock(); 116 - ret = rdev->ops->resume(&rdev->wiphy); 115 + if (rdev->wiphy.registered) 116 + ret = rdev->ops->resume(&rdev->wiphy); 117 117 rtnl_unlock(); 118 118 } 119 119