diff options
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9002_calib.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_phy.c | 22 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.h | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/rc.c | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/phy_n.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlegacy/iwl-4965-lib.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/mwifiex/sdio.h | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/rtlwifi/pci.c | 35 | ||||
| -rw-r--r-- | net/mac80211/mlme.c | 7 | ||||
| -rw-r--r-- | net/mac80211/scan.c | 1 | ||||
| -rw-r--r-- | net/wireless/nl80211.c | 4 |
15 files changed, 70 insertions, 27 deletions
diff --git a/drivers/net/wireless/ath/ath9k/Kconfig b/drivers/net/wireless/ath/ath9k/Kconfig index d9ff8413ab9a..d9c08c619a3a 100644 --- a/drivers/net/wireless/ath/ath9k/Kconfig +++ b/drivers/net/wireless/ath/ath9k/Kconfig | |||
| @@ -26,7 +26,6 @@ config ATH9K | |||
| 26 | config ATH9K_PCI | 26 | config ATH9K_PCI |
| 27 | bool "Atheros ath9k PCI/PCIe bus support" | 27 | bool "Atheros ath9k PCI/PCIe bus support" |
| 28 | depends on ATH9K && PCI | 28 | depends on ATH9K && PCI |
| 29 | default PCI | ||
| 30 | ---help--- | 29 | ---help--- |
| 31 | This option enables the PCI bus support in ath9k. | 30 | This option enables the PCI bus support in ath9k. |
| 32 | 31 | ||
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_calib.c b/drivers/net/wireless/ath/ath9k/ar9002_calib.c index 015d97439935..2d4c0910295b 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_calib.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c | |||
| @@ -829,7 +829,7 @@ static bool ar9002_hw_init_cal(struct ath_hw *ah, struct ath9k_channel *chan) | |||
| 829 | if (AR_SREV_9271(ah)) { | 829 | if (AR_SREV_9271(ah)) { |
| 830 | if (!ar9285_hw_cl_cal(ah, chan)) | 830 | if (!ar9285_hw_cl_cal(ah, chan)) |
| 831 | return false; | 831 | return false; |
| 832 | } else if (AR_SREV_9285_12_OR_LATER(ah)) { | 832 | } else if (AR_SREV_9285(ah) && AR_SREV_9285_12_OR_LATER(ah)) { |
| 833 | if (!ar9285_hw_clc(ah, chan)) | 833 | if (!ar9285_hw_clc(ah, chan)) |
| 834 | return false; | 834 | return false; |
| 835 | } else { | 835 | } else { |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c index eee23ecd118a..892c48b15434 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c | |||
| @@ -1381,3 +1381,25 @@ void ar9003_hw_bb_watchdog_dbg_info(struct ath_hw *ah) | |||
| 1381 | "==== BB update: done ====\n\n"); | 1381 | "==== BB update: done ====\n\n"); |
| 1382 | } | 1382 | } |
| 1383 | EXPORT_SYMBOL(ar9003_hw_bb_watchdog_dbg_info); | 1383 | EXPORT_SYMBOL(ar9003_hw_bb_watchdog_dbg_info); |
| 1384 | |||
| 1385 | void ar9003_hw_disable_phy_restart(struct ath_hw *ah) | ||
| 1386 | { | ||
| 1387 | u32 val; | ||
| 1388 | |||
| 1389 | /* While receiving unsupported rate frame rx state machine | ||
| 1390 | * gets into a state 0xb and if phy_restart happens in that | ||
| 1391 | * state, BB would go hang. If RXSM is in 0xb state after | ||
| 1392 | * first bb panic, ensure to disable the phy_restart. | ||
| 1393 | */ | ||
| 1394 | if (!((MS(ah->bb_watchdog_last_status, | ||
| 1395 | AR_PHY_WATCHDOG_RX_OFDM_SM) == 0xb) || | ||
| 1396 | ah->bb_hang_rx_ofdm)) | ||
| 1397 | return; | ||
| 1398 | |||
| 1399 | ah->bb_hang_rx_ofdm = true; | ||
| 1400 | val = REG_READ(ah, AR_PHY_RESTART); | ||
| 1401 | val &= ~AR_PHY_RESTART_ENA; | ||
| 1402 | |||
| 1403 | REG_WRITE(ah, AR_PHY_RESTART, val); | ||
| 1404 | } | ||
| 1405 | EXPORT_SYMBOL(ar9003_hw_disable_phy_restart); | ||
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index 72543ce8f616..1be7c8bbef84 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
| @@ -1555,9 +1555,12 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan, | |||
| 1555 | if (ah->btcoex_hw.enabled) | 1555 | if (ah->btcoex_hw.enabled) |
| 1556 | ath9k_hw_btcoex_enable(ah); | 1556 | ath9k_hw_btcoex_enable(ah); |
| 1557 | 1557 | ||
| 1558 | if (AR_SREV_9300_20_OR_LATER(ah)) | 1558 | if (AR_SREV_9300_20_OR_LATER(ah)) { |
| 1559 | ar9003_hw_bb_watchdog_config(ah); | 1559 | ar9003_hw_bb_watchdog_config(ah); |
| 1560 | 1560 | ||
| 1561 | ar9003_hw_disable_phy_restart(ah); | ||
| 1562 | } | ||
| 1563 | |||
| 1561 | ath9k_hw_apply_gpio_override(ah); | 1564 | ath9k_hw_apply_gpio_override(ah); |
| 1562 | 1565 | ||
| 1563 | return 0; | 1566 | return 0; |
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h index 57435ce62792..4b157c53d1a8 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h | |||
| @@ -842,6 +842,7 @@ struct ath_hw { | |||
| 842 | 842 | ||
| 843 | u32 bb_watchdog_last_status; | 843 | u32 bb_watchdog_last_status; |
| 844 | u32 bb_watchdog_timeout_ms; /* in ms, 0 to disable */ | 844 | u32 bb_watchdog_timeout_ms; /* in ms, 0 to disable */ |
| 845 | u8 bb_hang_rx_ofdm; /* true if bb hang due to rx_ofdm */ | ||
| 845 | 846 | ||
| 846 | unsigned int paprd_target_power; | 847 | unsigned int paprd_target_power; |
| 847 | unsigned int paprd_training_power; | 848 | unsigned int paprd_training_power; |
| @@ -990,6 +991,7 @@ void ar9002_hw_enable_wep_aggregation(struct ath_hw *ah); | |||
| 990 | void ar9003_hw_bb_watchdog_config(struct ath_hw *ah); | 991 | void ar9003_hw_bb_watchdog_config(struct ath_hw *ah); |
| 991 | void ar9003_hw_bb_watchdog_read(struct ath_hw *ah); | 992 | void ar9003_hw_bb_watchdog_read(struct ath_hw *ah); |
| 992 | void ar9003_hw_bb_watchdog_dbg_info(struct ath_hw *ah); | 993 | void ar9003_hw_bb_watchdog_dbg_info(struct ath_hw *ah); |
| 994 | void ar9003_hw_disable_phy_restart(struct ath_hw *ah); | ||
| 993 | void ar9003_paprd_enable(struct ath_hw *ah, bool val); | 995 | void ar9003_paprd_enable(struct ath_hw *ah, bool val); |
| 994 | void ar9003_paprd_populate_single_table(struct ath_hw *ah, | 996 | void ar9003_paprd_populate_single_table(struct ath_hw *ah, |
| 995 | struct ath9k_hw_cal_data *caldata, | 997 | struct ath9k_hw_cal_data *caldata, |
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index a198ee374b05..2ca351fe6d3c 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
| @@ -670,7 +670,8 @@ void ath9k_tasklet(unsigned long data) | |||
| 670 | u32 status = sc->intrstatus; | 670 | u32 status = sc->intrstatus; |
| 671 | u32 rxmask; | 671 | u32 rxmask; |
| 672 | 672 | ||
| 673 | if (status & ATH9K_INT_FATAL) { | 673 | if ((status & ATH9K_INT_FATAL) || |
| 674 | (status & ATH9K_INT_BB_WATCHDOG)) { | ||
| 674 | ath_reset(sc, true); | 675 | ath_reset(sc, true); |
| 675 | return; | 676 | return; |
| 676 | } | 677 | } |
| @@ -737,6 +738,7 @@ irqreturn_t ath_isr(int irq, void *dev) | |||
| 737 | { | 738 | { |
| 738 | #define SCHED_INTR ( \ | 739 | #define SCHED_INTR ( \ |
| 739 | ATH9K_INT_FATAL | \ | 740 | ATH9K_INT_FATAL | \ |
| 741 | ATH9K_INT_BB_WATCHDOG | \ | ||
| 740 | ATH9K_INT_RXORN | \ | 742 | ATH9K_INT_RXORN | \ |
| 741 | ATH9K_INT_RXEOL | \ | 743 | ATH9K_INT_RXEOL | \ |
| 742 | ATH9K_INT_RX | \ | 744 | ATH9K_INT_RX | \ |
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c index 17542214c93f..ba7f36ab0a74 100644 --- a/drivers/net/wireless/ath/ath9k/rc.c +++ b/drivers/net/wireless/ath/ath9k/rc.c | |||
| @@ -689,7 +689,8 @@ static void ath_rc_rate_set_series(const struct ath_rate_table *rate_table, | |||
| 689 | 689 | ||
| 690 | if (WLAN_RC_PHY_HT(rate_table->info[rix].phy)) { | 690 | if (WLAN_RC_PHY_HT(rate_table->info[rix].phy)) { |
| 691 | rate->flags |= IEEE80211_TX_RC_MCS; | 691 | rate->flags |= IEEE80211_TX_RC_MCS; |
| 692 | if (WLAN_RC_PHY_40(rate_table->info[rix].phy)) | 692 | if (WLAN_RC_PHY_40(rate_table->info[rix].phy) && |
| 693 | conf_is_ht40(&txrc->hw->conf)) | ||
| 693 | rate->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH; | 694 | rate->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH; |
| 694 | if (WLAN_RC_PHY_SGI(rate_table->info[rix].phy)) | 695 | if (WLAN_RC_PHY_SGI(rate_table->info[rix].phy)) |
| 695 | rate->flags |= IEEE80211_TX_RC_SHORT_GI; | 696 | rate->flags |= IEEE80211_TX_RC_SHORT_GI; |
diff --git a/drivers/net/wireless/b43/phy_n.c b/drivers/net/wireless/b43/phy_n.c index 9ed65157bef5..05960ddde24e 100644 --- a/drivers/net/wireless/b43/phy_n.c +++ b/drivers/net/wireless/b43/phy_n.c | |||
| @@ -3093,7 +3093,7 @@ static int b43_nphy_cal_tx_iq_lo(struct b43_wldev *dev, | |||
| 3093 | int freq; | 3093 | int freq; |
| 3094 | bool avoid = false; | 3094 | bool avoid = false; |
| 3095 | u8 length; | 3095 | u8 length; |
| 3096 | u16 tmp, core, type, count, max, numb, last, cmd; | 3096 | u16 tmp, core, type, count, max, numb, last = 0, cmd; |
| 3097 | const u16 *table; | 3097 | const u16 *table; |
| 3098 | bool phy6or5x; | 3098 | bool phy6or5x; |
| 3099 | 3099 | ||
diff --git a/drivers/net/wireless/iwlegacy/iwl-4965-lib.c b/drivers/net/wireless/iwlegacy/iwl-4965-lib.c index 7e5e85a017b5..a7a4739880dc 100644 --- a/drivers/net/wireless/iwlegacy/iwl-4965-lib.c +++ b/drivers/net/wireless/iwlegacy/iwl-4965-lib.c | |||
| @@ -628,11 +628,11 @@ void iwl4965_rx_reply_rx(struct iwl_priv *priv, | |||
| 628 | 628 | ||
| 629 | /* rx_status carries information about the packet to mac80211 */ | 629 | /* rx_status carries information about the packet to mac80211 */ |
| 630 | rx_status.mactime = le64_to_cpu(phy_res->timestamp); | 630 | rx_status.mactime = le64_to_cpu(phy_res->timestamp); |
| 631 | rx_status.band = (phy_res->phy_flags & RX_RES_PHY_FLAGS_BAND_24_MSK) ? | ||
| 632 | IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ; | ||
| 631 | rx_status.freq = | 633 | rx_status.freq = |
| 632 | ieee80211_channel_to_frequency(le16_to_cpu(phy_res->channel), | 634 | ieee80211_channel_to_frequency(le16_to_cpu(phy_res->channel), |
| 633 | rx_status.band); | 635 | rx_status.band); |
| 634 | rx_status.band = (phy_res->phy_flags & RX_RES_PHY_FLAGS_BAND_24_MSK) ? | ||
| 635 | IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ; | ||
| 636 | rx_status.rate_idx = | 636 | rx_status.rate_idx = |
| 637 | iwl4965_hwrate_to_mac80211_idx(rate_n_flags, rx_status.band); | 637 | iwl4965_hwrate_to_mac80211_idx(rate_n_flags, rx_status.band); |
| 638 | rx_status.flag = 0; | 638 | rx_status.flag = 0; |
diff --git a/drivers/net/wireless/mwifiex/sdio.h b/drivers/net/wireless/mwifiex/sdio.h index a0e9bc5253e0..4e97e90aa399 100644 --- a/drivers/net/wireless/mwifiex/sdio.h +++ b/drivers/net/wireless/mwifiex/sdio.h | |||
| @@ -167,8 +167,8 @@ | |||
| 167 | /* Rx unit register */ | 167 | /* Rx unit register */ |
| 168 | #define CARD_RX_UNIT_REG 0x63 | 168 | #define CARD_RX_UNIT_REG 0x63 |
| 169 | 169 | ||
| 170 | /* Event header Len*/ | 170 | /* Event header len w/o 4 bytes of interface header */ |
| 171 | #define MWIFIEX_EVENT_HEADER_LEN 8 | 171 | #define MWIFIEX_EVENT_HEADER_LEN 4 |
| 172 | 172 | ||
| 173 | /* Max retry number of CMD53 write */ | 173 | /* Max retry number of CMD53 write */ |
| 174 | #define MAX_WRITE_IOMEM_RETRY 2 | 174 | #define MAX_WRITE_IOMEM_RETRY 2 |
diff --git a/drivers/net/wireless/rt2x00/Kconfig b/drivers/net/wireless/rt2x00/Kconfig index 9def1e5369a1..b2f8b8fd4d2d 100644 --- a/drivers/net/wireless/rt2x00/Kconfig +++ b/drivers/net/wireless/rt2x00/Kconfig | |||
| @@ -166,7 +166,6 @@ config RT2800USB_RT35XX | |||
| 166 | config RT2800USB_RT53XX | 166 | config RT2800USB_RT53XX |
| 167 | bool "rt2800usb - Include support for rt53xx devices (EXPERIMENTAL)" | 167 | bool "rt2800usb - Include support for rt53xx devices (EXPERIMENTAL)" |
| 168 | depends on EXPERIMENTAL | 168 | depends on EXPERIMENTAL |
| 169 | default y | ||
| 170 | ---help--- | 169 | ---help--- |
| 171 | This adds support for rt53xx wireless chipset family to the | 170 | This adds support for rt53xx wireless chipset family to the |
| 172 | rt2800pci driver. | 171 | rt2800pci driver. |
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c index a40952845436..89100e7c553b 100644 --- a/drivers/net/wireless/rtlwifi/pci.c +++ b/drivers/net/wireless/rtlwifi/pci.c | |||
| @@ -669,11 +669,6 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) | |||
| 669 | &rx_status, | 669 | &rx_status, |
| 670 | (u8 *) pdesc, skb); | 670 | (u8 *) pdesc, skb); |
| 671 | 671 | ||
| 672 | pci_unmap_single(rtlpci->pdev, | ||
| 673 | *((dma_addr_t *) skb->cb), | ||
| 674 | rtlpci->rxbuffersize, | ||
| 675 | PCI_DMA_FROMDEVICE); | ||
| 676 | |||
| 677 | skb_put(skb, rtlpriv->cfg->ops->get_desc((u8 *) pdesc, | 672 | skb_put(skb, rtlpriv->cfg->ops->get_desc((u8 *) pdesc, |
| 678 | false, | 673 | false, |
| 679 | HW_DESC_RXPKT_LEN)); | 674 | HW_DESC_RXPKT_LEN)); |
| @@ -690,6 +685,21 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) | |||
| 690 | hdr = rtl_get_hdr(skb); | 685 | hdr = rtl_get_hdr(skb); |
| 691 | fc = rtl_get_fc(skb); | 686 | fc = rtl_get_fc(skb); |
| 692 | 687 | ||
| 688 | /* try for new buffer - if allocation fails, drop | ||
| 689 | * frame and reuse old buffer | ||
| 690 | */ | ||
| 691 | new_skb = dev_alloc_skb(rtlpci->rxbuffersize); | ||
| 692 | if (unlikely(!new_skb)) { | ||
| 693 | RT_TRACE(rtlpriv, (COMP_INTR | COMP_RECV), | ||
| 694 | DBG_DMESG, | ||
| 695 | ("can't alloc skb for rx\n")); | ||
| 696 | goto done; | ||
| 697 | } | ||
| 698 | pci_unmap_single(rtlpci->pdev, | ||
| 699 | *((dma_addr_t *) skb->cb), | ||
| 700 | rtlpci->rxbuffersize, | ||
| 701 | PCI_DMA_FROMDEVICE); | ||
| 702 | |||
| 693 | if (!stats.crc || !stats.hwerror) { | 703 | if (!stats.crc || !stats.hwerror) { |
| 694 | memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, | 704 | memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, |
| 695 | sizeof(rx_status)); | 705 | sizeof(rx_status)); |
| @@ -758,15 +768,7 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) | |||
| 758 | rtl_lps_leave(hw); | 768 | rtl_lps_leave(hw); |
| 759 | } | 769 | } |
| 760 | 770 | ||
| 761 | new_skb = dev_alloc_skb(rtlpci->rxbuffersize); | ||
| 762 | if (unlikely(!new_skb)) { | ||
| 763 | RT_TRACE(rtlpriv, (COMP_INTR | COMP_RECV), | ||
| 764 | DBG_DMESG, | ||
| 765 | ("can't alloc skb for rx\n")); | ||
| 766 | goto done; | ||
| 767 | } | ||
| 768 | skb = new_skb; | 771 | skb = new_skb; |
| 769 | /*skb->dev = dev; */ | ||
| 770 | 772 | ||
| 771 | rtlpci->rx_ring[rx_queue_idx].rx_buf[rtlpci-> | 773 | rtlpci->rx_ring[rx_queue_idx].rx_buf[rtlpci-> |
| 772 | rx_ring | 774 | rx_ring |
| @@ -1113,6 +1115,13 @@ static int _rtl_pci_init_rx_ring(struct ieee80211_hw *hw) | |||
| 1113 | 1115 | ||
| 1114 | rtlpci->rx_ring[rx_queue_idx].idx = 0; | 1116 | rtlpci->rx_ring[rx_queue_idx].idx = 0; |
| 1115 | 1117 | ||
| 1118 | /* If amsdu_8k is disabled, set buffersize to 4096. This | ||
| 1119 | * change will reduce memory fragmentation. | ||
| 1120 | */ | ||
| 1121 | if (rtlpci->rxbuffersize > 4096 && | ||
| 1122 | rtlpriv->rtlhal.disable_amsdu_8k) | ||
| 1123 | rtlpci->rxbuffersize = 4096; | ||
| 1124 | |||
| 1116 | for (i = 0; i < rtlpci->rxringcount; i++) { | 1125 | for (i = 0; i < rtlpci->rxringcount; i++) { |
| 1117 | struct sk_buff *skb = | 1126 | struct sk_buff *skb = |
| 1118 | dev_alloc_skb(rtlpci->rxbuffersize); | 1127 | dev_alloc_skb(rtlpci->rxbuffersize); |
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 4f6b2675e41d..456cccf26b51 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
| @@ -232,6 +232,9 @@ static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata, | |||
| 232 | WARN_ON(!ieee80211_set_channel_type(local, sdata, channel_type)); | 232 | WARN_ON(!ieee80211_set_channel_type(local, sdata, channel_type)); |
| 233 | } | 233 | } |
| 234 | 234 | ||
| 235 | ieee80211_stop_queues_by_reason(&sdata->local->hw, | ||
| 236 | IEEE80211_QUEUE_STOP_REASON_CSA); | ||
| 237 | |||
| 235 | /* channel_type change automatically detected */ | 238 | /* channel_type change automatically detected */ |
| 236 | ieee80211_hw_config(local, 0); | 239 | ieee80211_hw_config(local, 0); |
| 237 | 240 | ||
| @@ -245,6 +248,9 @@ static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata, | |||
| 245 | rcu_read_unlock(); | 248 | rcu_read_unlock(); |
| 246 | } | 249 | } |
| 247 | 250 | ||
| 251 | ieee80211_wake_queues_by_reason(&sdata->local->hw, | ||
| 252 | IEEE80211_QUEUE_STOP_REASON_CSA); | ||
| 253 | |||
| 248 | ht_opmode = le16_to_cpu(hti->operation_mode); | 254 | ht_opmode = le16_to_cpu(hti->operation_mode); |
| 249 | 255 | ||
| 250 | /* if bss configuration changed store the new one */ | 256 | /* if bss configuration changed store the new one */ |
| @@ -1089,6 +1095,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, | |||
| 1089 | local->hw.conf.flags &= ~IEEE80211_CONF_PS; | 1095 | local->hw.conf.flags &= ~IEEE80211_CONF_PS; |
| 1090 | config_changed |= IEEE80211_CONF_CHANGE_PS; | 1096 | config_changed |= IEEE80211_CONF_CHANGE_PS; |
| 1091 | } | 1097 | } |
| 1098 | local->ps_sdata = NULL; | ||
| 1092 | 1099 | ||
| 1093 | ieee80211_hw_config(local, config_changed); | 1100 | ieee80211_hw_config(local, config_changed); |
| 1094 | 1101 | ||
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c index 27af6723cb5e..58ffa7d069c7 100644 --- a/net/mac80211/scan.c +++ b/net/mac80211/scan.c | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | #include <linux/if_arp.h> | 15 | #include <linux/if_arp.h> |
| 16 | #include <linux/rtnetlink.h> | 16 | #include <linux/rtnetlink.h> |
| 17 | #include <linux/pm_qos_params.h> | 17 | #include <linux/pm_qos_params.h> |
| 18 | #include <linux/slab.h> | ||
| 19 | #include <net/sch_generic.h> | 18 | #include <net/sch_generic.h> |
| 20 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
| 21 | #include <net/mac80211.h> | 20 | #include <net/mac80211.h> |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index ec83f413a7ed..88a565f130a5 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
| @@ -3406,12 +3406,12 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info) | |||
| 3406 | i = 0; | 3406 | i = 0; |
| 3407 | if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) { | 3407 | if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) { |
| 3408 | nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp) { | 3408 | nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp) { |
| 3409 | request->ssids[i].ssid_len = nla_len(attr); | ||
| 3409 | if (request->ssids[i].ssid_len > IEEE80211_MAX_SSID_LEN) { | 3410 | if (request->ssids[i].ssid_len > IEEE80211_MAX_SSID_LEN) { |
| 3410 | err = -EINVAL; | 3411 | err = -EINVAL; |
| 3411 | goto out_free; | 3412 | goto out_free; |
| 3412 | } | 3413 | } |
| 3413 | memcpy(request->ssids[i].ssid, nla_data(attr), nla_len(attr)); | 3414 | memcpy(request->ssids[i].ssid, nla_data(attr), nla_len(attr)); |
| 3414 | request->ssids[i].ssid_len = nla_len(attr); | ||
| 3415 | i++; | 3415 | i++; |
| 3416 | } | 3416 | } |
| 3417 | } | 3417 | } |
| @@ -3572,6 +3572,7 @@ static int nl80211_start_sched_scan(struct sk_buff *skb, | |||
| 3572 | if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) { | 3572 | if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) { |
| 3573 | nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], | 3573 | nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], |
| 3574 | tmp) { | 3574 | tmp) { |
| 3575 | request->ssids[i].ssid_len = nla_len(attr); | ||
| 3575 | if (request->ssids[i].ssid_len > | 3576 | if (request->ssids[i].ssid_len > |
| 3576 | IEEE80211_MAX_SSID_LEN) { | 3577 | IEEE80211_MAX_SSID_LEN) { |
| 3577 | err = -EINVAL; | 3578 | err = -EINVAL; |
| @@ -3579,7 +3580,6 @@ static int nl80211_start_sched_scan(struct sk_buff *skb, | |||
| 3579 | } | 3580 | } |
| 3580 | memcpy(request->ssids[i].ssid, nla_data(attr), | 3581 | memcpy(request->ssids[i].ssid, nla_data(attr), |
| 3581 | nla_len(attr)); | 3582 | nla_len(attr)); |
| 3582 | request->ssids[i].ssid_len = nla_len(attr); | ||
| 3583 | i++; | 3583 | i++; |
| 3584 | } | 3584 | } |
| 3585 | } | 3585 | } |
