aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-5000.c5
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c45
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-dev.h2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-devtrace.c26
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-devtrace.h26
-rw-r--r--drivers/net/wireless/iwmc3200wifi/commands.c4
-rw-r--r--drivers/net/wireless/iwmc3200wifi/commands.h1
-rw-r--r--drivers/net/wireless/p54/p54pci.c8
-rw-r--r--drivers/net/wireless/zd1211rw/zd_usb.c1
-rw-r--r--net/mac80211/cfg.c3
-rw-r--r--net/mac80211/iface.c10
-rw-r--r--net/mac80211/mlme.c4
-rw-r--r--net/mac80211/rc80211_pid_algo.c2
-rw-r--r--net/mac80211/rx.c4
-rw-r--r--net/wireless/core.c4
-rw-r--r--net/wireless/sme.c1
17 files changed, 119 insertions, 29 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index cee368d4859f..6a004abb5973 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -1961,7 +1961,7 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,
1961 struct ieee80211_tx_info *info; 1961 struct ieee80211_tx_info *info;
1962 struct iwl4965_tx_resp *tx_resp = (void *)&pkt->u.raw[0]; 1962 struct iwl4965_tx_resp *tx_resp = (void *)&pkt->u.raw[0];
1963 u32 status = le32_to_cpu(tx_resp->u.status); 1963 u32 status = le32_to_cpu(tx_resp->u.status);
1964 int tid = MAX_TID_COUNT - 1; 1964 int uninitialized_var(tid);
1965 int sta_id; 1965 int sta_id;
1966 int freed; 1966 int freed;
1967 u8 *qc = NULL; 1967 u8 *qc = NULL;
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index c3f8ec0a38b1..c6120f0b8f98 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -1600,6 +1600,7 @@ struct iwl_cfg iwl5300_agn_cfg = {
1600 .use_bsm = false, 1600 .use_bsm = false,
1601 .ht_greenfield_support = true, 1601 .ht_greenfield_support = true,
1602 .led_compensation = 51, 1602 .led_compensation = 51,
1603 .use_rts_for_ht = true, /* use rts/cts protection */
1603 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1604 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1604}; 1605};
1605 1606
@@ -1623,6 +1624,7 @@ struct iwl_cfg iwl5100_bgn_cfg = {
1623 .use_bsm = false, 1624 .use_bsm = false,
1624 .ht_greenfield_support = true, 1625 .ht_greenfield_support = true,
1625 .led_compensation = 51, 1626 .led_compensation = 51,
1627 .use_rts_for_ht = true, /* use rts/cts protection */
1626 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1628 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1627}; 1629};
1628 1630
@@ -1668,6 +1670,7 @@ struct iwl_cfg iwl5100_agn_cfg = {
1668 .use_bsm = false, 1670 .use_bsm = false,
1669 .ht_greenfield_support = true, 1671 .ht_greenfield_support = true,
1670 .led_compensation = 51, 1672 .led_compensation = 51,
1673 .use_rts_for_ht = true, /* use rts/cts protection */
1671 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1674 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1672}; 1675};
1673 1676
@@ -1691,6 +1694,7 @@ struct iwl_cfg iwl5350_agn_cfg = {
1691 .use_bsm = false, 1694 .use_bsm = false,
1692 .ht_greenfield_support = true, 1695 .ht_greenfield_support = true,
1693 .led_compensation = 51, 1696 .led_compensation = 51,
1697 .use_rts_for_ht = true, /* use rts/cts protection */
1694 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1698 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1695}; 1699};
1696 1700
@@ -1714,6 +1718,7 @@ struct iwl_cfg iwl5150_agn_cfg = {
1714 .use_bsm = false, 1718 .use_bsm = false,
1715 .ht_greenfield_support = true, 1719 .ht_greenfield_support = true,
1716 .led_compensation = 51, 1720 .led_compensation = 51,
1721 .use_rts_for_ht = true, /* use rts/cts protection */
1717 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1722 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1718}; 1723};
1719 1724
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 14f482960d7f..5b56307a3812 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -2334,6 +2334,21 @@ static void iwl_ht_conf(struct iwl_priv *priv,
2334 IWL_DEBUG_MAC80211(priv, "leave\n"); 2334 IWL_DEBUG_MAC80211(priv, "leave\n");
2335} 2335}
2336 2336
2337static inline void iwl_set_no_assoc(struct iwl_priv *priv)
2338{
2339 priv->assoc_id = 0;
2340 iwl_led_disassociate(priv);
2341 /*
2342 * inform the ucode that there is no longer an
2343 * association and that no more packets should be
2344 * sent
2345 */
2346 priv->staging_rxon.filter_flags &=
2347 ~RXON_FILTER_ASSOC_MSK;
2348 priv->staging_rxon.assoc_id = 0;
2349 iwlcore_commit_rxon(priv);
2350}
2351
2337#define IWL_DELAY_NEXT_SCAN_AFTER_ASSOC (HZ*6) 2352#define IWL_DELAY_NEXT_SCAN_AFTER_ASSOC (HZ*6)
2338void iwl_bss_info_changed(struct ieee80211_hw *hw, 2353void iwl_bss_info_changed(struct ieee80211_hw *hw,
2339 struct ieee80211_vif *vif, 2354 struct ieee80211_vif *vif,
@@ -2465,20 +2480,8 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw,
2465 IWL_DELAY_NEXT_SCAN_AFTER_ASSOC; 2480 IWL_DELAY_NEXT_SCAN_AFTER_ASSOC;
2466 if (!iwl_is_rfkill(priv)) 2481 if (!iwl_is_rfkill(priv))
2467 priv->cfg->ops->lib->post_associate(priv); 2482 priv->cfg->ops->lib->post_associate(priv);
2468 } else { 2483 } else
2469 priv->assoc_id = 0; 2484 iwl_set_no_assoc(priv);
2470 iwl_led_disassociate(priv);
2471
2472 /*
2473 * inform the ucode that there is no longer an
2474 * association and that no more packets should be
2475 * send
2476 */
2477 priv->staging_rxon.filter_flags &=
2478 ~RXON_FILTER_ASSOC_MSK;
2479 priv->staging_rxon.assoc_id = 0;
2480 iwlcore_commit_rxon(priv);
2481 }
2482 } 2485 }
2483 2486
2484 if (changes && iwl_is_associated(priv) && priv->assoc_id) { 2487 if (changes && iwl_is_associated(priv) && priv->assoc_id) {
@@ -2493,12 +2496,14 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw,
2493 } 2496 }
2494 } 2497 }
2495 2498
2496 if ((changes & BSS_CHANGED_BEACON_ENABLED) && 2499 if (changes & BSS_CHANGED_BEACON_ENABLED) {
2497 vif->bss_conf.enable_beacon) { 2500 if (vif->bss_conf.enable_beacon) {
2498 memcpy(priv->staging_rxon.bssid_addr, 2501 memcpy(priv->staging_rxon.bssid_addr,
2499 bss_conf->bssid, ETH_ALEN); 2502 bss_conf->bssid, ETH_ALEN);
2500 memcpy(priv->bssid, bss_conf->bssid, ETH_ALEN); 2503 memcpy(priv->bssid, bss_conf->bssid, ETH_ALEN);
2501 iwlcore_config_ap(priv); 2504 iwlcore_config_ap(priv);
2505 } else
2506 iwl_set_no_assoc(priv);
2502 } 2507 }
2503 2508
2504 mutex_unlock(&priv->mutex); 2509 mutex_unlock(&priv->mutex);
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index 42f9b17327c3..70f0e79c8e4a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -712,7 +712,7 @@ extern void iwl_txq_ctx_stop(struct iwl_priv *priv);
712extern int iwl_queue_space(const struct iwl_queue *q); 712extern int iwl_queue_space(const struct iwl_queue *q);
713static inline int iwl_queue_used(const struct iwl_queue *q, int i) 713static inline int iwl_queue_used(const struct iwl_queue *q, int i)
714{ 714{
715 return q->write_ptr > q->read_ptr ? 715 return q->write_ptr >= q->read_ptr ?
716 (i >= q->read_ptr && i < q->write_ptr) : 716 (i >= q->read_ptr && i < q->write_ptr) :
717 !(i < q->read_ptr && i >= q->write_ptr); 717 !(i < q->read_ptr && i >= q->write_ptr);
718} 718}
diff --git a/drivers/net/wireless/iwlwifi/iwl-devtrace.c b/drivers/net/wireless/iwlwifi/iwl-devtrace.c
index bf46308b17fa..36580d8d8b8d 100644
--- a/drivers/net/wireless/iwlwifi/iwl-devtrace.c
+++ b/drivers/net/wireless/iwlwifi/iwl-devtrace.c
@@ -1,3 +1,29 @@
1/******************************************************************************
2 *
3 * Copyright(c) 2009 - 2010 Intel Corporation. All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE.
20 *
21 * Contact Information:
22 * Intel Linux Wireless <ilw@linux.intel.com>
23 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
24 *
25 *****************************************************************************/
26
1#include <linux/module.h> 27#include <linux/module.h>
2 28
3/* sparse doesn't like tracepoint macros */ 29/* sparse doesn't like tracepoint macros */
diff --git a/drivers/net/wireless/iwlwifi/iwl-devtrace.h b/drivers/net/wireless/iwlwifi/iwl-devtrace.h
index 0819f990be6c..ff4d012ce260 100644
--- a/drivers/net/wireless/iwlwifi/iwl-devtrace.h
+++ b/drivers/net/wireless/iwlwifi/iwl-devtrace.h
@@ -1,3 +1,29 @@
1/******************************************************************************
2 *
3 * Copyright(c) 2009 - 2010 Intel Corporation. All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE.
20 *
21 * Contact Information:
22 * Intel Linux Wireless <ilw@linux.intel.com>
23 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
24 *
25 *****************************************************************************/
26
1#if !defined(__IWLWIFI_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ) 27#if !defined(__IWLWIFI_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ)
2#define __IWLWIFI_DEVICE_TRACE 28#define __IWLWIFI_DEVICE_TRACE
3 29
diff --git a/drivers/net/wireless/iwmc3200wifi/commands.c b/drivers/net/wireless/iwmc3200wifi/commands.c
index 777584d76a88..1e41ad0fcad5 100644
--- a/drivers/net/wireless/iwmc3200wifi/commands.c
+++ b/drivers/net/wireless/iwmc3200wifi/commands.c
@@ -973,6 +973,10 @@ int iwm_send_pmkid_update(struct iwm_priv *iwm,
973 973
974 memset(&update, 0, sizeof(struct iwm_umac_pmkid_update)); 974 memset(&update, 0, sizeof(struct iwm_umac_pmkid_update));
975 975
976 update.hdr.oid = UMAC_WIFI_IF_CMD_PMKID_UPDATE;
977 update.hdr.buf_size = cpu_to_le16(sizeof(struct iwm_umac_pmkid_update) -
978 sizeof(struct iwm_umac_wifi_if));
979
976 update.command = cpu_to_le32(command); 980 update.command = cpu_to_le32(command);
977 if (pmksa->bssid) 981 if (pmksa->bssid)
978 memcpy(&update.bssid, pmksa->bssid, ETH_ALEN); 982 memcpy(&update.bssid, pmksa->bssid, ETH_ALEN);
diff --git a/drivers/net/wireless/iwmc3200wifi/commands.h b/drivers/net/wireless/iwmc3200wifi/commands.h
index 06af0552cd75..3dfd9f0e9003 100644
--- a/drivers/net/wireless/iwmc3200wifi/commands.h
+++ b/drivers/net/wireless/iwmc3200wifi/commands.h
@@ -463,6 +463,7 @@ struct iwm_umac_cmd_stop_resume_tx {
463#define IWM_CMD_PMKID_FLUSH 3 463#define IWM_CMD_PMKID_FLUSH 3
464 464
465struct iwm_umac_pmkid_update { 465struct iwm_umac_pmkid_update {
466 struct iwm_umac_wifi_if hdr;
466 __le32 command; 467 __le32 command;
467 u8 bssid[ETH_ALEN]; 468 u8 bssid[ETH_ALEN];
468 __le16 reserved; 469 __le16 reserved;
diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
index a15962a19b2a..a72f7c2577de 100644
--- a/drivers/net/wireless/p54/p54pci.c
+++ b/drivers/net/wireless/p54/p54pci.c
@@ -197,6 +197,14 @@ static void p54p_check_rx_ring(struct ieee80211_hw *dev, u32 *index,
197 i %= ring_limit; 197 i %= ring_limit;
198 continue; 198 continue;
199 } 199 }
200
201 if (unlikely(len > priv->common.rx_mtu)) {
202 if (net_ratelimit())
203 dev_err(&priv->pdev->dev, "rx'd frame size "
204 "exceeds length threshold.\n");
205
206 len = priv->common.rx_mtu;
207 }
200 skb_put(skb, len); 208 skb_put(skb, len);
201 209
202 if (p54_rx(dev, skb)) { 210 if (p54_rx(dev, skb)) {
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index 4daf1c94ec04..442fc1117326 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -62,6 +62,7 @@ static struct usb_device_id usb_ids[] = {
62 { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 }, 62 { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 },
63 /* ZD1211B */ 63 /* ZD1211B */
64 { USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B }, 64 { USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B },
65 { USB_DEVICE(0x0409, 0x0248), .driver_info = DEVICE_ZD1211B },
65 { USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B }, 66 { USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
66 { USB_DEVICE(0x0471, 0x1236), .driver_info = DEVICE_ZD1211B }, 67 { USB_DEVICE(0x0471, 0x1236), .driver_info = DEVICE_ZD1211B },
67 { USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B }, 68 { USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B },
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index b0102c538b30..facf233843e0 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1389,6 +1389,9 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
1389 struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); 1389 struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
1390 struct ieee80211_conf *conf = &local->hw.conf; 1390 struct ieee80211_conf *conf = &local->hw.conf;
1391 1391
1392 if (sdata->vif.type != NL80211_IFTYPE_STATION)
1393 return -EOPNOTSUPP;
1394
1392 if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) 1395 if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS))
1393 return -EOPNOTSUPP; 1396 return -EOPNOTSUPP;
1394 1397
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index fe140bf033f9..edf21cebeee8 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -684,21 +684,25 @@ static u16 ieee80211_monitor_select_queue(struct net_device *dev,
684 struct ieee80211_local *local = sdata->local; 684 struct ieee80211_local *local = sdata->local;
685 struct ieee80211_hdr *hdr; 685 struct ieee80211_hdr *hdr;
686 struct ieee80211_radiotap_header *rtap = (void *)skb->data; 686 struct ieee80211_radiotap_header *rtap = (void *)skb->data;
687 u8 *p;
687 688
688 if (local->hw.queues < 4) 689 if (local->hw.queues < 4)
689 return 0; 690 return 0;
690 691
691 if (skb->len < 4 || 692 if (skb->len < 4 ||
692 skb->len < rtap->it_len + 2 /* frame control */) 693 skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */)
693 return 0; /* doesn't matter, frame will be dropped */ 694 return 0; /* doesn't matter, frame will be dropped */
694 695
695 hdr = (void *)((u8 *)skb->data + rtap->it_len); 696 hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len));
696 697
697 if (!ieee80211_is_data(hdr->frame_control)) { 698 if (!ieee80211_is_data_qos(hdr->frame_control)) {
698 skb->priority = 7; 699 skb->priority = 7;
699 return ieee802_1d_to_ac[skb->priority]; 700 return ieee802_1d_to_ac[skb->priority];
700 } 701 }
701 702
703 p = ieee80211_get_qos_ctl(hdr);
704 skb->priority = *p & IEEE80211_QOS_CTL_TAG1D_MASK;
705
702 return ieee80211_downgrade_queue(local, skb); 706 return ieee80211_downgrade_queue(local, skb);
703} 707}
704 708
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index a82564e73d91..1e1d16c55ee5 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1478,7 +1478,9 @@ static void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
1478 rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len); 1478 rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len);
1479 break; 1479 break;
1480 case IEEE80211_STYPE_ACTION: 1480 case IEEE80211_STYPE_ACTION:
1481 /* XXX: differentiate, can only happen for CSA now! */ 1481 if (mgmt->u.action.category != WLAN_CATEGORY_SPECTRUM_MGMT)
1482 break;
1483
1482 ieee80211_sta_process_chanswitch(sdata, 1484 ieee80211_sta_process_chanswitch(sdata,
1483 &mgmt->u.action.u.chan_switch.sw_elem, 1485 &mgmt->u.action.u.chan_switch.sw_elem,
1484 (void *)ifmgd->associated->priv); 1486 (void *)ifmgd->associated->priv);
diff --git a/net/mac80211/rc80211_pid_algo.c b/net/mac80211/rc80211_pid_algo.c
index 699d3ed869c4..29bc4c516238 100644
--- a/net/mac80211/rc80211_pid_algo.c
+++ b/net/mac80211/rc80211_pid_algo.c
@@ -190,7 +190,7 @@ static void rate_control_pid_sample(struct rc_pid_info *pinfo,
190 rate_control_pid_normalize(pinfo, sband->n_bitrates); 190 rate_control_pid_normalize(pinfo, sband->n_bitrates);
191 191
192 /* Compute the proportional, integral and derivative errors. */ 192 /* Compute the proportional, integral and derivative errors. */
193 err_prop = (pinfo->target << RC_PID_ARITH_SHIFT) - pf; 193 err_prop = (pinfo->target - pf) << RC_PID_ARITH_SHIFT;
194 194
195 err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift; 195 err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift;
196 spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop; 196 spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop;
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index efa6d3689c5e..a8e15b84c05b 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1946,6 +1946,10 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
1946 } 1946 }
1947 break; 1947 break;
1948 default: 1948 default:
1949 /* do not process rejected action frames */
1950 if (mgmt->u.action.category & 0x80)
1951 return RX_DROP_MONITOR;
1952
1949 return RX_CONTINUE; 1953 return RX_CONTINUE;
1950 } 1954 }
1951 1955
diff --git a/net/wireless/core.c b/net/wireless/core.c
index 0a545bb6ed05..20db90246de5 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -746,9 +746,9 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
746 mutex_unlock(&rdev->devlist_mtx); 746 mutex_unlock(&rdev->devlist_mtx);
747 dev_put(dev); 747 dev_put(dev);
748 } 748 }
749#ifdef CONFIG_CFG80211_WEXT
750 cfg80211_lock_rdev(rdev); 749 cfg80211_lock_rdev(rdev);
751 mutex_lock(&rdev->devlist_mtx); 750 mutex_lock(&rdev->devlist_mtx);
751#ifdef CONFIG_CFG80211_WEXT
752 wdev_lock(wdev); 752 wdev_lock(wdev);
753 switch (wdev->iftype) { 753 switch (wdev->iftype) {
754 case NL80211_IFTYPE_ADHOC: 754 case NL80211_IFTYPE_ADHOC:
@@ -761,10 +761,10 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
761 break; 761 break;
762 } 762 }
763 wdev_unlock(wdev); 763 wdev_unlock(wdev);
764#endif
764 rdev->opencount++; 765 rdev->opencount++;
765 mutex_unlock(&rdev->devlist_mtx); 766 mutex_unlock(&rdev->devlist_mtx);
766 cfg80211_unlock_rdev(rdev); 767 cfg80211_unlock_rdev(rdev);
767#endif
768 break; 768 break;
769 case NETDEV_UNREGISTER: 769 case NETDEV_UNREGISTER:
770 /* 770 /*
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index 2ce5e1609a3d..745c37e7992e 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -656,6 +656,7 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie,
656 memset(&wrqu, 0, sizeof(wrqu)); 656 memset(&wrqu, 0, sizeof(wrqu));
657 wrqu.ap_addr.sa_family = ARPHRD_ETHER; 657 wrqu.ap_addr.sa_family = ARPHRD_ETHER;
658 wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); 658 wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
659 wdev->wext.connect.ssid_len = 0;
659#endif 660#endif
660} 661}
661 662