iwlwifi: print the scratch of all the buffers stuck in a queue
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 13 Jun 2012 11:16:40 +0000 (14:16 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 18 Jun 2012 08:46:03 +0000 (10:46 +0200)
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/iwlwifi/pcie/trans.c

index cc935168ae52b9849753925b19abd79b612767c3..c6f53af639c6b15971e873534185a4495f72f550 100644 (file)
@@ -296,6 +296,7 @@ static void iwlagn_free_dma_ptr(struct iwl_trans *trans,
 static void iwl_trans_pcie_queue_stuck_timer(unsigned long data)
 {
        struct iwl_tx_queue *txq = (void *)data;
+       struct iwl_queue *q = &txq->q;
        struct iwl_trans_pcie *trans_pcie = txq->trans_pcie;
        struct iwl_trans *trans = iwl_trans_pcie_get_trans(trans_pcie);
        u32 scd_sram_addr = trans_pcie->scd_base_addr +
@@ -346,6 +347,14 @@ static void iwl_trans_pcie_queue_stuck_timer(unsigned long data)
                        iwl_read_prph(trans, SCD_QUEUE_WRPTR(i)));
        }
 
+       for (i = q->read_ptr; i != q->write_ptr;
+            i = iwl_queue_inc_wrap(i, q->n_bd)) {
+               struct iwl_tx_cmd *tx_cmd =
+                       (struct iwl_tx_cmd *)txq->entries[i].cmd->payload;
+               IWL_ERR(trans, "scratch %d = 0x%08x\n", i,
+                       get_unaligned_le32(&tx_cmd->scratch));
+       }
+
        iwl_op_mode_nic_error(trans->op_mode);
 }