[PATCH ath-next v3 3/9] wifi: ath11k: report the pending tx MSDU count in soc_dp_stats
Julius Bairaktaris <[email protected]>
| Newsgroups | org.kernel.vger.linux-wireless,org.infradead.lists.ath11k,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
ar->dp.num_tx_pending counts the MSDUs the hardware has not completed yet, and is used to wait for the transmit path to drain. It is never shown. soc_dp_stats can therefore say when the transmit path overflowed - TCL ring full, misc transmit failures - and not how deep it is at this instant. The bound those counters report against is the tx descriptor idr, one entry short of DP_TX_IDR_SIZE per ring, which is large enough that occupancy rather than exhaustion is what characterises the path under load. Print it per radio, beside the failure counters it complements. Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.9.0.1-02146-QCAHKSWPL_SILICONZ-1 Assisted-by: Claude:claude-opus-5 Signed-off-by: Julius Bairaktaris <[email protected]> --- drivers/net/wireless/ath/ath11k/debugfs.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/net/wireless/ath/ath11k/debugfs.c b/drivers/net/wireless/ath/ath11k/debugfs.c index 70922612d3fb..9dc586b68136 100644 --- a/drivers/net/wireless/ath/ath11k/debugfs.c +++ b/drivers/net/wireless/ath/ath11k/debugfs.c @@ -714,6 +714,18 @@ static ssize_t ath11k_debugfs_dump_soc_dp_stats(struct file *file, "\nMisc Transmit Failures: %d\n", atomic_read(&soc_stats->tx_err.misc_fail)); + /* What the hardware still owes a completion for. The counters above say + * when the transmit path overflowed; none of them says how deep it is. + */ + len += scnprintf(buf + len, size - len, "\nPending Tx MSDUs:\n"); + for (i = 0; i < ab->num_radios; i++) { + struct ath11k *ar = ab->pdevs[i].ar; + + if (ar) + len += scnprintf(buf + len, size - len, "radio%d: %d\n", + i, atomic_read(&ar->dp.num_tx_pending)); + } + len += ath11k_debugfs_dump_soc_ring_bp_stats(ab, buf + len, size - len); if (len > size) -- 2.53.0