qcacmn: Fix Hardware Tx completion latency stats

Current Hw Tx latency stats logs over 50 lines. This
change will reduce the stats to a concise logging.

Change-Id: Ia449ca1d97eabac069a1e8b46c64a73c4ab912ed
CRs-Fixed: 3299078
This commit is contained in:
Namita Nair
2022-11-08 16:09:46 -08:00
committed by Rahul Choudhary
parent 6eaf41462a
commit 22d4ab462c

View File

@@ -318,6 +318,17 @@ const char *fw_to_hw_delay_bucket[CDP_DELAY_BUCKET_MAX + 1] = {
};
#endif
#if defined(HW_TX_DELAY_STATS_ENABLE)
const char *fw_to_hw_delay_bkt_str[CDP_DELAY_BUCKET_MAX + 1] = {
"0-2ms", "2-4",
"4-6", "6-8",
"8-10", "10-20",
"20-30", "30-40",
"40-50", "50-100",
"100-250", "250-500", "500+ ms"
};
#endif
#ifdef QCA_ENH_V3_STATS_SUPPORT
#ifndef WLAN_CONFIG_TX_DELAY
const char *sw_enq_delay_bucket[CDP_DELAY_BUCKET_MAX + 1] = {
@@ -4964,6 +4975,22 @@ static inline const char *dp_vow_str_fw_to_hw_delay(uint8_t index)
return fw_to_hw_delay_bucket[index];
}
#if defined(HW_TX_DELAY_STATS_ENABLE)
/**
* dp_str_fw_to_hw_delay_bkt() - Return string for concise logging of delay
* @index: Index of delay
*
* Return: char const pointer
*/
static inline const char *dp_str_fw_to_hw_delay_bkt(uint8_t index)
{
if (index > CDP_DELAY_BUCKET_MAX)
return "Invalid";
return fw_to_hw_delay_bkt_str[index];
}
#endif
/**
* dp_accumulate_delay_stats() - Update delay stats members
* @total: Update stats total structure
@@ -5401,19 +5428,39 @@ QDF_STATUS dp_pdev_get_tid_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
#endif
#ifdef HW_TX_DELAY_STATS_ENABLE
#define DP_TX_DELAY_STATS_STR_LEN 512
#define DP_SHORT_DELAY_BKT_COUNT 5
static void dp_vdev_print_tx_delay_stats(struct dp_vdev *vdev)
{
struct cdp_delay_stats delay_stats;
struct cdp_tid_tx_stats *per_ring;
uint8_t tid, index;
uint64_t count = 0;
uint32_t count = 0;
uint8_t ring_id;
char *buf;
size_t pos, buf_len;
char hw_tx_delay_str[DP_TX_DELAY_STATS_STR_LEN] = {"\0"};
buf_len = DP_TX_DELAY_STATS_STR_LEN;
if (!vdev)
return;
DP_PRINT_STATS("vdev_id: %d Per TID Delay Non-Zero Stats:\n",
vdev->vdev_id);
dp_info("vdev_id: %d Per TID HW Tx completion latency Stats:",
vdev->vdev_id);
buf = hw_tx_delay_str;
dp_info(" Tid%32sPkts_per_delay_bucket%60s | Min | Max | Avg |",
"", "");
pos = 0;
pos += qdf_scnprintf(buf + pos, buf_len - pos, "%6s", "");
for (index = 0; index < CDP_DELAY_BUCKET_MAX; index++) {
if (index < DP_SHORT_DELAY_BKT_COUNT)
pos += qdf_scnprintf(buf + pos, buf_len - pos, "%7s",
dp_str_fw_to_hw_delay_bkt(index));
else
pos += qdf_scnprintf(buf + pos, buf_len - pos, "%9s",
dp_str_fw_to_hw_delay_bkt(index));
}
dp_info("%s", hw_tx_delay_str);
for (tid = 0; tid < CDP_MAX_DATA_TIDS; tid++) {
qdf_mem_zero(&delay_stats, sizeof(delay_stats));
for (ring_id = 0; ring_id < CDP_MAX_TX_COMP_RINGS; ring_id++) {
@@ -5421,21 +5468,21 @@ static void dp_vdev_print_tx_delay_stats(struct dp_vdev *vdev)
dp_accumulate_delay_stats(&delay_stats,
&per_ring->hwtx_delay);
}
DP_PRINT_STATS("Hardware Tx completion latency stats TID: %d",
tid);
pos = 0;
pos += qdf_scnprintf(buf + pos, buf_len - pos, "%4u ", tid);
for (index = 0; index < CDP_DELAY_BUCKET_MAX; index++) {
count = delay_stats.delay_bucket[index];
if (count) {
DP_PRINT_STATS("%s: Packets = %llu",
dp_vow_str_fw_to_hw_delay(index),
count);
}
if (index < DP_SHORT_DELAY_BKT_COUNT)
pos += qdf_scnprintf(buf + pos, buf_len - pos,
"%6u|", count);
else
pos += qdf_scnprintf(buf + pos, buf_len - pos,
"%8u|", count);
}
DP_PRINT_STATS("Min = %u", delay_stats.min_delay);
DP_PRINT_STATS("Max = %u", delay_stats.max_delay);
DP_PRINT_STATS("Avg = %u\n", delay_stats.avg_delay);
pos += qdf_scnprintf(buf + pos, buf_len - pos,
"%10u | %3u | %3u|", delay_stats.min_delay,
delay_stats.max_delay, delay_stats.avg_delay);
dp_info("%s", hw_tx_delay_str);
}
}
@@ -5469,7 +5516,8 @@ void dp_pdev_print_tx_delay_stats(struct dp_soc *soc)
for (index = 0; index < num_vdev; index++) {
vdev = vdev_array[index];
dp_vdev_print_tx_delay_stats(vdev);
if (qdf_unlikely(dp_is_vdev_tx_delay_stats_enabled(vdev)))
dp_vdev_print_tx_delay_stats(vdev);
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_GENERIC_STATS);
}
qdf_mem_free(vdev_array);