[PATCH v1 3/4] 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 |
|---|---|
| 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, DP_TX_IDR_SIZE entries 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