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:

committed by
Rahul Choudhary

parent
a77096792e
commit
2461d6dc54
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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 &&
|
||||
|
Reference in New Issue
Block a user