aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/bluetooth/ath3k.c3
-rw-r--r--drivers/bluetooth/btusb.c7
-rw-r--r--drivers/net/wireless/ath/ath5k/phy.c1
-rw-r--r--drivers/net/wireless/ath/ath9k/ath9k.h8
-rw-r--r--drivers/net/wireless/ath/ath9k/init.c8
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c10
-rw-r--r--drivers/net/wireless/ath/ath9k/xmit.c7
-rw-r--r--drivers/net/wireless/ath/carl9170/rx.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-3945.c1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-6000.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c6
-rw-r--r--drivers/net/wireless/rt2x00/rt2800pci.c2
-rw-r--r--drivers/net/wireless/wl1251/main.c3
-rw-r--r--drivers/ssb/pcmcia.c2
-rw-r--r--net/bluetooth/rfcomm/tty.c2
-rw-r--r--net/mac80211/cfg.c2
-rw-r--r--net/mac80211/ieee80211_i.h2
-rw-r--r--net/mac80211/mlme.c6
-rw-r--r--net/mac80211/status.c7
-rw-r--r--net/mac80211/tx.c2
-rw-r--r--net/mac80211/util.c2
21 files changed, 51 insertions, 34 deletions
diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
index e6acaba1e45c..5577ed656e2f 100644
--- a/drivers/bluetooth/ath3k.c
+++ b/drivers/bluetooth/ath3k.c
@@ -69,6 +69,9 @@ static struct usb_device_id ath3k_table[] = {
69 /* Atheros AR3012 with sflash firmware*/ 69 /* Atheros AR3012 with sflash firmware*/
70 { USB_DEVICE(0x0CF3, 0x3004) }, 70 { USB_DEVICE(0x0CF3, 0x3004) },
71 71
72 /* Atheros AR5BBU12 with sflash firmware */
73 { USB_DEVICE(0x0489, 0xE02C) },
74
72 { } /* Terminating entry */ 75 { } /* Terminating entry */
73}; 76};
74 77
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 89b9e51eec1f..411ae9c9b384 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -108,6 +108,9 @@ static struct usb_device_id blacklist_table[] = {
108 /* Atheros 3012 with sflash firmware */ 108 /* Atheros 3012 with sflash firmware */
109 { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_IGNORE }, 109 { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_IGNORE },
110 110
111 /* Atheros AR5BBU12 with sflash firmware */
112 { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
113
111 /* Broadcom BCM2035 */ 114 /* Broadcom BCM2035 */
112 { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU }, 115 { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU },
113 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU }, 116 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
@@ -828,7 +831,7 @@ static void btusb_work(struct work_struct *work)
828 831
829 if (hdev->conn_hash.sco_num > 0) { 832 if (hdev->conn_hash.sco_num > 0) {
830 if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) { 833 if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) {
831 err = usb_autopm_get_interface(data->isoc); 834 err = usb_autopm_get_interface(data->isoc ? data->isoc : data->intf);
832 if (err < 0) { 835 if (err < 0) {
833 clear_bit(BTUSB_ISOC_RUNNING, &data->flags); 836 clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
834 usb_kill_anchored_urbs(&data->isoc_anchor); 837 usb_kill_anchored_urbs(&data->isoc_anchor);
@@ -857,7 +860,7 @@ static void btusb_work(struct work_struct *work)
857 860
858 __set_isoc_interface(hdev, 0); 861 __set_isoc_interface(hdev, 0);
859 if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags)) 862 if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags))
860 usb_autopm_put_interface(data->isoc); 863 usb_autopm_put_interface(data->isoc ? data->isoc : data->intf);
861 } 864 }
862} 865}
863 866
diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c
index d673ab2f6cda..62ce2f4e8605 100644
--- a/drivers/net/wireless/ath/ath5k/phy.c
+++ b/drivers/net/wireless/ath/ath5k/phy.c
@@ -1281,6 +1281,7 @@ static int ath5k_hw_channel(struct ath5k_hw *ah,
1281 case AR5K_RF5111: 1281 case AR5K_RF5111:
1282 ret = ath5k_hw_rf5111_channel(ah, channel); 1282 ret = ath5k_hw_rf5111_channel(ah, channel);
1283 break; 1283 break;
1284 case AR5K_RF2317:
1284 case AR5K_RF2425: 1285 case AR5K_RF2425:
1285 ret = ath5k_hw_rf2425_channel(ah, channel); 1286 ret = ath5k_hw_rf2425_channel(ah, channel);
1286 break; 1287 break;
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
index 4d60583b0f69..a224c56448de 100644
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
@@ -21,7 +21,6 @@
21#include <linux/device.h> 21#include <linux/device.h>
22#include <linux/leds.h> 22#include <linux/leds.h>
23#include <linux/completion.h> 23#include <linux/completion.h>
24#include <linux/pm_qos_params.h>
25 24
26#include "debug.h" 25#include "debug.h"
27#include "common.h" 26#include "common.h"
@@ -57,8 +56,6 @@ struct ath_node;
57 56
58#define A_MAX(a, b) ((a) > (b) ? (a) : (b)) 57#define A_MAX(a, b) ((a) > (b) ? (a) : (b))
59 58
60#define ATH9K_PM_QOS_DEFAULT_VALUE 55
61
62#define TSF_TO_TU(_h,_l) \ 59#define TSF_TO_TU(_h,_l) \
63 ((((u32)(_h)) << 22) | (((u32)(_l)) >> 10)) 60 ((((u32)(_h)) << 22) | (((u32)(_l)) >> 10))
64 61
@@ -218,6 +215,7 @@ struct ath_frame_info {
218struct ath_buf_state { 215struct ath_buf_state {
219 u8 bf_type; 216 u8 bf_type;
220 u8 bfs_paprd; 217 u8 bfs_paprd;
218 unsigned long bfs_paprd_timestamp;
221 enum ath9k_internal_frame_type bfs_ftype; 219 enum ath9k_internal_frame_type bfs_ftype;
222}; 220};
223 221
@@ -602,7 +600,6 @@ struct ath_softc {
602 struct work_struct paprd_work; 600 struct work_struct paprd_work;
603 struct work_struct hw_check_work; 601 struct work_struct hw_check_work;
604 struct completion paprd_complete; 602 struct completion paprd_complete;
605 bool paprd_pending;
606 603
607 unsigned int hw_busy_count; 604 unsigned int hw_busy_count;
608 605
@@ -649,8 +646,6 @@ struct ath_softc {
649 struct ath_descdma txsdma; 646 struct ath_descdma txsdma;
650 647
651 struct ath_ant_comb ant_comb; 648 struct ath_ant_comb ant_comb;
652
653 struct pm_qos_request_list pm_qos_req;
654}; 649};
655 650
656void ath9k_tasklet(unsigned long data); 651void ath9k_tasklet(unsigned long data);
@@ -665,7 +660,6 @@ static inline void ath_read_cachesize(struct ath_common *common, int *csz)
665extern struct ieee80211_ops ath9k_ops; 660extern struct ieee80211_ops ath9k_ops;
666extern int ath9k_modparam_nohwcrypt; 661extern int ath9k_modparam_nohwcrypt;
667extern int led_blink; 662extern int led_blink;
668extern int ath9k_pm_qos_value;
669extern bool is_ath9k_unloaded; 663extern bool is_ath9k_unloaded;
670 664
671irqreturn_t ath_isr(int irq, void *dev); 665irqreturn_t ath_isr(int irq, void *dev);
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index e5c1eead98a2..f66c882a39e2 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -41,10 +41,6 @@ static int ath9k_btcoex_enable;
41module_param_named(btcoex_enable, ath9k_btcoex_enable, int, 0444); 41module_param_named(btcoex_enable, ath9k_btcoex_enable, int, 0444);
42MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence"); 42MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence");
43 43
44int ath9k_pm_qos_value = ATH9K_PM_QOS_DEFAULT_VALUE;
45module_param_named(pmqos, ath9k_pm_qos_value, int, S_IRUSR | S_IRGRP | S_IROTH);
46MODULE_PARM_DESC(pmqos, "User specified PM-QOS value");
47
48bool is_ath9k_unloaded; 44bool is_ath9k_unloaded;
49/* We use the hw_value as an index into our private channel structure */ 45/* We use the hw_value as an index into our private channel structure */
50 46
@@ -760,9 +756,6 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid,
760 ath_init_leds(sc); 756 ath_init_leds(sc);
761 ath_start_rfkill_poll(sc); 757 ath_start_rfkill_poll(sc);
762 758
763 pm_qos_add_request(&sc->pm_qos_req, PM_QOS_CPU_DMA_LATENCY,
764 PM_QOS_DEFAULT_VALUE);
765
766 return 0; 759 return 0;
767 760
768error_world: 761error_world:
@@ -819,7 +812,6 @@ void ath9k_deinit_device(struct ath_softc *sc)
819 ath9k_ps_restore(sc); 812 ath9k_ps_restore(sc);
820 813
821 ieee80211_unregister_hw(hw); 814 ieee80211_unregister_hw(hw);
822 pm_qos_remove_request(&sc->pm_qos_req);
823 ath_rx_cleanup(sc); 815 ath_rx_cleanup(sc);
824 ath_tx_cleanup(sc); 816 ath_tx_cleanup(sc);
825 ath9k_deinit_softc(sc); 817 ath9k_deinit_softc(sc);
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 31f0fad72391..1d2c7c3cc5ca 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -342,7 +342,6 @@ static bool ath_paprd_send_frame(struct ath_softc *sc, struct sk_buff *skb, int
342 tx_info->control.rates[1].idx = -1; 342 tx_info->control.rates[1].idx = -1;
343 343
344 init_completion(&sc->paprd_complete); 344 init_completion(&sc->paprd_complete);
345 sc->paprd_pending = true;
346 txctl.paprd = BIT(chain); 345 txctl.paprd = BIT(chain);
347 346
348 if (ath_tx_start(hw, skb, &txctl) != 0) { 347 if (ath_tx_start(hw, skb, &txctl) != 0) {
@@ -353,7 +352,6 @@ static bool ath_paprd_send_frame(struct ath_softc *sc, struct sk_buff *skb, int
353 352
354 time_left = wait_for_completion_timeout(&sc->paprd_complete, 353 time_left = wait_for_completion_timeout(&sc->paprd_complete,
355 msecs_to_jiffies(ATH_PAPRD_TIMEOUT)); 354 msecs_to_jiffies(ATH_PAPRD_TIMEOUT));
356 sc->paprd_pending = false;
357 355
358 if (!time_left) 356 if (!time_left)
359 ath_dbg(ath9k_hw_common(sc->sc_ah), ATH_DBG_CALIBRATE, 357 ath_dbg(ath9k_hw_common(sc->sc_ah), ATH_DBG_CALIBRATE,
@@ -1119,12 +1117,6 @@ static int ath9k_start(struct ieee80211_hw *hw)
1119 ath9k_btcoex_timer_resume(sc); 1117 ath9k_btcoex_timer_resume(sc);
1120 } 1118 }
1121 1119
1122 /* User has the option to provide pm-qos value as a module
1123 * parameter rather than using the default value of
1124 * 'ATH9K_PM_QOS_DEFAULT_VALUE'.
1125 */
1126 pm_qos_update_request(&sc->pm_qos_req, ath9k_pm_qos_value);
1127
1128 if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en) 1120 if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en)
1129 common->bus_ops->extn_synch_en(common); 1121 common->bus_ops->extn_synch_en(common);
1130 1122
@@ -1269,8 +1261,6 @@ static void ath9k_stop(struct ieee80211_hw *hw)
1269 1261
1270 sc->sc_flags |= SC_OP_INVALID; 1262 sc->sc_flags |= SC_OP_INVALID;
1271 1263
1272 pm_qos_update_request(&sc->pm_qos_req, PM_QOS_DEFAULT_VALUE);
1273
1274 mutex_unlock(&sc->mutex); 1264 mutex_unlock(&sc->mutex);
1275 1265
1276 ath_dbg(common, ATH_DBG_CONFIG, "Driver halt\n"); 1266 ath_dbg(common, ATH_DBG_CONFIG, "Driver halt\n");
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
index 8d89aa958f1b..bc614acb96de 100644
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
@@ -1753,6 +1753,9 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct ath_buf *bf,
1753 ar9003_hw_set_paprd_txdesc(sc->sc_ah, bf->bf_desc, 1753 ar9003_hw_set_paprd_txdesc(sc->sc_ah, bf->bf_desc,
1754 bf->bf_state.bfs_paprd); 1754 bf->bf_state.bfs_paprd);
1755 1755
1756 if (txctl->paprd)
1757 bf->bf_state.bfs_paprd_timestamp = jiffies;
1758
1756 ath_tx_send_normal(sc, txctl->txq, tid, &bf_head); 1759 ath_tx_send_normal(sc, txctl->txq, tid, &bf_head);
1757 } 1760 }
1758 1761
@@ -1910,7 +1913,9 @@ static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf,
1910 bf->bf_buf_addr = 0; 1913 bf->bf_buf_addr = 0;
1911 1914
1912 if (bf->bf_state.bfs_paprd) { 1915 if (bf->bf_state.bfs_paprd) {
1913 if (!sc->paprd_pending) 1916 if (time_after(jiffies,
1917 bf->bf_state.bfs_paprd_timestamp +
1918 msecs_to_jiffies(ATH_PAPRD_TIMEOUT)))
1914 dev_kfree_skb_any(skb); 1919 dev_kfree_skb_any(skb);
1915 else 1920 else
1916 complete(&sc->paprd_complete); 1921 complete(&sc->paprd_complete);
diff --git a/drivers/net/wireless/ath/carl9170/rx.c b/drivers/net/wireless/ath/carl9170/rx.c
index 939a0e96ed1f..84866a4b8350 100644
--- a/drivers/net/wireless/ath/carl9170/rx.c
+++ b/drivers/net/wireless/ath/carl9170/rx.c
@@ -564,7 +564,7 @@ static void carl9170_ps_beacon(struct ar9170 *ar, void *data, unsigned int len)
564 cam = ieee80211_check_tim(tim_ie, tim_len, ar->common.curaid); 564 cam = ieee80211_check_tim(tim_ie, tim_len, ar->common.curaid);
565 565
566 /* 2. Maybe the AP wants to send multicast/broadcast data? */ 566 /* 2. Maybe the AP wants to send multicast/broadcast data? */
567 cam = !!(tim_ie->bitmap_ctrl & 0x01); 567 cam |= !!(tim_ie->bitmap_ctrl & 0x01);
568 568
569 if (!cam) { 569 if (!cam) {
570 /* back to low-power land. */ 570 /* back to low-power land. */
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index 58213e72d107..5b6932c2193a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -2734,7 +2734,6 @@ static struct iwl_lib_ops iwl3945_lib = {
2734 .isr_ops = { 2734 .isr_ops = {
2735 .isr = iwl_isr_legacy, 2735 .isr = iwl_isr_legacy,
2736 }, 2736 },
2737 .check_plcp_health = iwl3945_good_plcp_health,
2738 2737
2739 .debugfs_ops = { 2738 .debugfs_ops = {
2740 .rx_stats_read = iwl3945_ucode_rx_stats_read, 2739 .rx_stats_read = iwl3945_ucode_rx_stats_read,
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index aa32b1e05dff..f6493f77610d 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -678,6 +678,8 @@ struct iwl_cfg iwl6000i_2bg_cfg = {
678 .fw_name_pre = IWL6050_FW_PRE, \ 678 .fw_name_pre = IWL6050_FW_PRE, \
679 .ucode_api_max = IWL6050_UCODE_API_MAX, \ 679 .ucode_api_max = IWL6050_UCODE_API_MAX, \
680 .ucode_api_min = IWL6050_UCODE_API_MIN, \ 680 .ucode_api_min = IWL6050_UCODE_API_MIN, \
681 .valid_tx_ant = ANT_AB, /* .cfg overwrite */ \
682 .valid_rx_ant = ANT_AB, /* .cfg overwrite */ \
681 .ops = &iwl6050_ops, \ 683 .ops = &iwl6050_ops, \
682 .eeprom_ver = EEPROM_6050_EEPROM_VERSION, \ 684 .eeprom_ver = EEPROM_6050_EEPROM_VERSION, \
683 .eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION, \ 685 .eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION, \
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index a3af656aab3d..abd0461bd307 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -1183,6 +1183,9 @@ static void iwl_irq_tasklet_legacy(struct iwl_priv *priv)
1183 /* only Re-enable if disabled by irq */ 1183 /* only Re-enable if disabled by irq */
1184 if (test_bit(STATUS_INT_ENABLED, &priv->status)) 1184 if (test_bit(STATUS_INT_ENABLED, &priv->status))
1185 iwl_enable_interrupts(priv); 1185 iwl_enable_interrupts(priv);
1186 /* Re-enable RF_KILL if it occurred */
1187 else if (handled & CSR_INT_BIT_RF_KILL)
1188 iwl_enable_rfkill_int(priv);
1186 1189
1187#ifdef CONFIG_IWLWIFI_DEBUG 1190#ifdef CONFIG_IWLWIFI_DEBUG
1188 if (iwl_get_debug_level(priv) & (IWL_DL_ISR)) { 1191 if (iwl_get_debug_level(priv) & (IWL_DL_ISR)) {
@@ -1397,6 +1400,9 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
1397 /* only Re-enable if disabled by irq */ 1400 /* only Re-enable if disabled by irq */
1398 if (test_bit(STATUS_INT_ENABLED, &priv->status)) 1401 if (test_bit(STATUS_INT_ENABLED, &priv->status))
1399 iwl_enable_interrupts(priv); 1402 iwl_enable_interrupts(priv);
1403 /* Re-enable RF_KILL if it occurred */
1404 else if (handled & CSR_INT_BIT_RF_KILL)
1405 iwl_enable_rfkill_int(priv);
1400} 1406}
1401 1407
1402/* the threshold ratio of actual_ack_cnt to expected_ack_cnt in percent */ 1408/* the threshold ratio of actual_ack_cnt to expected_ack_cnt in percent */
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index 8f4dfc3d8023..6ac0ff236893 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -1119,6 +1119,8 @@ static DEFINE_PCI_DEVICE_TABLE(rt2800pci_device_table) = {
1119 { PCI_DEVICE(0x1814, 0x3390), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1119 { PCI_DEVICE(0x1814, 0x3390), PCI_DEVICE_DATA(&rt2800pci_ops) },
1120#endif 1120#endif
1121#ifdef CONFIG_RT2800PCI_RT35XX 1121#ifdef CONFIG_RT2800PCI_RT35XX
1122 { PCI_DEVICE(0x1432, 0x7711), PCI_DEVICE_DATA(&rt2800pci_ops) },
1123 { PCI_DEVICE(0x1432, 0x7722), PCI_DEVICE_DATA(&rt2800pci_ops) },
1122 { PCI_DEVICE(0x1814, 0x3060), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1124 { PCI_DEVICE(0x1814, 0x3060), PCI_DEVICE_DATA(&rt2800pci_ops) },
1123 { PCI_DEVICE(0x1814, 0x3062), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1125 { PCI_DEVICE(0x1814, 0x3062), PCI_DEVICE_DATA(&rt2800pci_ops) },
1124 { PCI_DEVICE(0x1814, 0x3562), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1126 { PCI_DEVICE(0x1814, 0x3562), PCI_DEVICE_DATA(&rt2800pci_ops) },
diff --git a/drivers/net/wireless/wl1251/main.c b/drivers/net/wireless/wl1251/main.c
index 1c8b0775d849..5a1c13878eaf 100644
--- a/drivers/net/wireless/wl1251/main.c
+++ b/drivers/net/wireless/wl1251/main.c
@@ -1050,6 +1050,9 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
1050 1050
1051 if (changed & BSS_CHANGED_BEACON) { 1051 if (changed & BSS_CHANGED_BEACON) {
1052 beacon = ieee80211_beacon_get(hw, vif); 1052 beacon = ieee80211_beacon_get(hw, vif);
1053 if (!beacon)
1054 goto out_sleep;
1055
1053 ret = wl1251_cmd_template_set(wl, CMD_BEACON, beacon->data, 1056 ret = wl1251_cmd_template_set(wl, CMD_BEACON, beacon->data,
1054 beacon->len); 1057 beacon->len);
1055 1058
diff --git a/drivers/ssb/pcmcia.c b/drivers/ssb/pcmcia.c
index c7345dbf43fa..f8533795ee7f 100644
--- a/drivers/ssb/pcmcia.c
+++ b/drivers/ssb/pcmcia.c
@@ -733,7 +733,7 @@ int ssb_pcmcia_get_invariants(struct ssb_bus *bus,
733 733
734 /* Fetch the vendor specific tuples. */ 734 /* Fetch the vendor specific tuples. */
735 res = pcmcia_loop_tuple(bus->host_pcmcia, SSB_PCMCIA_CIS, 735 res = pcmcia_loop_tuple(bus->host_pcmcia, SSB_PCMCIA_CIS,
736 ssb_pcmcia_do_get_invariants, sprom); 736 ssb_pcmcia_do_get_invariants, iv);
737 if ((res == 0) || (res == -ENOSPC)) 737 if ((res == 0) || (res == -ENOSPC))
738 return 0; 738 return 0;
739 739
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c
index 2575c2db6404..d7b9af4703d0 100644
--- a/net/bluetooth/rfcomm/tty.c
+++ b/net/bluetooth/rfcomm/tty.c
@@ -727,7 +727,9 @@ static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
727 break; 727 break;
728 } 728 }
729 729
730 tty_unlock();
730 schedule(); 731 schedule();
732 tty_lock();
731 } 733 }
732 set_current_state(TASK_RUNNING); 734 set_current_state(TASK_RUNNING);
733 remove_wait_queue(&dev->wait, &wait); 735 remove_wait_queue(&dev->wait, &wait);
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index f7a1f08ec3e0..140503d4c97a 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1838,6 +1838,7 @@ static int ieee80211_mgmt_tx(struct wiphy *wiphy, struct net_device *dev,
1838 *cookie ^= 2; 1838 *cookie ^= 2;
1839 IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_TX_OFFCHAN; 1839 IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_TX_OFFCHAN;
1840 local->hw_roc_skb = skb; 1840 local->hw_roc_skb = skb;
1841 local->hw_roc_skb_for_status = skb;
1841 mutex_unlock(&local->mtx); 1842 mutex_unlock(&local->mtx);
1842 1843
1843 return 0; 1844 return 0;
@@ -1892,6 +1893,7 @@ static int ieee80211_mgmt_tx_cancel_wait(struct wiphy *wiphy,
1892 if (ret == 0) { 1893 if (ret == 0) {
1893 kfree_skb(local->hw_roc_skb); 1894 kfree_skb(local->hw_roc_skb);
1894 local->hw_roc_skb = NULL; 1895 local->hw_roc_skb = NULL;
1896 local->hw_roc_skb_for_status = NULL;
1895 } 1897 }
1896 1898
1897 mutex_unlock(&local->mtx); 1899 mutex_unlock(&local->mtx);
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index bb63878d865e..0a570a111a84 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -951,7 +951,7 @@ struct ieee80211_local {
951 951
952 struct ieee80211_channel *hw_roc_channel; 952 struct ieee80211_channel *hw_roc_channel;
953 struct net_device *hw_roc_dev; 953 struct net_device *hw_roc_dev;
954 struct sk_buff *hw_roc_skb; 954 struct sk_buff *hw_roc_skb, *hw_roc_skb_for_status;
955 struct work_struct hw_roc_start, hw_roc_done; 955 struct work_struct hw_roc_start, hw_roc_done;
956 enum nl80211_channel_type hw_roc_channel_type; 956 enum nl80211_channel_type hw_roc_channel_type;
957 unsigned int hw_roc_duration; 957 unsigned int hw_roc_duration;
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index d89e87866e51..7b3f9df725bd 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1071,6 +1071,12 @@ void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata,
1071 if (is_multicast_ether_addr(hdr->addr1)) 1071 if (is_multicast_ether_addr(hdr->addr1))
1072 return; 1072 return;
1073 1073
1074 /*
1075 * In case we receive frames after disassociation.
1076 */
1077 if (!sdata->u.mgd.associated)
1078 return;
1079
1074 ieee80211_sta_reset_conn_monitor(sdata); 1080 ieee80211_sta_reset_conn_monitor(sdata);
1075} 1081}
1076 1082
diff --git a/net/mac80211/status.c b/net/mac80211/status.c
index ffb0de9bc2fa..010a559bd872 100644
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -327,6 +327,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
327 327
328 if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) { 328 if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) {
329 struct ieee80211_work *wk; 329 struct ieee80211_work *wk;
330 u64 cookie = (unsigned long)skb;
330 331
331 rcu_read_lock(); 332 rcu_read_lock();
332 list_for_each_entry_rcu(wk, &local->work_list, list) { 333 list_for_each_entry_rcu(wk, &local->work_list, list) {
@@ -338,8 +339,12 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
338 break; 339 break;
339 } 340 }
340 rcu_read_unlock(); 341 rcu_read_unlock();
342 if (local->hw_roc_skb_for_status == skb) {
343 cookie = local->hw_roc_cookie ^ 2;
344 local->hw_roc_skb_for_status = NULL;
345 }
341 cfg80211_mgmt_tx_status( 346 cfg80211_mgmt_tx_status(
342 skb->dev, (unsigned long) skb, skb->data, skb->len, 347 skb->dev, cookie, skb->data, skb->len,
343 !!(info->flags & IEEE80211_TX_STAT_ACK), GFP_ATOMIC); 348 !!(info->flags & IEEE80211_TX_STAT_ACK), GFP_ATOMIC);
344 } 349 }
345 350
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index d0f91d74eaf0..34edf7f22b0e 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1550,7 +1550,7 @@ static int ieee80211_skb_resize(struct ieee80211_local *local,
1550 skb_orphan(skb); 1550 skb_orphan(skb);
1551 } 1551 }
1552 1552
1553 if (skb_header_cloned(skb)) 1553 if (skb_cloned(skb))
1554 I802_DEBUG_INC(local->tx_expand_skb_head_cloned); 1554 I802_DEBUG_INC(local->tx_expand_skb_head_cloned);
1555 else if (head_need || tail_need) 1555 else if (head_need || tail_need)
1556 I802_DEBUG_INC(local->tx_expand_skb_head); 1556 I802_DEBUG_INC(local->tx_expand_skb_head);
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index 26fd5d29af7f..556647a910ac 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -1204,7 +1204,9 @@ int ieee80211_reconfig(struct ieee80211_local *local)
1204 switch (sdata->vif.type) { 1204 switch (sdata->vif.type) {
1205 case NL80211_IFTYPE_STATION: 1205 case NL80211_IFTYPE_STATION:
1206 changed |= BSS_CHANGED_ASSOC; 1206 changed |= BSS_CHANGED_ASSOC;
1207 mutex_lock(&sdata->u.mgd.mtx);
1207 ieee80211_bss_info_change_notify(sdata, changed); 1208 ieee80211_bss_info_change_notify(sdata, changed);
1209 mutex_unlock(&sdata->u.mgd.mtx);
1208 break; 1210 break;
1209 case NL80211_IFTYPE_ADHOC: 1211 case NL80211_IFTYPE_ADHOC:
1210 changed |= BSS_CHANGED_IBSS; 1212 changed |= BSS_CHANGED_IBSS;