diff options
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.patch | 52 |
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 + |