浏览代码

qcacmn: Fix for Tx completions counter not being updated in txrx_stats

Tx completion success counters are not being updated correctly.
Accumulate successful completions in tx_success variable.

Change-Id: I290e581e93e03ad23e349c9df7834174d6d3a787
CRs-Fixed: 2191599
Venkata Sharath Chandra Manchala 7 年之前
父节点
当前提交
65812e69c8
共有 4 个文件被更改,包括 33 次插入2 次删除
  1. 6 0
      dp/inc/cdp_txrx_stats_struct.h
  2. 3 0
      dp/wifi3.0/dp_internal.h
  3. 13 2
      dp/wifi3.0/dp_main.c
  4. 11 0
      dp/wifi3.0/dp_tx.c

+ 6 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -161,6 +161,12 @@ struct cdp_tx_stats {
 		uint32_t fw_rem_tx;
 		/* aged out in mpdu/msdu queues*/
 		uint32_t age_out;
+		/* discarded by firmware reason 1 */
+		uint32_t fw_reason1;
+		/* discarded by firmware reason 2 */
+		uint32_t fw_reason2;
+		/* discarded by firmware reason 3 */
+		uint32_t fw_reason3;
 	} dropped;
 };
 

+ 3 - 0
dp/wifi3.0/dp_internal.h

@@ -279,6 +279,9 @@ while (0)
 		DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_rem); \
 		DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_rem_tx); \
 		DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_rem_notx); \
+		DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_reason1); \
+		DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_reason2); \
+		DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_reason3); \
 		DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.age_out); \
 								\
 		DP_STATS_AGGR(_tgtobj, _srcobj, rx.err.mic_err); \

+ 13 - 2
dp/wifi3.0/dp_main.c

@@ -4538,11 +4538,16 @@ dp_print_pdev_tx_stats(struct dp_pdev *pdev)
 			pdev->stats.tx_i.processed.num);
 	DP_PRINT_STATS("	Bytes = %llu",
 			pdev->stats.tx_i.processed.bytes);
-	DP_PRINT_STATS("Completions:");
-	DP_PRINT_STATS("	Packets = %d",
+	DP_PRINT_STATS("Total Completions:");
+	DP_PRINT_STATS("	Packets = %u",
 			pdev->stats.tx.comp_pkt.num);
 	DP_PRINT_STATS("	Bytes = %llu",
 			pdev->stats.tx.comp_pkt.bytes);
+	DP_PRINT_STATS("Successful Completions:");
+	DP_PRINT_STATS("	Packets = %u",
+			pdev->stats.tx.tx_success.num);
+	DP_PRINT_STATS("	Bytes = %llu",
+			pdev->stats.tx.tx_success.bytes);
 	DP_PRINT_STATS("Dropped:");
 	DP_PRINT_STATS("	Total = %d",
 			pdev->stats.tx_i.dropped.dropped_pkt.num);
@@ -4562,6 +4567,12 @@ dp_print_pdev_tx_stats(struct dp_pdev *pdev)
 			pdev->stats.tx.dropped.fw_rem_tx);
 	DP_PRINT_STATS("	FW removed untransmitted = %d",
 			pdev->stats.tx.dropped.fw_rem_notx);
+	DP_PRINT_STATS("	FW removed untransmitted fw_reason1 = %d",
+			pdev->stats.tx.dropped.fw_reason1);
+	DP_PRINT_STATS("	FW removed untransmitted fw_reason2 = %d",
+			pdev->stats.tx.dropped.fw_reason2);
+	DP_PRINT_STATS("	FW removed untransmitted fw_reason3 = %d",
+			pdev->stats.tx.dropped.fw_reason3);
 	DP_PRINT_STATS("	Aged Out from msdu/mpdu queues = %d",
 			pdev->stats.tx.dropped.age_out);
 	DP_PRINT_STATS("Scatter Gather:");

+ 11 - 0
dp/wifi3.0/dp_tx.c

@@ -2525,6 +2525,8 @@ static void dp_tx_update_peer_stats(struct dp_peer *peer,
 	if (!ts->release_src == HAL_TX_COMP_RELEASE_SOURCE_TQM)
 		return;
 
+
+	DP_STATS_INC_PKT(peer, tx.comp_pkt, 1, length);
 	DP_STATS_INCC(peer, tx.dropped.age_out, 1,
 			(ts->status == HAL_TX_TQM_RR_REM_CMD_AGED));
 
@@ -2537,6 +2539,15 @@ static void dp_tx_update_peer_stats(struct dp_peer *peer,
 	DP_STATS_INCC(peer, tx.dropped.fw_rem_tx, 1,
 			(ts->status == HAL_TX_TQM_RR_REM_CMD_TX));
 
+	DP_STATS_INCC(peer, tx.dropped.fw_reason1, 1,
+			(ts->status == HAL_TX_TQM_RR_FW_REASON1));
+
+	DP_STATS_INCC(peer, tx.dropped.fw_reason2, 1,
+			(ts->status == HAL_TX_TQM_RR_FW_REASON2));
+
+	DP_STATS_INCC(peer, tx.dropped.fw_reason3, 1,
+			(ts->status == HAL_TX_TQM_RR_FW_REASON3));
+
 	if (!ts->status == HAL_TX_TQM_RR_FRAME_ACKED)
 		return;