From: Luca Coelho <luca@coelho.fi>
To: linux-wireless@vger.kernel.org
Cc: kvalo@codeaurora.org, Sara Sharon <sara.sharon@intel.com>,
Luca Coelho <luciano.coelho@intel.com>
Subject: [PATCH 06/17] iwlwifi: mvm: fix references to first_agg_queue in DQA mode
Date: Wed, 8 Feb 2017 13:23:11 +0200 [thread overview]
Message-ID: <20170208112322.29413-7-luca@coelho.fi> (raw)
In-Reply-To: <20170208112322.29413-1-luca@coelho.fi>
From: Sara Sharon <sara.sharon@intel.com>
In DQA mode, first_agg_queue is initialized to
IWL_MVM_DQA_MIN_DATA_QUEUE. This causes two bugs in the tx response
flow:
1. When TX fails, we set IEEE80211_TX_STAT_AMPDU_NO_BACK regardless
if we actually have aggregation open on the queue. This causes
mac80211 to send a BAR frame even though there is no aggregation
open.
Fix that by simply checking the AMPDU flag that is set on by
mac80211 for AMPDU packets.
2. When reclaiming frames in aggregation mode, we reclaim based on
scheduler ssn and not the SN.
The reason is that scheduler ssn may be ahead of SN due to a hole
in the BA window that was filled.
However, if we have aggregations open on IWL_MVM_DQA_BSS_CLIENT_QUEUE
the reclaim flow will still go to the code of non-aggregation
instead of the aggregation code since IWL_MVM_DQA_BSS_CLIENT_QUEUE
is smaller than IWL_MVM_DQA_MIN_DATA_QUEUE, although it is a valid
aggregation queue.
Fix that by always using the aggregation reclaim code by default in
DQA mode (currently it is implicitly used by default for all queues
except the reserved BSS queue).
Fixes: cf961e16620f ("iwlwifi: mvm: support dqa-mode agg on non-shared queue")
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
index 4ba639eda7a3..1d147599cca9 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
@@ -1274,8 +1274,6 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
memset(&info->status, 0, sizeof(info->status));
- info->flags &= ~IEEE80211_TX_CTL_AMPDU;
-
/* inform mac80211 about what happened with the frame */
switch (status & TX_STATUS_MSK) {
case TX_STATUS_SUCCESS:
@@ -1298,10 +1296,11 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
(void *)(uintptr_t)le32_to_cpu(tx_resp->initial_rate);
/* Single frame failure in an AMPDU queue => send BAR */
- if (txq_id >= mvm->first_agg_queue &&
+ if (info->flags & IEEE80211_TX_CTL_AMPDU &&
!(info->flags & IEEE80211_TX_STAT_ACK) &&
!(info->flags & IEEE80211_TX_STAT_TX_FILTERED))
info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
+ info->flags &= ~IEEE80211_TX_CTL_AMPDU;
/* W/A FW bug: seq_ctl is wrong when the status isn't success */
if (status != TX_STATUS_SUCCESS) {
@@ -1336,7 +1335,7 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
ieee80211_tx_status(mvm->hw, skb);
}
- if (txq_id >= mvm->first_agg_queue) {
+ if (iwl_mvm_is_dqa_supported(mvm) || txq_id >= mvm->first_agg_queue) {
/* If this is an aggregation queue, we use the ssn since:
* ssn = wifi seq_num % 256.
* The seq_ctl is the sequence control of the packet to which
--
2.11.0
next prev parent reply other threads:[~2017-02-08 11:28 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-08 11:23 [PATCH 00/17] iwlwifi: updates intended for v4.11 2017-02-08 Luca Coelho
2017-02-08 11:23 ` [PATCH 01/17] iwlwifi: pcie: move msix conf functions above other functions Luca Coelho
2017-02-08 11:23 ` [PATCH 02/17] iwlwifi: pcie: separate between SW and HW MSIX configuration Luca Coelho
2017-02-08 11:23 ` [PATCH 03/17] iwlwifi: pcie: re-configure IVAR table after suspend-resume Luca Coelho
2017-02-08 11:23 ` [PATCH 04/17] iwlwifi: pcie: Re-configure IVAR table after stop device Luca Coelho
2017-02-08 11:23 ` [PATCH 05/17] iwlwifi: mvm: fix a print of NSS for HT rate Luca Coelho
2017-02-08 11:23 ` Luca Coelho [this message]
2017-02-08 11:23 ` [PATCH 07/17] iwlwifi: mvm: fix reorder timer re-arming Luca Coelho
2017-02-08 11:23 ` [PATCH 08/17] iwlwifi: mvm: use the PROBE_RESP_QUEUE to send deauth to unknown station Luca Coelho
2017-02-08 14:29 ` [PATCH 00/17] iwlwifi: updates intended for v4.11 2017-02-08 Kalle Valo
2017-02-08 14:31 ` Coelho, Luciano
2017-02-08 15:51 ` [PATCH 09/17] iwlwifi: pcie: don't increment / decrement a bool Luca Coelho
2017-02-08 15:51 ` [PATCH 10/17] iwlwifi: make RTPM depend on EXPERT Luca Coelho
2017-02-08 15:51 ` [PATCH 11/17] iwlwifi: dvm: don't call << operator with a negative value Luca Coelho
2017-02-08 15:51 ` [PATCH 12/17] iwlwifi: mvm: " Luca Coelho
2017-02-08 15:51 ` [PATCH 13/17] iwlwifi: pcie: set STATUS_RFKILL immediately after interrupt Luca Coelho
2017-02-08 15:51 ` [PATCH 14/17] iwlwifi: mvm: Fix CSA received immediately after association Luca Coelho
2017-02-08 15:51 ` [PATCH 15/17] iwlwifi: mvm: avoid race condition in ADD_STA Luca Coelho
2017-02-08 15:51 ` [PATCH 16/17] iwlwifi: mvm: Fix removal of IGTK Luca Coelho
2017-02-08 15:51 ` [PATCH 17/17] iwlwifi: mvm: avoid exceeding the allowed print length Luca Coelho
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170208112322.29413-7-luca@coelho.fi \
--to=luca@coelho.fi \
--cc=kvalo@codeaurora.org \
--cc=linux-wireless@vger.kernel.org \
--cc=luciano.coelho@intel.com \
--cc=sara.sharon@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.