]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
iwlwifi: mvm: Avoid deferring non bufferable frames
authorDavid Spinadel <david.spinadel@intel.com>
Thu, 17 Aug 2017 14:28:22 +0000 (17:28 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Wed, 30 Aug 2017 09:30:56 +0000 (12:30 +0300)
Use bcast station for all non bufferable frames on AP and AD-HOC.

The host is no longer aware of STAs PS status because of buffer
station offload, so we can't rely on mac80211 to toggle on
IEEE80211_TX_CTL_NO_PS_BUFFER bit.

A possible issue with buffering such frames, beside the obvious spec
violation, is when a station disconnects while in PS but the AP isn't
aware of that. In such scenarios the AP won't be able to send probe
responses or auth frames so the STA won't be able to reconnect and
the AP will have a queue hang.

Fixes: 3e56eadfb6a1 ("iwlwifi: mvm: implement AP/GO uAPSD support")
Signed-off-by: David Spinadel <david.spinadel@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c

index d7feb1ab4dc9e0586e37f6bdff5edd815e943148..15f2d826bb4b20cd561bb6674a2590790fa47afe 100644 (file)
@@ -810,10 +810,11 @@ static void iwl_mvm_mac_tx(struct ieee80211_hw *hw,
            !test_bit(IWL_MVM_STATUS_ROC_AUX_RUNNING, &mvm->status))
                goto drop;
 
-       /* treat non-bufferable MMPDUs as broadcast if sta is sleeping */
-       if (unlikely(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER &&
-                    ieee80211_is_mgmt(hdr->frame_control) &&
-                    !ieee80211_is_bufferable_mmpdu(hdr->frame_control)))
+       /* treat non-bufferable MMPDUs on AP interfaces as broadcast */
+       if ((info->control.vif->type == NL80211_IFTYPE_AP ||
+            info->control.vif->type == NL80211_IFTYPE_ADHOC) &&
+           ieee80211_is_mgmt(hdr->frame_control) &&
+           !ieee80211_is_bufferable_mmpdu(hdr->frame_control))
                sta = NULL;
 
        if (sta) {