Browse Source

qcacmn: Support dp monitor desc pool memory pre-allocation

Support dp monitor desc pool memory pre-allocation.

Change-Id: I7edd766a3f02be76c1e7342ac6a55c02b43474fa
CRs-Fixed: 3544435
Jinwei Chen 2 years ago
parent
commit
6081fb19d6

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

@@ -524,6 +524,8 @@ struct dp_rx_nbuf_frag_info {
  * @DP_MON_PDEV_TYPE: Datapath monitor pdev context
  * @DP_MON_STATUS_BUF_HIST_TYPE: DP monitor status buffer history
  * @DP_CFG_EVENT_HIST_TYPE: DP config events history
+ * @DP_MON_TX_DESC_POOL_TYPE: DP TX desc pool buffer
+ * @DP_MON_RX_DESC_POOL_TYPE: DP RX desc pool buffer
  */
 enum dp_ctxt_type {
 	DP_PDEV_TYPE,
@@ -539,6 +541,8 @@ enum dp_ctxt_type {
 	DP_MON_PDEV_TYPE,
 	DP_MON_STATUS_BUF_HIST_TYPE,
 	DP_CFG_EVENT_HIST_TYPE,
+	DP_MON_TX_DESC_POOL_TYPE,
+	DP_MON_RX_DESC_POOL_TYPE,
 };
 
 /**

+ 12 - 5
dp/wifi3.0/monitor/2.0/dp_mon_2.0.c

@@ -173,9 +173,11 @@ void dp_mon_desc_pool_deinit(struct dp_mon_desc_pool *mon_desc_pool)
 	qdf_spinlock_destroy(&mon_desc_pool->lock);
 }
 
-void dp_mon_desc_pool_free(struct dp_mon_desc_pool *mon_desc_pool)
+void dp_mon_desc_pool_free(struct dp_soc *soc,
+			   struct dp_mon_desc_pool *mon_desc_pool,
+			   enum dp_ctxt_type ctx_type)
 {
-	qdf_mem_free(mon_desc_pool->array);
+	dp_context_free_mem(soc, ctx_type, mon_desc_pool->array);
 }
 
 QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_rx_2_0(struct dp_pdev *pdev)
@@ -968,12 +970,17 @@ free_desc:
 	return ret;
 }
 
-QDF_STATUS dp_mon_desc_pool_alloc(uint32_t pool_size,
+QDF_STATUS dp_mon_desc_pool_alloc(struct dp_soc *soc,
+				  enum dp_ctxt_type ctx_type,
+				  uint32_t pool_size,
 				  struct dp_mon_desc_pool *mon_desc_pool)
 {
+	size_t mem_size;
+
 	mon_desc_pool->pool_size = pool_size - 1;
-	mon_desc_pool->array = qdf_mem_malloc((mon_desc_pool->pool_size) *
-				     sizeof(union dp_mon_desc_list_elem_t));
+	mem_size = mon_desc_pool->pool_size *
+			sizeof(union dp_mon_desc_list_elem_t);
+	mon_desc_pool->array = dp_context_alloc_mem(soc, ctx_type, mem_size);
 
 	return QDF_STATUS_SUCCESS;
 }

+ 10 - 2
dp/wifi3.0/monitor/2.0/dp_mon_2.0.h

@@ -330,21 +330,29 @@ void dp_mon_desc_pool_deinit(struct dp_mon_desc_pool *mon_desc_pool);
 
 /**
  * dp_mon_desc_pool_free()- monitor descriptor pool free
+ * @soc: DP soc handle
  * @mon_desc_pool: mon desc pool
+ * @ctx_type: DP context type
  *
  * Return: None
  *
  */
-void dp_mon_desc_pool_free(struct dp_mon_desc_pool *mon_desc_pool);
+void dp_mon_desc_pool_free(struct dp_soc *soc,
+			   struct dp_mon_desc_pool *mon_desc_pool,
+			   enum dp_ctxt_type ctx_type);
 
 /**
  * dp_mon_desc_pool_alloc() - Monitor descriptor pool alloc
+ * @soc: DP soc handle
+ * @ctx_type: DP context type
  * @pool_size: Pool size
  * @mon_desc_pool: mon desc pool
  *
  * Return: non-zero for failure, zero for success
  */
-QDF_STATUS dp_mon_desc_pool_alloc(uint32_t pool_size,
+QDF_STATUS dp_mon_desc_pool_alloc(struct dp_soc *soc,
+				  enum dp_ctxt_type ctx_type,
+				  uint32_t pool_size,
 				  struct dp_mon_desc_pool *mon_desc_pool);
 
 /**

+ 4 - 2
dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c

@@ -2623,7 +2623,8 @@ void dp_rx_mon_buf_desc_pool_free(struct dp_soc *soc)
 	struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
 
 	if (mon_soc)
-		dp_mon_desc_pool_free(&mon_soc_be->rx_desc_mon);
+		dp_mon_desc_pool_free(soc, &mon_soc_be->rx_desc_mon,
+				      DP_MON_RX_DESC_POOL_TYPE);
 }
 
 void dp_rx_mon_soc_detach_2_0(struct dp_soc *soc, int lmac_id)
@@ -2658,7 +2659,8 @@ dp_rx_mon_buf_desc_pool_alloc(struct dp_soc *soc)
 	rx_mon_desc_pool = &mon_soc_be->rx_desc_mon;
 
 	qdf_print("%s:%d rx mon buf desc pool entries: %d", __func__, __LINE__, entries);
-	return dp_mon_desc_pool_alloc(entries, rx_mon_desc_pool);
+	return dp_mon_desc_pool_alloc(soc, DP_MON_RX_DESC_POOL_TYPE,
+				      entries, rx_mon_desc_pool);
 }
 
 void

+ 4 - 2
dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.c

@@ -352,7 +352,8 @@ void dp_tx_mon_buf_desc_pool_free(struct dp_soc *soc)
 		dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
 
 	if (mon_soc_be)
-		dp_mon_desc_pool_free(&mon_soc_be->tx_desc_mon);
+		dp_mon_desc_pool_free(soc, &mon_soc_be->tx_desc_mon,
+				      DP_MON_TX_DESC_POOL_TYPE);
 }
 
 QDF_STATUS dp_tx_mon_soc_init_2_0(struct dp_soc *soc)
@@ -406,7 +407,8 @@ dp_tx_mon_buf_desc_pool_alloc(struct dp_soc *soc)
 	tx_mon_desc_pool = &mon_soc_be->tx_desc_mon;
 
 	qdf_print("%s:%d tx mon buf desc pool entries: %d", __func__, __LINE__, entries);
-	return dp_mon_desc_pool_alloc(entries, tx_mon_desc_pool);
+	return dp_mon_desc_pool_alloc(soc, DP_MON_TX_DESC_POOL_TYPE,
+				      entries, tx_mon_desc_pool);
 }
 
 void