iwlwifi: help to debug AGG SM inconsistencies
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Fri, 25 Nov 2011 19:11:48 +0000 (11:11 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 28 Nov 2011 19:44:31 +0000 (14:44 -0500)
Add more data when inconsistencies occur in the AGG state machine.

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>
drivers/net/wireless/iwlwifi/iwl-trans-pcie.c

index 527e7957c932b780712e1966e170337b4d6c9388..2ac75427f10b526f74ea5aec30e9b9ae72a841fb 100644 (file)
@@ -1099,13 +1099,21 @@ static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
                hdr->seq_ctrl = hdr->seq_ctrl &
                                cpu_to_le16(IEEE80211_SCTL_FRAG);
                hdr->seq_ctrl |= cpu_to_le16(seq_number);
-               seq_number += 0x10;
                /* aggregation is on for this <sta,tid> */
                if (info->flags & IEEE80211_TX_CTL_AMPDU) {
-                       WARN_ON_ONCE(tid_data->agg.state != IWL_AGG_ON);
+                       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, tid_data->agg.txq_id,
+                                       seq_number >> 4);
+                       }
                        txq_id = tid_data->agg.txq_id;
                        is_agg = true;
                }
+               seq_number += 0x10;
        }
 
        /* Copy MAC header from skb into command buffer */