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

Conflicts:
drivers/net/wireless/iwlwifi/dvm/tx.c

+142 -92
+5
drivers/bcma/bcma_private.h
··· 97 97 #ifdef CONFIG_BCMA_DRIVER_GPIO 98 98 /* driver_gpio.c */ 99 99 int bcma_gpio_init(struct bcma_drv_cc *cc); 100 + int bcma_gpio_unregister(struct bcma_drv_cc *cc); 100 101 #else 101 102 static inline int bcma_gpio_init(struct bcma_drv_cc *cc) 102 103 { 103 104 return -ENOTSUPP; 105 + } 106 + static inline int bcma_gpio_unregister(struct bcma_drv_cc *cc) 107 + { 108 + return 0; 104 109 } 105 110 #endif /* CONFIG_BCMA_DRIVER_GPIO */ 106 111
+1 -1
drivers/bcma/driver_chipcommon_nflash.c
··· 21 21 struct bcma_bus *bus = cc->core->bus; 22 22 23 23 if (bus->chipinfo.id != BCMA_CHIP_ID_BCM4706 && 24 - cc->core->id.rev != 0x38) { 24 + cc->core->id.rev != 38) { 25 25 bcma_err(bus, "NAND flash on unsupported board!\n"); 26 26 return -ENOTSUPP; 27 27 }
+5
drivers/bcma/driver_gpio.c
··· 107 107 108 108 return gpiochip_add(chip); 109 109 } 110 + 111 + int bcma_gpio_unregister(struct bcma_drv_cc *cc) 112 + { 113 + return gpiochip_remove(&cc->gpio); 114 + }
+7
drivers/bcma/main.c
··· 276 276 void bcma_bus_unregister(struct bcma_bus *bus) 277 277 { 278 278 struct bcma_device *cores[3]; 279 + int err; 280 + 281 + err = bcma_gpio_unregister(&bus->drv_cc); 282 + if (err == -EBUSY) 283 + bcma_err(bus, "Some GPIOs are still in use.\n"); 284 + else if (err) 285 + bcma_err(bus, "Can not unregister GPIO driver: %i\n", err); 279 286 280 287 cores[0] = bcma_find_core(bus, BCMA_CORE_MIPS_74K); 281 288 cores[1] = bcma_find_core(bus, BCMA_CORE_PCIE);
+21 -14
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
··· 36 36 #include "debug.h" 37 37 38 38 #define N_TX_QUEUES 4 /* #tx queues on mac80211<->driver interface */ 39 + #define BRCMS_FLUSH_TIMEOUT 500 /* msec */ 39 40 40 41 /* Flags we support */ 41 42 #define MAC_FILTERS (FIF_PROMISC_IN_BSS | \ ··· 713 712 wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, blocked); 714 713 } 715 714 715 + static bool brcms_tx_flush_completed(struct brcms_info *wl) 716 + { 717 + bool result; 718 + 719 + spin_lock_bh(&wl->lock); 720 + result = brcms_c_tx_flush_completed(wl->wlc); 721 + spin_unlock_bh(&wl->lock); 722 + return result; 723 + } 724 + 716 725 static void brcms_ops_flush(struct ieee80211_hw *hw, bool drop) 717 726 { 718 727 struct brcms_info *wl = hw->priv; 728 + int ret; 719 729 720 730 no_printk("%s: drop = %s\n", __func__, drop ? "true" : "false"); 721 731 722 - /* wait for packet queue and dma fifos to run empty */ 723 - spin_lock_bh(&wl->lock); 724 - brcms_c_wait_for_tx_completion(wl->wlc, drop); 725 - spin_unlock_bh(&wl->lock); 732 + ret = wait_event_timeout(wl->tx_flush_wq, 733 + brcms_tx_flush_completed(wl), 734 + msecs_to_jiffies(BRCMS_FLUSH_TIMEOUT)); 735 + 736 + brcms_dbg_mac80211(wl->wlc->hw->d11core, 737 + "ret=%d\n", jiffies_to_msecs(ret)); 726 738 } 727 739 728 740 static const struct ieee80211_ops brcms_ops = { ··· 790 776 791 777 done: 792 778 spin_unlock_bh(&wl->lock); 779 + wake_up(&wl->tx_flush_wq); 793 780 } 794 781 795 782 /* ··· 1038 1023 wl->wiphy = hw->wiphy; 1039 1024 1040 1025 atomic_set(&wl->callbacks, 0); 1026 + 1027 + init_waitqueue_head(&wl->tx_flush_wq); 1041 1028 1042 1029 /* setup the bottom half handler */ 1043 1030 tasklet_init(&wl->tasklet, brcms_dpc, (unsigned long) wl); ··· 1629 1612 wiphy_rfkill_start_polling(wl->pub->ieee_hw->wiphy); 1630 1613 spin_lock_bh(&wl->lock); 1631 1614 return blocked; 1632 - } 1633 - 1634 - /* 1635 - * precondition: perimeter lock has been acquired 1636 - */ 1637 - void brcms_msleep(struct brcms_info *wl, uint ms) 1638 - { 1639 - spin_unlock_bh(&wl->lock); 1640 - msleep(ms); 1641 - spin_lock_bh(&wl->lock); 1642 1615 }
+2 -1
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.h
··· 68 68 spinlock_t lock; /* per-device perimeter lock */ 69 69 spinlock_t isr_lock; /* per-device ISR synchronization lock */ 70 70 71 + /* tx flush */ 72 + wait_queue_head_t tx_flush_wq; 71 73 72 74 /* timer related fields */ 73 75 atomic_t callbacks; /* # outstanding callback functions */ ··· 102 100 extern void brcms_free_timer(struct brcms_timer *timer); 103 101 extern void brcms_add_timer(struct brcms_timer *timer, uint ms, int periodic); 104 102 extern bool brcms_del_timer(struct brcms_timer *timer); 105 - extern void brcms_msleep(struct brcms_info *wl, uint ms); 106 103 extern void brcms_dpc(unsigned long data); 107 104 extern void brcms_timer(struct brcms_timer *t); 108 105 extern void brcms_fatal_error(struct brcms_info *wl);
+12 -28
drivers/net/wireless/brcm80211/brcmsmac/main.c
··· 1025 1025 static bool 1026 1026 brcms_b_txstatus(struct brcms_hardware *wlc_hw, bool bound, bool *fatal) 1027 1027 { 1028 - bool morepending = false; 1029 1028 struct bcma_device *core; 1030 1029 struct tx_status txstatus, *txs; 1031 1030 u32 s1, s2; ··· 1038 1039 txs = &txstatus; 1039 1040 core = wlc_hw->d11core; 1040 1041 *fatal = false; 1041 - s1 = bcma_read32(core, D11REGOFFS(frmtxstatus)); 1042 - while (!(*fatal) 1043 - && (s1 & TXS_V)) { 1044 - /* !give others some time to run! */ 1045 - if (n >= max_tx_num) { 1046 - morepending = true; 1047 - break; 1048 - } 1049 1042 1043 + while (n < max_tx_num) { 1044 + s1 = bcma_read32(core, D11REGOFFS(frmtxstatus)); 1050 1045 if (s1 == 0xffffffff) { 1051 1046 brcms_err(core, "wl%d: %s: dead chip\n", wlc_hw->unit, 1052 1047 __func__); 1053 1048 *fatal = true; 1054 1049 return false; 1055 1050 } 1056 - s2 = bcma_read32(core, D11REGOFFS(frmtxstatus2)); 1051 + /* only process when valid */ 1052 + if (!(s1 & TXS_V)) 1053 + break; 1057 1054 1055 + s2 = bcma_read32(core, D11REGOFFS(frmtxstatus2)); 1058 1056 txs->status = s1 & TXS_STATUS_MASK; 1059 1057 txs->frameid = (s1 & TXS_FID_MASK) >> TXS_FID_SHIFT; 1060 1058 txs->sequence = s2 & TXS_SEQ_MASK; ··· 1059 1063 txs->lasttxtime = 0; 1060 1064 1061 1065 *fatal = brcms_c_dotxstatus(wlc_hw->wlc, txs); 1062 - 1063 - s1 = bcma_read32(core, D11REGOFFS(frmtxstatus)); 1066 + if (*fatal == true) 1067 + return false; 1064 1068 n++; 1065 1069 } 1066 1070 1067 - if (*fatal) 1068 - return false; 1069 - 1070 - return morepending; 1071 + return n >= max_tx_num; 1071 1072 } 1072 1073 1073 1074 static void brcms_c_tbtt(struct brcms_c_info *wlc) ··· 7513 7520 return wlc->band->bandunit; 7514 7521 } 7515 7522 7516 - void brcms_c_wait_for_tx_completion(struct brcms_c_info *wlc, bool drop) 7523 + bool brcms_c_tx_flush_completed(struct brcms_c_info *wlc) 7517 7524 { 7518 - int timeout = 20; 7519 7525 int i; 7520 7526 7521 7527 /* Kick DMA to send any pending AMPDU */ 7522 7528 for (i = 0; i < ARRAY_SIZE(wlc->hw->di); i++) 7523 7529 if (wlc->hw->di[i]) 7524 - dma_txflush(wlc->hw->di[i]); 7530 + dma_kick_tx(wlc->hw->di[i]); 7525 7531 7526 - /* wait for queue and DMA fifos to run dry */ 7527 - while (brcms_txpktpendtot(wlc) > 0) { 7528 - brcms_msleep(wlc->wl, 1); 7529 - 7530 - if (--timeout == 0) 7531 - break; 7532 - } 7533 - 7534 - WARN_ON_ONCE(timeout == 0); 7532 + return !brcms_txpktpendtot(wlc); 7535 7533 } 7536 7534 7537 7535 void brcms_c_set_beacon_listen_interval(struct brcms_c_info *wlc, u8 interval)
+1 -2
drivers/net/wireless/brcm80211/brcmsmac/pub.h
··· 314 314 extern void brcms_c_scan_start(struct brcms_c_info *wlc); 315 315 extern void brcms_c_scan_stop(struct brcms_c_info *wlc); 316 316 extern int brcms_c_get_curband(struct brcms_c_info *wlc); 317 - extern void brcms_c_wait_for_tx_completion(struct brcms_c_info *wlc, 318 - bool drop); 319 317 extern int brcms_c_set_channel(struct brcms_c_info *wlc, u16 channel); 320 318 extern int brcms_c_set_rate_limit(struct brcms_c_info *wlc, u16 srl, u16 lrl); 321 319 extern void brcms_c_get_current_rateset(struct brcms_c_info *wlc, ··· 330 332 extern int brcms_c_get_tx_power(struct brcms_c_info *wlc); 331 333 extern bool brcms_c_check_radio_disabled(struct brcms_c_info *wlc); 332 334 extern void brcms_c_mute(struct brcms_c_info *wlc, bool on); 335 + extern bool brcms_c_tx_flush_completed(struct brcms_c_info *wlc); 333 336 334 337 #endif /* _BRCM_PUB_H_ */
+7 -10
drivers/net/wireless/iwlwifi/dvm/tx.c
··· 1145 1145 next_reclaimed = ssn; 1146 1146 } 1147 1147 1148 + if (tid != IWL_TID_NON_QOS) { 1149 + priv->tid_data[sta_id][tid].next_reclaimed = 1150 + next_reclaimed; 1151 + IWL_DEBUG_TX_REPLY(priv, "Next reclaimed packet:%d\n", 1152 + next_reclaimed); 1153 + } 1154 + 1148 1155 iwl_trans_reclaim(priv->trans, txq_id, ssn, &skbs); 1149 1156 1150 1157 iwlagn_check_ratid_empty(priv, sta_id, tid); ··· 1201 1194 tx_resp); 1202 1195 if (!is_agg) 1203 1196 iwlagn_non_agg_tx_status(priv, ctx, hdr->addr1); 1204 - 1205 - /* 1206 - * W/A for FW bug - the seq_ctl isn't updated when the 1207 - * queues are flushed. Fetch it from the packet itself 1208 - */ 1209 - if (!is_agg && status == TX_STATUS_FAIL_FIFO_FLUSHED) { 1210 - next_reclaimed = le16_to_cpu(hdr->seq_ctrl); 1211 - next_reclaimed = 1212 - SEQ_TO_SN(next_reclaimed + 0x10); 1213 - } 1214 1197 1215 1198 is_offchannel_skb = 1216 1199 (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN);
+5 -4
drivers/net/wireless/mwifiex/scan.c
··· 1563 1563 dev_err(adapter->dev, "SCAN_RESP: too many AP returned (%d)\n", 1564 1564 scan_rsp->number_of_sets); 1565 1565 ret = -1; 1566 - goto done; 1566 + goto check_next_scan; 1567 1567 } 1568 1568 1569 1569 bytes_left = le16_to_cpu(scan_rsp->bss_descript_size); ··· 1634 1634 if (!beacon_size || beacon_size > bytes_left) { 1635 1635 bss_info += bytes_left; 1636 1636 bytes_left = 0; 1637 - return -1; 1637 + ret = -1; 1638 + goto check_next_scan; 1638 1639 } 1639 1640 1640 1641 /* Initialize the current working beacon pointer for this BSS ··· 1691 1690 dev_err(priv->adapter->dev, 1692 1691 "%s: bytes left < IE length\n", 1693 1692 __func__); 1694 - goto done; 1693 + goto check_next_scan; 1695 1694 } 1696 1695 if (element_id == WLAN_EID_DS_PARAMS) { 1697 1696 channel = *(current_ptr + sizeof(struct ieee_types_header)); ··· 1754 1753 } 1755 1754 } 1756 1755 1756 + check_next_scan: 1757 1757 spin_lock_irqsave(&adapter->scan_pending_q_lock, flags); 1758 1758 if (list_empty(&adapter->scan_pending_q)) { 1759 1759 spin_unlock_irqrestore(&adapter->scan_pending_q_lock, flags); ··· 1815 1813 } 1816 1814 } 1817 1815 1818 - done: 1819 1816 return ret; 1820 1817 } 1821 1818
+18 -18
drivers/net/wireless/mwl8k.c
··· 334 334 #define MWL8K_STA(_sta) ((struct mwl8k_sta *)&((_sta)->drv_priv)) 335 335 336 336 static const struct ieee80211_channel mwl8k_channels_24[] = { 337 - { .center_freq = 2412, .hw_value = 1, }, 338 - { .center_freq = 2417, .hw_value = 2, }, 339 - { .center_freq = 2422, .hw_value = 3, }, 340 - { .center_freq = 2427, .hw_value = 4, }, 341 - { .center_freq = 2432, .hw_value = 5, }, 342 - { .center_freq = 2437, .hw_value = 6, }, 343 - { .center_freq = 2442, .hw_value = 7, }, 344 - { .center_freq = 2447, .hw_value = 8, }, 345 - { .center_freq = 2452, .hw_value = 9, }, 346 - { .center_freq = 2457, .hw_value = 10, }, 347 - { .center_freq = 2462, .hw_value = 11, }, 348 - { .center_freq = 2467, .hw_value = 12, }, 349 - { .center_freq = 2472, .hw_value = 13, }, 350 - { .center_freq = 2484, .hw_value = 14, }, 337 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2412, .hw_value = 1, }, 338 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2417, .hw_value = 2, }, 339 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2422, .hw_value = 3, }, 340 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2427, .hw_value = 4, }, 341 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2432, .hw_value = 5, }, 342 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2437, .hw_value = 6, }, 343 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2442, .hw_value = 7, }, 344 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2447, .hw_value = 8, }, 345 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2452, .hw_value = 9, }, 346 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2457, .hw_value = 10, }, 347 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2462, .hw_value = 11, }, 348 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2467, .hw_value = 12, }, 349 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2472, .hw_value = 13, }, 350 + { .band = IEEE80211_BAND_2GHZ, .center_freq = 2484, .hw_value = 14, }, 351 351 }; 352 352 353 353 static const struct ieee80211_rate mwl8k_rates_24[] = { ··· 368 368 }; 369 369 370 370 static const struct ieee80211_channel mwl8k_channels_50[] = { 371 - { .center_freq = 5180, .hw_value = 36, }, 372 - { .center_freq = 5200, .hw_value = 40, }, 373 - { .center_freq = 5220, .hw_value = 44, }, 374 - { .center_freq = 5240, .hw_value = 48, }, 371 + { .band = IEEE80211_BAND_5GHZ, .center_freq = 5180, .hw_value = 36, }, 372 + { .band = IEEE80211_BAND_5GHZ, .center_freq = 5200, .hw_value = 40, }, 373 + { .band = IEEE80211_BAND_5GHZ, .center_freq = 5220, .hw_value = 44, }, 374 + { .band = IEEE80211_BAND_5GHZ, .center_freq = 5240, .hw_value = 48, }, 375 375 }; 376 376 377 377 static const struct ieee80211_rate mwl8k_rates_50[] = {
+4 -3
drivers/net/wireless/rtlwifi/base.c
··· 1004 1004 is_tx ? "Tx" : "Rx"); 1005 1005 1006 1006 if (is_tx) { 1007 - rtl_lps_leave(hw); 1007 + schedule_work(&rtlpriv-> 1008 + works.lps_leave_work); 1008 1009 ppsc->last_delaylps_stamp_jiffies = 1009 1010 jiffies; 1010 1011 } ··· 1015 1014 } 1016 1015 } else if (ETH_P_ARP == ether_type) { 1017 1016 if (is_tx) { 1018 - rtl_lps_leave(hw); 1017 + schedule_work(&rtlpriv->works.lps_leave_work); 1019 1018 ppsc->last_delaylps_stamp_jiffies = jiffies; 1020 1019 } 1021 1020 ··· 1025 1024 "802.1X %s EAPOL pkt!!\n", is_tx ? "Tx" : "Rx"); 1026 1025 1027 1026 if (is_tx) { 1028 - rtl_lps_leave(hw); 1027 + schedule_work(&rtlpriv->works.lps_leave_work); 1029 1028 ppsc->last_delaylps_stamp_jiffies = jiffies; 1030 1029 } 1031 1030
+2 -2
drivers/net/wireless/rtlwifi/usb.c
··· 542 542 WARN_ON(skb_queue_empty(&rx_queue)); 543 543 while (!skb_queue_empty(&rx_queue)) { 544 544 _skb = skb_dequeue(&rx_queue); 545 - _rtl_usb_rx_process_agg(hw, skb); 546 - ieee80211_rx_irqsafe(hw, skb); 545 + _rtl_usb_rx_process_agg(hw, _skb); 546 + ieee80211_rx_irqsafe(hw, _skb); 547 547 } 548 548 } 549 549
+12
drivers/ssb/driver_gpio.c
··· 196 196 197 197 return -1; 198 198 } 199 + 200 + int ssb_gpio_unregister(struct ssb_bus *bus) 201 + { 202 + if (ssb_chipco_available(&bus->chipco) || 203 + ssb_extif_available(&bus->extif)) { 204 + return gpiochip_remove(&bus->gpio); 205 + } else { 206 + SSB_WARN_ON(1); 207 + } 208 + 209 + return -1; 210 + }
+9
drivers/ssb/main.c
··· 443 443 444 444 void ssb_bus_unregister(struct ssb_bus *bus) 445 445 { 446 + int err; 447 + 448 + err = ssb_gpio_unregister(bus); 449 + if (err == -EBUSY) 450 + ssb_dprintk(KERN_ERR PFX "Some GPIOs are still in use.\n"); 451 + else if (err) 452 + ssb_dprintk(KERN_ERR PFX 453 + "Can not unregister GPIO driver: %i\n", err); 454 + 446 455 ssb_buses_lock(); 447 456 ssb_devices_unregister(bus); 448 457 list_del(&bus->list);
+5
drivers/ssb/ssb_private.h
··· 267 267 268 268 #ifdef CONFIG_SSB_DRIVER_GPIO 269 269 extern int ssb_gpio_init(struct ssb_bus *bus); 270 + extern int ssb_gpio_unregister(struct ssb_bus *bus); 270 271 #else /* CONFIG_SSB_DRIVER_GPIO */ 271 272 static inline int ssb_gpio_init(struct ssb_bus *bus) 272 273 { 273 274 return -ENOTSUPP; 275 + } 276 + static inline int ssb_gpio_unregister(struct ssb_bus *bus) 277 + { 278 + return 0; 274 279 } 275 280 #endif /* CONFIG_SSB_DRIVER_GPIO */ 276 281
+3 -3
net/bluetooth/hci_conn.c
··· 249 249 __u8 reason = hci_proto_disconn_ind(conn); 250 250 251 251 switch (conn->type) { 252 - case ACL_LINK: 253 - hci_acl_disconn(conn, reason); 254 - break; 255 252 case AMP_LINK: 256 253 hci_amp_disconn(conn, reason); 254 + break; 255 + default: 256 + hci_acl_disconn(conn, reason); 257 257 break; 258 258 } 259 259 }
+13
net/bluetooth/smp.c
··· 859 859 860 860 skb_pull(skb, sizeof(code)); 861 861 862 + /* 863 + * The SMP context must be initialized for all other PDUs except 864 + * pairing and security requests. If we get any other PDU when 865 + * not initialized simply disconnect (done if this function 866 + * returns an error). 867 + */ 868 + if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ && 869 + !conn->smp_chan) { 870 + BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code); 871 + kfree_skb(skb); 872 + return -ENOTSUPP; 873 + } 874 + 862 875 switch (code) { 863 876 case SMP_CMD_PAIRING_REQ: 864 877 reason = smp_cmd_pairing_req(conn, skb);
+2 -1
net/mac80211/cfg.c
··· 2085 2085 { 2086 2086 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 2087 2087 2088 - memcpy(sdata->vif.bss_conf.mcast_rate, rate, sizeof(rate)); 2088 + memcpy(sdata->vif.bss_conf.mcast_rate, rate, 2089 + sizeof(int) * IEEE80211_NUM_BANDS); 2089 2090 2090 2091 return 0; 2091 2092 }
+7 -4
net/mac80211/mlme.c
··· 3462 3462 3463 3463 ret = 0; 3464 3464 3465 + out: 3465 3466 while (!cfg80211_chandef_usable(sdata->local->hw.wiphy, chandef, 3466 3467 IEEE80211_CHAN_DISABLED)) { 3467 3468 if (WARN_ON(chandef->width == NL80211_CHAN_WIDTH_20_NOHT)) { ··· 3471 3470 goto out; 3472 3471 } 3473 3472 3474 - ret = chandef_downgrade(chandef); 3473 + ret |= chandef_downgrade(chandef); 3475 3474 } 3476 3475 3477 3476 if (chandef->width != vht_chandef.width) 3478 3477 sdata_info(sdata, 3479 - "local regulatory prevented using AP HT/VHT configuration, downgraded\n"); 3478 + "capabilities/regulatory prevented using AP HT/VHT configuration, downgraded\n"); 3480 3479 3481 - out: 3482 3480 WARN_ON_ONCE(!cfg80211_chandef_valid(chandef)); 3483 3481 return ret; 3484 3482 } ··· 3591 3591 */ 3592 3592 ret = ieee80211_vif_use_channel(sdata, &chandef, 3593 3593 IEEE80211_CHANCTX_SHARED); 3594 - while (ret && chandef.width != NL80211_CHAN_WIDTH_20_NOHT) 3594 + while (ret && chandef.width != NL80211_CHAN_WIDTH_20_NOHT) { 3595 3595 ifmgd->flags |= chandef_downgrade(&chandef); 3596 + ret = ieee80211_vif_use_channel(sdata, &chandef, 3597 + IEEE80211_CHANCTX_SHARED); 3598 + } 3596 3599 return ret; 3597 3600 } 3598 3601
+1 -1
net/wireless/scan.c
··· 1404 1404 &iwe, IW_EV_UINT_LEN); 1405 1405 } 1406 1406 1407 - buf = kmalloc(30, GFP_ATOMIC); 1407 + buf = kmalloc(31, GFP_ATOMIC); 1408 1408 if (buf) { 1409 1409 memset(&iwe, 0, sizeof(iwe)); 1410 1410 iwe.cmd = IWEVCUSTOM;