[PATCH] wifi: ath11k: print each user's sounding counts in htt_stats
From: Christopher Griffin via B4 Relay
Date: Fri Nov 06 2026 - 09:32:21 EST
From: Christopher Griffin <christophergriffin05@xxxxxxxxx>
The TX sounding stats of htt_stats print a "Sounding User" line for
each of the 4 (11ac) or 8 (11ax) users, but every line shows
sounding[0] to sounding[3], the 20/40/80/160 MHz counts of user 0. The
array holds the counts of all users, at sounding[user * max_bw + bw]
as the comment in struct htt_tx_sounding_stats_tlv says, and ath12k
prints it that way.
Print each user's own counts. On an IPQ8074 AP that sounded one HE
client at 40 MHz (392 SU CBF), all 8 lines showed 40 MHz: 404 before;
after, user 0 shows 404 and users 1 to 7 show 0.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.9.0.1-02146-QCAHKSWPL_SILICONZ-1
Fixes: d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Christopher Griffin <christophergriffin05@xxxxxxxxx>
---
Found on an Arista C-360 (IPQ8074) while checking that beamforming
sounding ran after enabling SU beamforming: every "Sounding User" line
of htt_stats type 22 showed the same counts.
---
drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c b/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c
index 731f3ca867111..5ddc1ff8492f6 100644
--- a/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c
+++ b/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c
@@ -1235,13 +1235,12 @@ static inline void htt_print_tx_sounding_stats_tlv(const void *tag_buf,
cbf_160[HTT_EXPLICIT_TXBF_MU_RBO_STEER_STATS]);
for (i = 0; i < HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS; i++) {
+ const u32 *snd = htt_stats_buf->sounding +
+ i * HTT_TX_PDEV_STATS_NUM_BW_COUNTERS;
+
len += scnprintf(buf + len, buf_len - len,
"Sounding User %u = 20MHz: %u, 40MHz : %u, 80MHz: %u, 160MHz: %u\n",
- i,
- htt_stats_buf->sounding[0],
- htt_stats_buf->sounding[1],
- htt_stats_buf->sounding[2],
- htt_stats_buf->sounding[3]);
+ i, snd[0], snd[1], snd[2], snd[3]);
}
} else if (htt_stats_buf->tx_sounding_mode == HTT_TX_AX_SOUNDING_MODE) {
len += scnprintf(buf + len, buf_len - len,
@@ -1276,13 +1275,12 @@ static inline void htt_print_tx_sounding_stats_tlv(const void *tag_buf,
cbf_160[HTT_EXPLICIT_TXBF_MU_RBO_STEER_STATS]);
for (i = 0; i < HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS; i++) {
+ const u32 *snd = htt_stats_buf->sounding +
+ i * HTT_TX_PDEV_STATS_NUM_BW_COUNTERS;
+
len += scnprintf(buf + len, buf_len - len,
"Sounding User %u = 20MHz: %u, 40MHz : %u, 80MHz: %u, 160MHz: %u\n",
- i,
- htt_stats_buf->sounding[0],
- htt_stats_buf->sounding[1],
- htt_stats_buf->sounding[2],
- htt_stats_buf->sounding[3]);
+ i, snd[0], snd[1], snd[2], snd[3]);
}
}
---
base-commit: 5c8eab13e391aaabd5a1ad58f3ee4bb10ce7573e
change-id: 20261106-ath11k-sounding-stats-per-user-94d9acb8b75a
Best regards,
--
Christopher Griffin <christophergriffin05@xxxxxxxxx>