浏览代码

qcacmn: Printing Tx Desc in use count for DS mode

Requirement:
As part of serviceability for DS, display the number
of Tx descriptors currently in use by DS module
via “cfg80211tool athXX txrx_stats 260” like non-DS.

Snippet of log/code of Non-DS:
DP_PRINT_STATS("Tx Descriptors In Use = %u",
                       soc->stats.tx.desc_in_use);

Fix:
Introduced a new ops (dp_tx_ppe_ds_inuse_desc)
to display the current Tx desc in use.
dp_ppe_ds_inuse_desc API will be registered
to dp_tx_ppe_ds_inuse_desc in initialization
and it will be invoked from dp_print_soc_tx_stats API
to display the in_use desc via 260 command

Change-Id: I18971fc5d4cb5eb5437b012e3b89db7c9c2446b4
CRs-Fixed: 3352686
Nanda Krishnan 2 年之前
父节点
当前提交
66fd581109
共有 4 个文件被更改,包括 32 次插入0 次删除
  1. 10 0
      dp/wifi3.0/be/dp_be.c
  2. 8 0
      dp/wifi3.0/dp_internal.h
  3. 13 0
      dp/wifi3.0/dp_stats.c
  4. 1 0
      dp/wifi3.0/dp_types.h

+ 10 - 0
dp/wifi3.0/be/dp_be.c

@@ -84,6 +84,15 @@ static void dp_ppeds_rings_status(struct dp_soc *soc)
 	dp_print_ring_stat_from_hal(soc, &be_soc->ppe_wbm_release_ring,
 				    WBM2SW_RELEASE);
 }
+
+static void dp_ppeds_inuse_desc(struct dp_soc *soc)
+{
+	struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
+
+	DP_PRINT_STATS("PPE-DS Tx Descriptors in Use = %u num_free %u",
+		       be_soc->ppeds_tx_desc.num_allocated,
+		       be_soc->ppeds_tx_desc.num_free);
+}
 #endif
 
 static void dp_soc_cfg_attach_be(struct dp_soc *soc)
@@ -2493,6 +2502,7 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
 	arch_ops->txrx_soc_ppeds_stop = dp_ppeds_stop_soc_be;
 	arch_ops->dp_register_ppeds_interrupts = dp_register_ppeds_interrupts;
 	arch_ops->dp_free_ppeds_interrupts = dp_free_ppeds_interrupts;
+	arch_ops->dp_tx_ppeds_inuse_desc = dp_ppeds_inuse_desc;
 #endif
 	dp_init_near_full_arch_ops_be(arch_ops);
 	arch_ops->get_reo_qdesc_addr = dp_rx_get_reo_qdesc_addr_be;

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

@@ -2552,6 +2552,14 @@ void dp_print_soc_tx_stats(struct dp_soc *soc);
  */
 void dp_print_soc_interrupt_stats(struct dp_soc *soc);
 
+/**
+ * dp_print_tx_ppeds_stats() - Print Tx in use stats for the soc in DS
+ * @soc: dp_soc handle
+ *
+ * Return: None
+ */
+
+void dp_print_tx_ppeds_stats(struct dp_soc *soc);
 #ifdef WLAN_DP_SRNG_USAGE_WM_TRACKING
 /**
  * dp_dump_srng_high_wm_stats() - Print the ring usage high watermark stats

+ 13 - 0
dp/wifi3.0/dp_stats.c

@@ -7687,6 +7687,18 @@ dp_print_pdev_rx_stats(struct dp_pdev *pdev)
 		       pdev->stats.rx_buffer_pool.num_pool_bufs_replenish);
 }
 
+#ifdef WLAN_SUPPORT_PPEDS
+void dp_print_tx_ppeds_stats(struct dp_soc *soc)
+{
+	if (soc->arch_ops.dp_tx_ppeds_inuse_desc)
+		soc->arch_ops.dp_tx_ppeds_inuse_desc(soc);
+}
+#else
+void dp_print_tx_ppeds_stats(struct dp_soc *soc)
+{
+}
+#endif
+
 void
 dp_print_soc_tx_stats(struct dp_soc *soc)
 {
@@ -7730,6 +7742,7 @@ dp_print_soc_tx_stats(struct dp_soc *soc)
 		       soc->stats.tx.tx_comp_loop_pkt_limit_hit);
 	DP_PRINT_STATS("Tx comp HP out of sync2 = %d",
 		       soc->stats.tx.hp_oos2);
+	dp_print_tx_ppeds_stats(soc);
 }
 
 static

+ 1 - 0
dp/wifi3.0/dp_types.h

@@ -2034,6 +2034,7 @@ struct dp_arch_ops {
 #endif
 #ifdef WLAN_SUPPORT_PPEDS
 	void (*dp_txrx_ppeds_rings_status)(struct dp_soc *soc);
+	void (*dp_tx_ppeds_inuse_desc)(struct dp_soc *soc);
 #endif
 	QDF_STATUS (*txrx_soc_ppeds_start)(struct dp_soc *soc);
 	void (*txrx_soc_ppeds_stop)(struct dp_soc *soc);