iwlwifi: change TX code to suppress smatch warning
authorJohannes Berg <johannes.berg@intel.com>
Thu, 6 Dec 2012 12:46:54 +0000 (13:46 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 7 Dec 2012 08:37:40 +0000 (09:37 +0100)
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: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/iwlwifi/dvm/tx.c

index 7d6cc5d..517562b 100644 (file)
@@ -305,7 +305,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
        u8 hdr_len;
        u16 len, seq_number = 0;
        u8 sta_id, tid = IWL_MAX_TID_COUNT;
-       bool is_agg = false;
+       bool is_agg = false, is_data_qos = false;
        int txq_id;
 
        if (info->control.vif)
@@ -378,9 +378,6 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
                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);
 
        if (unlikely(!dev_cmd))
@@ -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(seq_number);
                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 */
@@ -474,8 +475,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
        if (iwl_trans_tx(priv->trans, skb, dev_cmd, txq_id))
                goto drop_unlock_sta;
 
-       if (ieee80211_is_data_qos(fc) && !ieee80211_is_qos_nullfunc(fc) &&
-           !ieee80211_has_morefrags(fc))
+       if (is_data_qos && !ieee80211_has_morefrags(fc))
                priv->tid_data[sta_id][tid].seq_number = seq_number;
 
        spin_unlock(&priv->sta_lock);