diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2011-09-20 18:37:26 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-09-21 16:19:43 -0400 |
commit | 08ecf10441c79ebebe5ce6b6ff9a06c586f5895c (patch) | |
tree | 85a81389ac8eebdfe6aaf34e4278a20fd803ff7b | |
parent | edb5c2f38d3eef3a45457846a76732586f6bcf5c (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.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans-pcie.c | 4 |
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 | } |