From 40395a8bda4e36ea9d69d8c7c4868d9eb0a8ef6b Mon Sep 17 00:00:00 2001 From: Jianmin Zhu Date: Wed, 5 Jan 2022 11:32:47 +0800 Subject: [PATCH] qcacmn: Add mpdu tx retries stats Customer reported their HLOS LTE-WLAN transition algo sometimes go wrong for wrong low layer stats, Txretry delta is bigger than Txtotal delta. Txretry unit is msdu while Txtotal unit is mpdu. Add vdev/peer stats for mpdu number of successfully transmitted after more than one retransmission attempt, to align mpdu tx_packets, tx_failed. CRs-Fixed: 3099490 Change-Id: Id4b9d8fd81af4bf0c141dad481bfd2b3f6c1db2a --- dp/inc/cdp_txrx_stats_struct.h | 2 ++ dp/wifi3.0/dp_internal.h | 1 + dp/wifi3.0/dp_tx.c | 5 ++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h index 34bd143389c5..813de47f98eb 100644 --- a/dp/inc/cdp_txrx_stats_struct.h +++ b/dp/inc/cdp_txrx_stats_struct.h @@ -914,6 +914,7 @@ struct protocol_trace_count { * @stbc: Packets in STBC * @ldpc: Packets in LDPC * @retries: Packet retries + * @retries_mpdu: mpdu number of successfully transmitted after retries * @non_amsdu_cnt: Number of MSDUs with no MSDU level aggregation * @amsdu_cnt: Number of MSDUs part of AMSDU * @tx_rate: Tx Rate @@ -995,6 +996,7 @@ struct cdp_tx_stats { uint32_t stbc; uint32_t ldpc; uint32_t retries; + uint32_t retries_mpdu; uint32_t non_amsdu_cnt; uint32_t amsdu_cnt; uint32_t tx_rate; diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 13e4a851611c..e9f8de7431e7 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -853,6 +853,7 @@ static inline void dp_update_vdev_stats(struct dp_soc *soc, tgtobj->tx.ldpc += srcobj->stats.tx.ldpc; tgtobj->tx.pream_punct_cnt += srcobj->stats.tx.pream_punct_cnt; tgtobj->tx.retries += srcobj->stats.tx.retries; + tgtobj->tx.retries_mpdu += srcobj->stats.tx.retries_mpdu; tgtobj->tx.non_amsdu_cnt += srcobj->stats.tx.non_amsdu_cnt; tgtobj->tx.amsdu_cnt += srcobj->stats.tx.amsdu_cnt; tgtobj->tx.non_ampdu_cnt += srcobj->stats.tx.non_ampdu_cnt; diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 9438be28a218..2bb79296f82b 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -4117,15 +4117,18 @@ dp_tx_update_peer_stats(struct dp_tx_desc_s *tx_desc, DP_STATS_INCC(peer, tx.stbc, 1, ts->stbc); DP_STATS_INCC(peer, tx.ldpc, 1, ts->ldpc); DP_STATS_INCC(peer, tx.retries, 1, ts->transmit_cnt > 1); + #if defined(FEATURE_PERPKT_INFO) && WDI_EVENT_ENABLE dp_wdi_event_handler(WDI_EVENT_UPDATE_DP_STATS, pdev->soc, &peer->stats, ts->peer_id, UPDATE_PEER_STATS, pdev->pdev_id); #endif - if (ts->first_msdu) + if (ts->first_msdu) { DP_STATS_INCC(peer, tx.mpdu_success_with_retries, qdf_do_div(ts->transmit_cnt, DP_RETRY_COUNT), ts->transmit_cnt > DP_RETRY_COUNT); + DP_STATS_INCC(peer, tx.retries_mpdu, 1, ts->transmit_cnt > 1); + } } #ifdef QCA_LL_TX_FLOW_CONTROL_V2