[PATCH ath-next v3 3/9] wifi: ath11k: report the pending tx MSDU count in soc_dp_stats
Julius Bairaktaris
julius at bairaktaris.de
Mon Aug 24 07:23:44 PDT 2026
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 <julius at bairaktaris.de>
---
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
More information about the ath11k
mailing list