lkml.org 
[lkml]   [2017]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 068/133] iwlwifi: mvm: Avoid deferring non bufferable frames
    3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: David Spinadel <david.spinadel@intel.com>

    commit eb045e6e0389eabfd704dd7a76d8b2a892970e85 upstream.

    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>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/net/wireless/iwlwifi/mvm/mac80211.c | 9 +++++----
    1 file changed, 5 insertions(+), 4 deletions(-)

    --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
    +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
    @@ -485,10 +485,11 @@ static void iwl_mvm_mac_tx(struct ieee80
    !test_bit(IWL_MVM_STATUS_ROC_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) {
    \
     
     \ /
      Last update: 2017-11-22 03:23    [W:6.177 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site