From fe0876f1865869e93bde6e138f1d9d99f1ae54a9 Mon Sep 17 00:00:00 2001 From: Pradeep Kumar Chitrapu Date: Wed, 10 Aug 2022 11:35:45 -0700 Subject: [PATCH 03/12] ath12k: add stats for TX buffer allocation failures Total tx buffers allocated per TCL ring id. When buffer is not available on a particular TCL ring, capture this in stats. Signed-off-by: Pradeep Kumar Chitrapu --- drivers/net/wireless/ath/ath12k/core.h | 3 +++ drivers/net/wireless/ath/ath12k/debugfs.c | 5 +++++ drivers/net/wireless/ath/ath12k/dp_tx.c | 1 + 3 files changed, 9 insertions(+) --- a/drivers/net/wireless/ath/ath12k/core.h +++ b/drivers/net/wireless/ath/ath12k/core.h @@ -881,6 +881,9 @@ struct ath12k_dp_ring_bp_stats { struct ath12k_soc_dp_tx_err_stats { /* TCL Ring Descriptor unavailable */ u32 desc_na[DP_TCL_NUM_RING_MAX]; + /* TCL Ring Buffers unavailable */ + u32 txbuf_na[DP_TCL_NUM_RING_MAX]; + /* Other failures during dp_tx due to mem allocation failure * idr unavailable etc. */ --- a/drivers/net/wireless/ath/ath12k/debugfs.c +++ b/drivers/net/wireless/ath/ath12k/debugfs.c @@ -865,6 +865,11 @@ static ssize_t ath12k_debugfs_dump_soc_d len += scnprintf(buf + len, size - len, "ring%d: %u\n", i, soc_stats->tx_err.desc_na[i]); + len += scnprintf(buf + len, size - len, "\nTCL Ring Buffer Alloc Failures:\n"); + for (i = 0; i < DP_TCL_NUM_RING_MAX; i++) + len += scnprintf(buf + len, size - len, "ring%d: %u\n", + i, soc_stats->tx_err.txbuf_na[i]); + len += scnprintf(buf + len, size - len, "\nMisc Transmit Failures: %d\n", atomic_read(&soc_stats->tx_err.misc_fail)); --- a/drivers/net/wireless/ath/ath12k/dp_tx.c +++ b/drivers/net/wireless/ath/ath12k/dp_tx.c @@ -169,6 +169,7 @@ tcl_ring_sel: tx_desc = ath12k_dp_tx_assign_buffer(dp, ti.ring_id); if (!tx_desc) { + ab->soc_stats.tx_err.txbuf_na[ti.ring_id]++; if (ring_map == (BIT(DP_TCL_NUM_RING_MAX) - 1)) return -ENOSPC;