Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 672014 Details for
Bug 863424
iwlwifi: fail to flush all tx fifo queues
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
get better logs
0001-iwlwifi-improve-the-reports-in-TX-path.patch (text/plain), 7.79 KB, created by
Emmanuel Grumbach
on 2013-01-03 12:00:29 UTC
(
hide
)
Description:
get better logs
Filename:
MIME Type:
Creator:
Emmanuel Grumbach
Created:
2013-01-03 12:00:29 UTC
Size:
7.79 KB
patch
obsolete
>From a65d1f052e38c2838e8967f42a61ed5f98194595 Mon Sep 17 00:00:00 2001 >From: Emmanuel Grumbach <emmanuel.grumbach@intel.com> >Date: Wed, 2 Jan 2013 12:12:25 +0200 >Subject: [PATCH] iwlwifi: improve the reports in TX path > >Change-Id: I8bc9182bd394b592c0fa0547161f6dd00b0612d0 >Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> >--- > drivers/net/wireless/iwlwifi/dvm/mac80211.c | 3 -- > drivers/net/wireless/iwlwifi/dvm/tx.c | 28 ++++++++++------- > drivers/net/wireless/iwlwifi/pcie/rx.c | 5 ++- > drivers/net/wireless/iwlwifi/pcie/trans.c | 44 ++++++++++++++++++++++++++- > drivers/net/wireless/iwlwifi/pcie/tx.c | 7 ++-- > 5 files changed, 66 insertions(+), 21 deletions(-) > >diff --git a/drivers/net/wireless/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/iwlwifi/dvm/mac80211.c >index 3163e0f..a318ac8 100644 >--- a/drivers/net/wireless/iwlwifi/dvm/mac80211.c >+++ b/drivers/net/wireless/iwlwifi/dvm/mac80211.c >@@ -520,9 +520,6 @@ static void iwlagn_mac_tx(struct ieee80211_hw *hw, > { > struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); > >- IWL_DEBUG_TX(priv, "dev->xmit(%d bytes) at rate 0x%02x\n", skb->len, >- ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate); >- > if (iwlagn_tx_skb(priv, control->sta, skb)) > ieee80211_free_txskb(hw, skb); > } >diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c b/drivers/net/wireless/iwlwifi/dvm/tx.c >index e4dc25e..b15061c 100644 >--- a/drivers/net/wireless/iwlwifi/dvm/tx.c >+++ b/drivers/net/wireless/iwlwifi/dvm/tx.c >@@ -231,13 +231,11 @@ static void iwlagn_tx_cmd_build_hwcrypto(struct iwl_priv *priv, > memcpy(tx_cmd->key, keyconf->key, keyconf->keylen); > if (info->flags & IEEE80211_TX_CTL_AMPDU) > tx_cmd->tx_flags |= TX_CMD_FLG_AGG_CCMP_MSK; >- IWL_DEBUG_TX(priv, "tx_cmd with AES hwcrypto\n"); > break; > > case WLAN_CIPHER_SUITE_TKIP: > tx_cmd->sec_ctl = TX_CMD_SEC_TKIP; > ieee80211_get_tkip_p2k(keyconf, skb_frag, tx_cmd->key); >- IWL_DEBUG_TX(priv, "tx_cmd with tkip hwcrypto\n"); > break; > > case WLAN_CIPHER_SUITE_WEP104: >@@ -355,8 +353,6 @@ int iwlagn_tx_skb(struct iwl_priv *priv, > } > } > >- IWL_DEBUG_TX(priv, "station Id %d\n", sta_id); >- > if (sta) > sta_priv = (void *)sta->drv_priv; > >@@ -472,6 +468,9 @@ int iwlagn_tx_skb(struct iwl_priv *priv, > WARN_ON_ONCE(is_agg && > priv->queue_to_mac80211[txq_id] != info->hw_queue); > >+ IWL_DEBUG_TX(priv, "TX to [%d|%d] Q:%d - seq: 0x%x\n", sta_id, tid, >+ txq_id, seq_number); >+ > if (iwl_trans_tx(priv->trans, skb, dev_cmd, txq_id)) > goto drop_unlock_sta; > >@@ -954,12 +953,6 @@ static void iwl_rx_reply_tx_agg(struct iwl_priv *priv, > if (status & (AGG_TX_STATE_FEW_BYTES_MSK | > AGG_TX_STATE_ABORT_MSK)) > continue; >- >- IWL_DEBUG_TX_REPLY(priv, "status %s (0x%08x), " >- "try-count (0x%08x)\n", >- iwl_get_agg_tx_fail_reason(fstatus), >- fstatus & AGG_TX_STATUS_MSK, >- fstatus & AGG_TX_TRY_MSK); > } > } > >@@ -1221,16 +1214,27 @@ int iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb, > next_reclaimed); > } > >- WARN_ON(!is_agg && freed != 1); >+ if (!is_agg && freed != 1) >+ IWL_ERR(priv, "Q: %d, freed %d\n", txq_id, freed); > > /* > * An offchannel frame can be send only on the AUX queue, where > * there is no aggregation (and reordering) so it only is single > * skb is expected to be processed. > */ >- WARN_ON(is_offchannel_skb && freed != 1); >+ if(is_offchannel_skb && freed != 1) >+ IWL_ERR(priv, "OFFCHANNEL SKB freed %d\n", freed); > } > >+ IWL_DEBUG_TX_REPLY(priv, "TXQ %d status %s (0x%08x)\n", txq_id, >+ iwl_get_tx_fail_reason(status), status); >+ >+ IWL_DEBUG_TX_REPLY(priv, >+ "\t\t\t\tinitial_rate 0x%x retries %d, idx=%d ssn=%d seq_ctl=0x%x\n", >+ le32_to_cpu(tx_resp->rate_n_flags), >+ tx_resp->failure_frame, SEQ_TO_INDEX(sequence), ssn, >+ le16_to_cpu(tx_resp->seq_ctl)); >+ > iwl_check_abort_status(priv, tx_resp->frame_count, status); > spin_unlock(&priv->sta_lock); > >diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c >index dad4c4a..ff62260 100644 >--- a/drivers/net/wireless/iwlwifi/pcie/rx.c >+++ b/drivers/net/wireless/iwlwifi/pcie/rx.c >@@ -915,8 +915,11 @@ void iwl_pcie_tasklet(struct iwl_trans *trans) > if (inta & CSR_INT_BIT_WAKEUP) { > IWL_DEBUG_ISR(trans, "Wakeup interrupt\n"); > iwl_pcie_rxq_inc_wr_ptr(trans, &trans_pcie->rxq); >- for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) >+ for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) { >+ IWL_DEBUG_TX(trans, "Q:%d WR: 0x%x - WAKE_UP\n", i, >+ trans_pcie->txq[i].q.write_ptr); > iwl_pcie_txq_inc_wr_ptr(trans, &trans_pcie->txq[i]); >+ } > > isr_stats->wakeup++; > >diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c >index 35708b9..eb8d8a3 100644 >--- a/drivers/net/wireless/iwlwifi/pcie/trans.c >+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c >@@ -767,6 +767,8 @@ static int iwl_trans_pcie_wait_txq_empty(struct iwl_trans *trans) > struct iwl_queue *q; > int cnt; > unsigned long now = jiffies; >+ u32 scd_sram_addr; >+ u8 buf[16]; > int ret = 0; > > /* waiting for all the tx frames complete might take a while */ >@@ -780,11 +782,51 @@ static int iwl_trans_pcie_wait_txq_empty(struct iwl_trans *trans) > msleep(1); > > if (q->read_ptr != q->write_ptr) { >- IWL_ERR(trans, "fail to flush all tx fifo queues\n"); >+ IWL_ERR(trans, >+ "fail to flush all tx fifo queues Q %d\n", cnt); > ret = -ETIMEDOUT; > break; > } > } >+ >+ if (!ret) >+ return 0; >+ >+ >+ IWL_ERR(trans, "Current SW read_ptr %d write_ptr %d\n", >+ txq->q.read_ptr, txq->q.write_ptr); >+ >+ scd_sram_addr = trans_pcie->scd_base_addr + >+ SCD_TX_STTS_QUEUE_OFFSET(txq->q.id); >+ iwl_read_targ_mem_bytes(trans, scd_sram_addr, buf, sizeof(buf)); >+ >+ iwl_print_hex_error(trans, buf, sizeof(buf)); >+ >+ for (cnt = 0; cnt < FH_TCSR_CHNL_NUM; cnt++) >+ IWL_ERR(trans, "FH TRBs(%d) = 0x%08x\n", cnt, >+ iwl_read_direct32(trans, FH_TX_TRB_REG(cnt))); >+ >+ for (cnt = 0; cnt < trans->cfg->base_params->num_of_queues; cnt++) { >+ u32 status = iwl_read_prph(trans, SCD_QUEUE_STATUS_BITS(cnt)); >+ u8 fifo = (status >> SCD_QUEUE_STTS_REG_POS_TXF) & 0x7; >+ bool active = !!(status & BIT(SCD_QUEUE_STTS_REG_POS_ACTIVE)); >+ u32 tbl_dw = >+ iwl_read_targ_mem(trans, trans_pcie->scd_base_addr + >+ SCD_TRANS_TBL_OFFSET_QUEUE(cnt)); >+ >+ if (cnt & 0x1) >+ tbl_dw = (tbl_dw & 0xFFFF0000) >> 16; >+ else >+ tbl_dw = tbl_dw & 0x0000FFFF; >+ >+ IWL_ERR(trans, >+ "Q %d is %sactive and mapped to fifo %d ra_tid 0x%04x [%d,%d]\n", >+ cnt, active ? "" : "in", fifo, tbl_dw, >+ iwl_read_prph(trans, >+ SCD_QUEUE_RDPTR(cnt)) & (txq->q.n_bd - 1), >+ iwl_read_prph(trans, SCD_QUEUE_WRPTR(cnt))); >+ } >+ > return ret; > } > >diff --git a/drivers/net/wireless/iwlwifi/pcie/tx.c b/drivers/net/wireless/iwlwifi/pcie/tx.c >index 6c5b867..b208f9e 100644 >--- a/drivers/net/wireless/iwlwifi/pcie/tx.c >+++ b/drivers/net/wireless/iwlwifi/pcie/tx.c >@@ -303,9 +303,12 @@ void iwl_pcie_txq_inc_wr_ptr(struct iwl_trans *trans, struct iwl_txq *txq) > " GP1 = 0x%x\n", txq_id, reg); > iwl_set_bit(trans, CSR_GP_CNTRL, > CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ); >+ IWL_DEBUG_TX(trans, "Q:%d WR: 0x%x - SLEEP\n", txq_id, txq->q.write_ptr); > return; > } > >+ IWL_DEBUG_TX(trans, "Q:%d WR: 0x%x\n", txq_id, txq->q.write_ptr); >+ > iwl_write_direct32(trans, HBUS_TARG_WRPTR, > txq->q.write_ptr | (txq_id << 8)); > >@@ -1642,10 +1645,6 @@ int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb, > tx_cmd->dram_lsb_ptr = cpu_to_le32(scratch_phys); > tx_cmd->dram_msb_ptr = iwl_get_dma_hi_addr(scratch_phys); > >- IWL_DEBUG_TX(trans, "sequence nr = 0X%x\n", >- le16_to_cpu(dev_cmd->hdr.sequence)); >- IWL_DEBUG_TX(trans, "tx_flags = 0X%x\n", le32_to_cpu(tx_cmd->tx_flags)); >- > /* Set up entry for this TFD in Tx byte-count array */ > iwl_pcie_txq_update_byte_cnt_tbl(trans, txq, le16_to_cpu(tx_cmd->len)); > >-- >1.7.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 863424
:
667944
|
670702
|
670947
|
671008
|
671345
|
671662
|
671997
| 672014 |
675302
|
675851
|
746018
|
750255
|
755318
|
764757
|
802340