Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 97756fb1 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Wey-Yi Guy
Browse files

iwlwifi: transport layer shouldn't access the AGG SM



This is another step towards the move of tid_data from the shared
area.

Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
parent 34b5321e
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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);
+5 −21
Original line number Diff line number Diff line
@@ -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,27 +1083,12 @@ 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));
			}
		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];
	q = &txq->q;