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
This commit is contained in:
Rakesh Pillai
2023-07-24 09:01:17 -07:00
committed by Rahul Choudhary
parent a77096792e
commit 2461d6dc54
4 changed files with 56 additions and 60 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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 &&