summaryrefslogtreecommitdiff
path: root/libre/linux-libre-grsec/0010-iwlwifi-mvm-delay-enabling-smart-FIFO-until-after-be.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libre/linux-libre-grsec/0010-iwlwifi-mvm-delay-enabling-smart-FIFO-until-after-be.patch')
-rw-r--r--libre/linux-libre-grsec/0010-iwlwifi-mvm-delay-enabling-smart-FIFO-until-after-be.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/libre/linux-libre-grsec/0010-iwlwifi-mvm-delay-enabling-smart-FIFO-until-after-be.patch b/libre/linux-libre-grsec/0010-iwlwifi-mvm-delay-enabling-smart-FIFO-until-after-be.patch
new file mode 100644
index 000000000..7f18091a4
--- /dev/null
+++ b/libre/linux-libre-grsec/0010-iwlwifi-mvm-delay-enabling-smart-FIFO-until-after-be.patch
@@ -0,0 +1,52 @@
+From 784c4f0b18f89922ddc0fe21e5ec64cc370bb3f2 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Wed, 19 Mar 2014 18:36:39 +0100
+Subject: [PATCH 10/10] iwlwifi: mvm: delay enabling smart FIFO until after
+ beacon RX
+
+If we have no beacon data before association, delay smart FIFO
+enablement until after we have this data.
+
+Not doing so can cause association failures in extremely silent
+environments (usually only a shielded box/room) as beacon RX is
+not sent to the host immediately, and then the association time
+event ends without the host receiving any beacon even though it
+was on the air - it's just stuck on the FIFO.
+
+Cc: <stable@vger.kernel.org> [3.14]
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+---
+ drivers/net/wireless/iwlwifi/mvm/mac80211.c | 1 +
+ drivers/net/wireless/iwlwifi/mvm/sf.c | 3 ++-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+index c35b866..45e861e 100644
+--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
++++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+@@ -971,6 +971,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
+ */
+ iwl_mvm_remove_time_event(mvm, mvmvif,
+ &mvmvif->time_event_data);
++ iwl_mvm_sf_update(mvm, vif, false);
+ } else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS |
+ BSS_CHANGED_QOS)) {
+ ret = iwl_mvm_power_update_mode(mvm, vif);
+diff --git a/drivers/net/wireless/iwlwifi/mvm/sf.c b/drivers/net/wireless/iwlwifi/mvm/sf.c
+index 8401627..88809b2 100644
+--- a/drivers/net/wireless/iwlwifi/mvm/sf.c
++++ b/drivers/net/wireless/iwlwifi/mvm/sf.c
+@@ -274,7 +274,8 @@ int iwl_mvm_sf_update(struct iwl_mvm *mvm, struct ieee80211_vif *changed_vif,
+ return -EINVAL;
+ if (changed_vif->type != NL80211_IFTYPE_STATION) {
+ new_state = SF_UNINIT;
+- } else if (changed_vif->bss_conf.assoc) {
++ } else if (changed_vif->bss_conf.assoc &&
++ changed_vif->bss_conf.dtim_period) {
+ mvmvif = iwl_mvm_vif_from_mac80211(changed_vif);
+ sta_id = mvmvif->ap_sta_id;
+ new_state = SF_FULL_ON;
+--
+1.9.2
+