aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2011-09-20 18:37:26 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-09-21 16:19:43 -0400
commit08ecf10441c79ebebe5ce6b6ff9a06c586f5895c (patch)
tree85a81389ac8eebdfe6aaf34e4278a20fd803ff7b
parentedb5c2f38d3eef3a45457846a76732586f6bcf5c (diff)
iwlagn: pending frames musn't be incremented if agg is on
During my works on the transport layer I removed code that updated a local variable (is_agg) that is needed to keep the pending_frames count up to date. Fix this. Also, there should be no way to have a packet with TX_CTL_AMPDU set while the internal aggregation state machine is not in AGG_ON state. Add a WARN_ON to ensure that. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-tx.c3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans-pcie.c4
2 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
index abb702da700..8c0f07f5614 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
@@ -313,6 +313,9 @@ int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
313 iwl_sta_modify_sleep_tx_count(priv, sta_id, 1); 313 iwl_sta_modify_sleep_tx_count(priv, sta_id, 1);
314 } 314 }
315 315
316 if (info->flags & IEEE80211_TX_CTL_AMPDU)
317 is_agg = true;
318
316 /* irqs already disabled/saved above when locking priv->shrd->lock */ 319 /* irqs already disabled/saved above when locking priv->shrd->lock */
317 spin_lock(&priv->shrd->sta_lock); 320 spin_lock(&priv->shrd->sta_lock);
318 321
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
index dbb7eb3715c..3e69e877e72 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
@@ -1096,8 +1096,8 @@ static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
1096 hdr->seq_ctrl |= cpu_to_le16(seq_number); 1096 hdr->seq_ctrl |= cpu_to_le16(seq_number);
1097 seq_number += 0x10; 1097 seq_number += 0x10;
1098 /* aggregation is on for this <sta,tid> */ 1098 /* aggregation is on for this <sta,tid> */
1099 if (info->flags & IEEE80211_TX_CTL_AMPDU && 1099 if (info->flags & IEEE80211_TX_CTL_AMPDU) {
1100 tid_data->agg.state == IWL_AGG_ON) { 1100 WARN_ON(tid_data->agg.state != IWL_AGG_ON);
1101 txq_id = tid_data->agg.txq_id; 1101 txq_id = tid_data->agg.txq_id;
1102 is_agg = true; 1102 is_agg = true;
1103 } 1103 }