qcacmn: Add counter in non-TQM based Tx completion path
Rate limit the log in non-TQM Tx completion path and add a counter to increment whenever Tx completion status is received and release source is non-TQM. Change-Id: I8968ccc7a499577bd4fdfaef78e6520b00c12503 CRs-Fixed: 3201403
This commit is contained in:

committed by
Madan Koyyalamudi

parent
9d283234a7
commit
85b76d5a6c
@@ -1366,6 +1366,8 @@ struct protocol_trace_count {
|
|||||||
* @su_be_ppdu_cnt: SU Tx packet count
|
* @su_be_ppdu_cnt: SU Tx packet count
|
||||||
* @mu_be_ppdu_cnt: MU Tx packet count
|
* @mu_be_ppdu_cnt: MU Tx packet count
|
||||||
* @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured BW
|
* @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured BW
|
||||||
|
* @release_src_not_tqm: Counter to keep track of release source is not TQM
|
||||||
|
* in TX completion status processing
|
||||||
*/
|
*/
|
||||||
struct cdp_tx_stats {
|
struct cdp_tx_stats {
|
||||||
struct cdp_pkt_info comp_pkt;
|
struct cdp_pkt_info comp_pkt;
|
||||||
@@ -1483,6 +1485,7 @@ struct cdp_tx_stats {
|
|||||||
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
|
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
|
||||||
uint32_t punc_bw[MAX_PUNCTURED_MODE];
|
uint32_t punc_bw[MAX_PUNCTURED_MODE];
|
||||||
#endif
|
#endif
|
||||||
|
uint32_t release_src_not_tqm;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* struct cdp_rx_stats - rx Level Stats
|
/* struct cdp_rx_stats - rx Level Stats
|
||||||
|
@@ -1580,6 +1580,8 @@ void dp_update_vdev_stats_on_peer_unmap(struct dp_vdev *vdev,
|
|||||||
_tgtobj->tx.tx_success_twt.bytes += \
|
_tgtobj->tx.tx_success_twt.bytes += \
|
||||||
_srcobj->tx.tx_success_twt.bytes; \
|
_srcobj->tx.tx_success_twt.bytes; \
|
||||||
_tgtobj->tx.last_tx_ts = _srcobj->tx.last_tx_ts; \
|
_tgtobj->tx.last_tx_ts = _srcobj->tx.last_tx_ts; \
|
||||||
|
_tgtobj->tx.release_src_not_tqm += \
|
||||||
|
_srcobj->tx.release_src_not_tqm; \
|
||||||
for (i = 0; i < QDF_PROTO_SUBTYPE_MAX; i++) { \
|
for (i = 0; i < QDF_PROTO_SUBTYPE_MAX; i++) { \
|
||||||
_tgtobj->tx.no_ack_count[i] += \
|
_tgtobj->tx.no_ack_count[i] += \
|
||||||
_srcobj->tx.no_ack_count[i];\
|
_srcobj->tx.no_ack_count[i];\
|
||||||
|
@@ -6301,6 +6301,8 @@ void dp_print_peer_stats(struct dp_peer *peer,
|
|||||||
peer_stats->tx.last_ack_rssi);
|
peer_stats->tx.last_ack_rssi);
|
||||||
DP_PRINT_STATS("Dropped At FW: Removed Pkts = %u",
|
DP_PRINT_STATS("Dropped At FW: Removed Pkts = %u",
|
||||||
peer_stats->tx.dropped.fw_rem.num);
|
peer_stats->tx.dropped.fw_rem.num);
|
||||||
|
DP_PRINT_STATS("Release source not TQM = %u",
|
||||||
|
peer_stats->tx.release_src_not_tqm);
|
||||||
if (pdev && !wlan_cfg_get_dp_pdev_nss_enabled(pdev->wlan_cfg_ctx)) {
|
if (pdev && !wlan_cfg_get_dp_pdev_nss_enabled(pdev->wlan_cfg_ctx)) {
|
||||||
DP_PRINT_STATS("Dropped At FW: Removed bytes = %llu",
|
DP_PRINT_STATS("Dropped At FW: Removed bytes = %llu",
|
||||||
peer_stats->tx.dropped.fw_rem.bytes);
|
peer_stats->tx.dropped.fw_rem.bytes);
|
||||||
@@ -6494,7 +6496,7 @@ void dp_print_peer_stats(struct dp_peer *peer,
|
|||||||
peer_stats->rx.err.rxdma_wifi_parse_err);
|
peer_stats->rx.err.rxdma_wifi_parse_err);
|
||||||
DP_PRINT_STATS("Msdu's Received As Part of Ampdu = %d",
|
DP_PRINT_STATS("Msdu's Received As Part of Ampdu = %d",
|
||||||
peer_stats->rx.non_ampdu_cnt);
|
peer_stats->rx.non_ampdu_cnt);
|
||||||
DP_PRINT_STATS("Msdu's Recived As Ampdu = %d",
|
DP_PRINT_STATS("Msdu's Received As Ampdu = %d",
|
||||||
peer_stats->rx.ampdu_cnt);
|
peer_stats->rx.ampdu_cnt);
|
||||||
DP_PRINT_STATS("Msdu's Received Not Part of Amsdu's = %d",
|
DP_PRINT_STATS("Msdu's Received Not Part of Amsdu's = %d",
|
||||||
peer_stats->rx.non_amsdu_cnt);
|
peer_stats->rx.non_amsdu_cnt);
|
||||||
|
@@ -4152,7 +4152,8 @@ dp_tx_update_peer_stats(struct dp_tx_desc_s *tx_desc,
|
|||||||
tid_stats = &pdev->stats.tid_stats.tid_tx_stats[ring_id][tid];
|
tid_stats = &pdev->stats.tid_stats.tid_tx_stats[ring_id][tid];
|
||||||
|
|
||||||
if (ts->release_src != HAL_TX_COMP_RELEASE_SOURCE_TQM) {
|
if (ts->release_src != HAL_TX_COMP_RELEASE_SOURCE_TQM) {
|
||||||
dp_err("Release source is not from TQM");
|
dp_err_rl("Release source:%d is not from TQM", ts->release_src);
|
||||||
|
DP_PEER_PER_PKT_STATS_INC(txrx_peer, tx.release_src_not_tqm, 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3479,6 +3479,8 @@ typedef void *dp_txrx_ref_handle;
|
|||||||
* @last_tx_ts: last timestamp in jiffies when tx comp occurred
|
* @last_tx_ts: last timestamp in jiffies when tx comp occurred
|
||||||
* @avg_sojourn_msdu[CDP_DATA_TID_MAX]: Avg sojourn msdu stat
|
* @avg_sojourn_msdu[CDP_DATA_TID_MAX]: Avg sojourn msdu stat
|
||||||
* @protocol_trace_cnt: per-peer protocol counter
|
* @protocol_trace_cnt: per-peer protocol counter
|
||||||
|
* @release_src_not_tqm: Counter to keep track of release source is not TQM
|
||||||
|
* in TX completion status processing
|
||||||
*/
|
*/
|
||||||
struct dp_peer_per_pkt_tx_stats {
|
struct dp_peer_per_pkt_tx_stats {
|
||||||
struct cdp_pkt_info ucast;
|
struct cdp_pkt_info ucast;
|
||||||
@@ -3516,6 +3518,7 @@ struct dp_peer_per_pkt_tx_stats {
|
|||||||
#ifdef VDEV_PEER_PROTOCOL_COUNT
|
#ifdef VDEV_PEER_PROTOCOL_COUNT
|
||||||
struct protocol_trace_count protocol_trace_cnt[CDP_TRACE_MAX];
|
struct protocol_trace_count protocol_trace_cnt[CDP_TRACE_MAX];
|
||||||
#endif
|
#endif
|
||||||
|
uint32_t release_src_not_tqm;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user