iwlwifi: transport layer shouldn't access the AGG SM
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 23 Nov 2011 08:52:20 +0000 (10:52 +0200)
committerWey-Yi Guy <wey-yi.w.guy@intel.com>
Fri, 16 Dec 2011 15:23:15 +0000 (07:23 -0800)
This is another step towards the move of tid_data from the shared
area.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
drivers/net/wireless/iwlwifi/iwl-agn-tx.c
drivers/net/wireless/iwlwifi/iwl-trans-pcie.c

index 8db9144d7017fc3927c6059a369a1890d74f6d62..88ee5579ba7c8926eb4ad734c66bbc2f32c8bc10 100644 (file)
@@ -377,6 +377,17 @@ int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
                        goto drop_unlock_sta;
                tid_data = &priv->shrd->tid_data[sta_id][tid];
 
+               /* aggregation is on for this <sta,tid> */
+               if (info->flags & IEEE80211_TX_CTL_AMPDU &&
+                   tid_data->agg.state != IWL_AGG_ON) {
+                       IWL_ERR(priv, "TX_CTL_AMPDU while not in AGG:"
+                               " Tx flags = 0x%08x, agg.state = %d",
+                               info->flags, tid_data->agg.state);
+                       IWL_ERR(priv, "sta_id = %d, tid = %d seq_num = %d",
+                               sta_id, tid, SEQ_TO_SN(tid_data->seq_number));
+                       goto drop_unlock_sta;
+               }
+
                seq_number = tid_data->seq_number;
                seq_number &= IEEE80211_SCTL_SEQ;
                hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
index 06db602b41db19547d2d4ffadf76187ae91c01ac..cfa0bf6cafd16c5fe034e4be4b81f988076f3b15 100644 (file)
@@ -1058,7 +1058,6 @@ static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
        dma_addr_t txcmd_phys;
        dma_addr_t scratch_phys;
        u16 len, firstlen, secondlen;
-       u16 seq_number = 0;
        u8 wait_write_ptr = 0;
        u8 txq_id;
        bool is_agg = false;
@@ -1084,26 +1083,11 @@ static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
                txq_id =
                    trans_pcie->ac_to_queue[ctx][skb_get_queue_mapping(skb)];
 
-       if (ieee80211_is_data_qos(fc) && !ieee80211_is_qos_nullfunc(fc)) {
-               struct iwl_tid_data *tid_data;
-               tid_data = &trans->shrd->tid_data[sta_id][tid];
-               if (WARN_ON_ONCE(tid >= IWL_MAX_TID_COUNT))
-                       return -1;
-
-               /* aggregation is on for this <sta,tid> */
-               if (info->flags & IEEE80211_TX_CTL_AMPDU) {
-                       if (WARN_ON_ONCE(tid_data->agg.state != IWL_AGG_ON)) {
-                               IWL_ERR(trans, "TX_CTL_AMPDU while not in AGG:"
-                                       " Tx flags = 0x%08x, agg.state = %d",
-                                       info->flags, tid_data->agg.state);
-                               IWL_ERR(trans, "sta_id = %d, tid = %d "
-                                       "txq_id = %d, seq_num = %d", sta_id,
-                                       tid, trans_pcie->agg_txq[sta_id][tid],
-                                       SEQ_TO_SN(seq_number));
-                       }
-                       txq_id = trans_pcie->agg_txq[sta_id][tid];
-                       is_agg = true;
-               }
+       /* aggregation is on for this <sta,tid> */
+       if (info->flags & IEEE80211_TX_CTL_AMPDU) {
+               WARN_ON(tid >= IWL_MAX_TID_COUNT);
+               txq_id = trans_pcie->agg_txq[sta_id][tid];
+               is_agg = true;
        }
 
        txq = &trans_pcie->txq[txq_id];