Commit 9eb466e5 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Luis Henriques

iwlwifi: mvm: drop non VO frames when flushing

commit 4e6c48e0 upstream.

This change has already been implemented in iwldvm:

commit a260e7b3f0307878b99d57ed1406cf2d497923b8
Author: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Date:   Sun Oct 5 09:11:14 2014 +0300

    iwlwifi: dvm: drop non VO frames when flushing

Since I added the flush() callback implementation in mvm,
we got reports that the queues are stuck while roaming
or suspending.
This commit above helped much for iwldvm, implement the
same behavior for iwlmvm.

Fixes: c5b0e7c0 ("iwlwifi: mvm: implement mac80211's flush callback")
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
[ luis: backport to 3.16 provided by Emmanuel ]
Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
parent 552b7a45
......@@ -2416,6 +2416,7 @@ static void iwl_mvm_mac_flush(struct ieee80211_hw *hw,
struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
struct iwl_mvm_vif *mvmvif;
struct iwl_mvm_sta *mvmsta;
u32 msk;
if (!vif || vif->type != NL80211_IFTYPE_STATION)
return;
......@@ -2427,13 +2428,14 @@ static void iwl_mvm_mac_flush(struct ieee80211_hw *hw,
if (WARN_ON_ONCE(!mvmsta))
goto done;
if (drop) {
if (iwl_mvm_flush_tx_path(mvm, mvmsta->tfd_queue_msk, true))
IWL_ERR(mvm, "flush request fail\n");
} else {
iwl_trans_wait_tx_queue_empty(mvm->trans,
mvmsta->tfd_queue_msk);
}
msk = mvmsta->tfd_queue_msk;
msk &= ~BIT(vif->hw_queue[IEEE80211_AC_VO]);
if (iwl_mvm_flush_tx_path(mvm, msk, true))
IWL_ERR(mvm, "flush request fail\n");
msk |= BIT(vif->hw_queue[IEEE80211_AC_VO]);
iwl_trans_wait_tx_queue_empty(mvm->trans, msk);
done:
mutex_unlock(&mvm->mutex);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment