Commit c8a8ab44 authored by Johannes Berg's avatar Johannes Berg

iwlwifi: change TX code to suppress smatch warning

By using a few temporary variables, smatch can track
what's happening and stops complaining that we access
beyond the tid_data array.

This also makes the generated code a bit smaller, so
it's a win all around.
Reviewed-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 8d96bb61
...@@ -305,7 +305,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv, ...@@ -305,7 +305,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
u8 hdr_len; u8 hdr_len;
u16 len, seq_number = 0; u16 len, seq_number = 0;
u8 sta_id, tid = IWL_MAX_TID_COUNT; u8 sta_id, tid = IWL_MAX_TID_COUNT;
bool is_agg = false; bool is_agg = false, is_data_qos = false;
int txq_id; int txq_id;
if (info->control.vif) if (info->control.vif)
...@@ -378,9 +378,6 @@ int iwlagn_tx_skb(struct iwl_priv *priv, ...@@ -378,9 +378,6 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
iwl_sta_modify_sleep_tx_count(priv, sta_id, 1); iwl_sta_modify_sleep_tx_count(priv, sta_id, 1);
} }
if (info->flags & IEEE80211_TX_CTL_AMPDU)
is_agg = true;
dev_cmd = iwl_trans_alloc_tx_cmd(priv->trans); dev_cmd = iwl_trans_alloc_tx_cmd(priv->trans);
if (unlikely(!dev_cmd)) if (unlikely(!dev_cmd))
...@@ -442,6 +439,10 @@ int iwlagn_tx_skb(struct iwl_priv *priv, ...@@ -442,6 +439,10 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG); hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
hdr->seq_ctrl |= cpu_to_le16(seq_number); hdr->seq_ctrl |= cpu_to_le16(seq_number);
seq_number += 0x10; seq_number += 0x10;
if (info->flags & IEEE80211_TX_CTL_AMPDU)
is_agg = true;
is_data_qos = true;
} }
/* Copy MAC header from skb into command buffer */ /* Copy MAC header from skb into command buffer */
...@@ -474,8 +475,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv, ...@@ -474,8 +475,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
if (iwl_trans_tx(priv->trans, skb, dev_cmd, txq_id)) if (iwl_trans_tx(priv->trans, skb, dev_cmd, txq_id))
goto drop_unlock_sta; goto drop_unlock_sta;
if (ieee80211_is_data_qos(fc) && !ieee80211_is_qos_nullfunc(fc) && if (is_data_qos && !ieee80211_has_morefrags(fc))
!ieee80211_has_morefrags(fc))
priv->tid_data[sta_id][tid].seq_number = seq_number; priv->tid_data[sta_id][tid].seq_number = seq_number;
spin_unlock(&priv->sta_lock); spin_unlock(&priv->sta_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment