Browse Source

qcacld-3.0: Move fisa aggregation control flags to dp_intf

Currently the FISA aggregation control flags, based on GRO
settings, are part of dp_vdev.

Move these FISA aggregation control flags to dp_intf,
since these controls are on an interface level, and not
on a per link level.

Change-Id: I93d0e215f8954376a96967cce6d533bd4be2d3a6
CRs-Fixed: 3574036
Rakesh Pillai 1 year ago
parent
commit
2461d6dc54

+ 14 - 0
components/dp/core/inc/wlan_dp_priv.h

@@ -415,6 +415,7 @@ struct fisa_pkt_hist {
  * @rx_flow_tuple_info: RX tuple information
  * @napi_id: NAPI ID (REO ID) on which the flow is being received
  * @vdev: VDEV handle corresponding to the FLOW
+ * @dp_intf: DP interface handle corresponding to the flow
  * @bytes_aggregated: Number of bytes currently aggregated
  * @flush_count: Number of Flow flushes done
  * @aggr_count: Aggregation count
@@ -457,6 +458,7 @@ struct dp_fisa_rx_sw_ft {
 	struct cdp_rx_flow_tuple_info rx_flow_tuple_info;
 	uint8_t napi_id;
 	struct dp_vdev *vdev;
+	struct wlan_dp_intf *dp_intf;
 	uint64_t bytes_aggregated;
 	uint32_t flush_count;
 	uint32_t aggr_count;
@@ -605,6 +607,10 @@ struct dp_rx_fst {
  * @sap_tx_block_mask: SAP TX block mask
  * @gro_disallowed: GRO disallowed flag
  * @gro_flushed: GRO flushed flag
+ * @fisa_disallowed: Flag to indicate fisa aggregation not to be done for a
+ *		     particular rx_context
+ * @fisa_force_flushed: Flag to indicate FISA flow has been flushed for a
+ *			particular rx_context
  * @runtime_disable_rx_thread: Runtime Rx thread flag
  * @rx_stack: function pointer Rx packet handover
  * @tx_fn: function pointer to send Tx packet
@@ -664,6 +670,14 @@ struct wlan_dp_intf {
 	qdf_atomic_t gro_disallowed;
 	uint8_t gro_flushed[DP_MAX_RX_THREADS];
 
+#ifdef WLAN_SUPPORT_RX_FISA
+	/*
+	 * Params used for controlling the fisa aggregation dynamically
+	 */
+	uint8_t fisa_disallowed[MAX_REO_DEST_RINGS];
+	uint8_t fisa_force_flushed[MAX_REO_DEST_RINGS];
+#endif
+
 	bool runtime_disable_rx_thread;
 
 	enum bss_intf_state bss_state;

+ 31 - 29
components/dp/core/src/wlan_dp_fisa_rx.c

@@ -431,6 +431,16 @@ dp_rx_fisa_setup_cmem_fse(struct dp_rx_fst *fisa_hdl, uint32_t hashed_flow_idx,
 					  &flow);
 }
 
+static inline
+struct wlan_dp_intf *dp_fisa_rx_get_dp_intf_for_vdev(struct dp_vdev *vdev)
+{
+	struct wlan_dp_link *dp_link =
+				(struct wlan_dp_link *)vdev->osif_vdev;
+
+	/* dp_link cannot be invalid if vdev is present */
+	return dp_link->dp_intf;
+}
+
 /**
  * dp_rx_fisa_update_sw_ft_entry() - Helper function to update few SW FT entry
  * @sw_ft_entry: Pointer to softerware flow table entry
@@ -450,6 +460,7 @@ static void dp_rx_fisa_update_sw_ft_entry(struct dp_fisa_rx_sw_ft *sw_ft_entry,
 	sw_ft_entry->flow_hash = flow_hash;
 	sw_ft_entry->flow_id = flow_id;
 	sw_ft_entry->vdev = vdev;
+	sw_ft_entry->dp_intf = dp_fisa_rx_get_dp_intf_for_vdev(vdev);
 	sw_ft_entry->dp_ctx = dp_ctx;
 }
 
@@ -578,6 +589,8 @@ dp_rx_fisa_add_ft_entry(struct dp_vdev *vdev,
 		if (is_same_flow(&sw_ft_entry->rx_flow_tuple_info,
 				 &rx_flow_tuple_info)) {
 			sw_ft_entry->vdev = vdev;
+			sw_ft_entry->dp_intf =
+					dp_fisa_rx_get_dp_intf_for_vdev(vdev);
 			dp_fisa_debug("It is same flow fse entry idx %d",
 				      hashed_flow_idx);
 			/* Incoming flow tuple matches with existing
@@ -1086,6 +1099,7 @@ dp_fisa_rx_get_sw_ft_entry(struct dp_rx_fst *fisa_hdl, qdf_nbuf_t nbuf,
 
 	if (!fisa_hdl->flow_deletion_supported) {
 		sw_ft_entry->vdev = vdev;
+		sw_ft_entry->dp_intf = dp_fisa_rx_get_dp_intf_for_vdev(vdev);
 		return sw_ft_entry;
 	}
 
@@ -1099,6 +1113,7 @@ dp_fisa_rx_get_sw_ft_entry(struct dp_rx_fst *fisa_hdl, qdf_nbuf_t nbuf,
 		return NULL;
 
 	sw_ft_entry->vdev = vdev;
+	sw_ft_entry->dp_intf = dp_fisa_rx_get_dp_intf_for_vdev(vdev);
 	return sw_ft_entry;
 }
 
@@ -1963,17 +1978,15 @@ static bool dp_is_nbuf_bypass_fisa(qdf_nbuf_t nbuf)
 }
 
 /**
- * dp_rx_fisa_flush_by_vdev_ctx_id() - Flush fisa aggregates per vdev and rx
- *  context id
- * @soc: core txrx main context
- * @vdev: Handle DP vdev
+ * dp_rx_fisa_flush_by_intf_ctx_id() - Flush fisa aggregates per dp_interface
+ *				       and rx context id
+ * @dp_intf: DP interface handle
  * @rx_ctx_id: Rx context id
  *
  * Return: Success on flushing the flows for the vdev and rx ctx id
  */
 static
-QDF_STATUS dp_rx_fisa_flush_by_vdev_ctx_id(struct dp_soc *soc,
-					   struct dp_vdev *vdev,
+QDF_STATUS dp_rx_fisa_flush_by_intf_ctx_id(struct wlan_dp_intf *dp_intf,
 					   uint8_t rx_ctx_id)
 {
 	struct wlan_dp_psoc_context *dp_ctx = dp_get_context();
@@ -1986,10 +1999,10 @@ QDF_STATUS dp_rx_fisa_flush_by_vdev_ctx_id(struct dp_soc *soc,
 	dp_rx_fisa_acquire_ft_lock(fisa_hdl, rx_ctx_id);
 	for (i = 0; i < ft_size; i++) {
 		if (sw_ft_entry[i].is_populated &&
-		    vdev == sw_ft_entry[i].vdev &&
+		    dp_intf == sw_ft_entry[i].dp_intf &&
 		    sw_ft_entry[i].napi_id == rx_ctx_id) {
-			dp_fisa_debug("flushing %d %pk vdev %pK napi id:%d", i,
-				      &sw_ft_entry[i], vdev, rx_ctx_id);
+			dp_fisa_debug("flushing %d %pk dp_intf %pK napi id:%d",
+				      i, &sw_ft_entry[i], dp_intf, rx_ctx_id);
 			dp_rx_fisa_flush_flow_wrap(&sw_ft_entry[i]);
 		}
 	}
@@ -2010,15 +2023,18 @@ static bool dp_fisa_disallowed_for_vdev(struct dp_soc *soc,
 					struct dp_vdev *vdev,
 					uint8_t rx_ctx_id)
 {
-	if (!vdev->fisa_disallowed[rx_ctx_id]) {
-		if (vdev->fisa_force_flushed[rx_ctx_id])
-			vdev->fisa_force_flushed[rx_ctx_id] = 0;
+	struct wlan_dp_intf *dp_intf;
+
+	dp_intf = dp_fisa_rx_get_dp_intf_for_vdev(vdev);
+	if (!dp_intf->fisa_disallowed[rx_ctx_id]) {
+		if (dp_intf->fisa_force_flushed[rx_ctx_id])
+			dp_intf->fisa_force_flushed[rx_ctx_id] = 0;
 		return false;
 	}
 
-	if (!vdev->fisa_force_flushed[rx_ctx_id]) {
-		dp_rx_fisa_flush_by_vdev_ctx_id(soc, vdev, rx_ctx_id);
-		vdev->fisa_force_flushed[rx_ctx_id] = 1;
+	if (!dp_intf->fisa_force_flushed[rx_ctx_id]) {
+		dp_rx_fisa_flush_by_intf_ctx_id(dp_intf, rx_ctx_id);
+		dp_intf->fisa_force_flushed[rx_ctx_id] = 1;
 	}
 
 	return true;
@@ -2207,20 +2223,6 @@ QDF_STATUS dp_rx_fisa_flush_by_vdev_id(struct dp_soc *soc, uint8_t vdev_id)
 	return QDF_STATUS_SUCCESS;
 }
 
-void dp_set_fisa_disallowed_for_vdev(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
-				     uint8_t rx_ctx_id, uint8_t val)
-{
-	struct dp_soc *soc = (struct dp_soc *)cdp_soc;
-	struct dp_vdev *vdev;
-
-	vdev = dp_vdev_get_ref_by_id(soc, vdev_id, DP_MOD_ID_RX);
-	if (qdf_unlikely(!vdev))
-		return;
-
-	vdev->fisa_disallowed[rx_ctx_id] = val;
-	dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_RX);
-}
-
 void dp_suspend_fse_cache_flush(struct wlan_dp_psoc_context *dp_ctx)
 {
 	struct dp_rx_fst *dp_fst;

+ 0 - 12
components/dp/core/src/wlan_dp_fisa_rx.h

@@ -127,18 +127,6 @@ QDF_STATUS dp_rx_fisa_flush_by_ctx_id(struct dp_soc *soc, int napi_id);
  */
 QDF_STATUS dp_rx_fisa_flush_by_vdev_id(struct dp_soc *soc, uint8_t vdev_id);
 
-/**
- * dp_set_fisa_disallowed_for_vdev() - Set fisa disallowed flag for vdev
- * @cdp_soc: core txrx main context
- * @vdev_id: Vdev id
- * @rx_ctx_id: rx context id
- * @val: value to be set
- *
- * Return: None
- */
-void dp_set_fisa_disallowed_for_vdev(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
-				     uint8_t rx_ctx_id, uint8_t val);
-
 /**
  * dp_fisa_rx_fst_update_work() - Work functions for FST updates
  * @arg: argument passed to the work function

+ 11 - 19
components/dp/core/src/wlan_dp_txrx.c

@@ -1401,9 +1401,9 @@ QDF_STATUS wlan_dp_rx_deliver_to_stack(struct wlan_dp_intf *dp_intf,
 
 #if defined(WLAN_SUPPORT_RX_FISA)
 /**
- * wlan_dp_set_fisa_disallowed_for_vdev() - Set fisa disallowed bit for a vdev
+ * wlan_dp_set_fisa_disallowed_for_intf() - Set fisa disallowed bit for an intf
  * @soc: DP soc handle
- * @vdev_id: Vdev id
+ * @dp_intf: DP interface handle
  * @rx_ctx_id: rx context id
  * @val: Enable or disable
  *
@@ -1412,16 +1412,16 @@ QDF_STATUS wlan_dp_rx_deliver_to_stack(struct wlan_dp_intf *dp_intf,
  * Return: None
  */
 static inline
-void wlan_dp_set_fisa_disallowed_for_vdev(ol_txrx_soc_handle soc,
-					  uint8_t vdev_id,
+void wlan_dp_set_fisa_disallowed_for_intf(ol_txrx_soc_handle soc,
+					  struct wlan_dp_intf *dp_intf,
 					  uint8_t rx_ctx_id, uint8_t val)
 {
-	dp_set_fisa_disallowed_for_vdev(soc, vdev_id, rx_ctx_id, val);
+	dp_intf->fisa_disallowed[rx_ctx_id] = val;
 }
 #else
 static inline
-void wlan_dp_set_fisa_disallowed_for_vdev(ol_txrx_soc_handle soc,
-					  uint8_t vdev_id,
+void wlan_dp_set_fisa_disallowed_for_intf(ol_txrx_soc_handle soc,
+					  struct wlan_dp_intf *dp_intf,
 					  uint8_t rx_ctx_id, uint8_t val)
 {
 }
@@ -1448,22 +1448,14 @@ QDF_STATUS wlan_dp_rx_deliver_to_stack(struct wlan_dp_intf *dp_intf,
 	if (gro_disallowed == 0 &&
 	    dp_intf->gro_flushed[rx_ctx_id] != 0) {
 		if (qdf_likely(soc))
-			/* TODO - Temp WAR to use def_link, till FISA is moved
-			 * to dp_intf
-			 */
-			wlan_dp_set_fisa_disallowed_for_vdev(
-					soc, dp_intf->def_link->link_id,
-					rx_ctx_id, 0);
+			wlan_dp_set_fisa_disallowed_for_intf(soc, dp_intf,
+							     rx_ctx_id, 0);
 		dp_intf->gro_flushed[rx_ctx_id] = 0;
 	} else if (gro_disallowed &&
 		   dp_intf->gro_flushed[rx_ctx_id] == 0) {
 		if (qdf_likely(soc))
-			/* TODO - Temp WAR to use def_link, till FISA is moved
-			 * to dp_intf
-			 */
-			wlan_dp_set_fisa_disallowed_for_vdev(
-					soc, dp_intf->def_link->link_id,
-					rx_ctx_id, 1);
+			wlan_dp_set_fisa_disallowed_for_intf(soc, dp_intf,
+							     rx_ctx_id, 1);
 	}
 
 	if (nbuf_receive_offload_ok && dp_ctx->receive_offload_cb &&