qcacld-3.0: Add support to control fisa per vdev at runtime

Add support to enable or disable fisa aggregation per
vdev at runtime.

Change-Id: I4f19e09631de921b3e006fbe026ea728e95e3f83
CRs-Fixed: 2739427
This commit is contained in:
Yeshwanth Sriram Guntuka 2020-07-23 19:48:47 +05:30 committed by snandini
parent 44f7f0d09f
commit 84e341f395
2 changed files with 87 additions and 0 deletions

View File

@ -1122,6 +1122,65 @@ static bool dp_is_nbuf_bypass_fisa(qdf_nbuf_t nbuf)
return false;
}
/**
* 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
* @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,
uint8_t rx_ctx_id)
{
struct dp_rx_fst *fisa_hdl = soc->rx_fst;
struct dp_fisa_rx_sw_ft *sw_ft_entry =
(struct dp_fisa_rx_sw_ft *)fisa_hdl->base;
int ft_size = fisa_hdl->max_entries;
int i;
for (i = 0; i < ft_size; i++) {
if (sw_ft_entry[i].is_populated &&
vdev == sw_ft_entry[i].vdev &&
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_rx_fisa_flush_flow_wrap(&sw_ft_entry[i]);
}
}
return QDF_STATUS_SUCCESS;
}
/**
* dp_fisa_disallowed_for_vdev() - Check if fisa is allowed on vdev
* @soc: core txrx main context
* @vdev: Handle DP vdev
* @rx_ctx_id: Rx context id
*
* Return: true if fisa is disallowed for vdev else false
*/
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;
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;
}
return true;
}
/**
* dp_fisa_rx() - Entry function to FISA to handle aggregation
* @soc: core txrx main context
@ -1150,6 +1209,9 @@ QDF_STATUS dp_fisa_rx(struct dp_soc *soc, struct dp_vdev *vdev,
if (dp_is_nbuf_bypass_fisa(head_nbuf))
goto deliver_nbuf;
if (dp_fisa_disallowed_for_vdev(soc, vdev, rx_ctx_id))
goto deliver_nbuf;
if (qdf_atomic_read(&soc->skip_fisa_param.skip_fisa)) {
if (!soc->skip_fisa_param.fisa_force_flush[rx_ctx_id]) {
dp_rx_fisa_flush_by_ctx_id(soc, rx_ctx_id);
@ -1305,3 +1367,16 @@ 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_get_vdev_from_soc_vdev_id_wifi3(soc, vdev_id);
if (qdf_unlikely(!vdev))
return;
vdev->fisa_disallowed[rx_ctx_id] = val;
}

View File

@ -90,6 +90,18 @@ void dp_rx_skip_fisa(struct cdp_soc_t *cdp_soc, uint32_t value)
qdf_atomic_set(&soc->skip_fisa_param.skip_fisa, !value);
}
/**
* 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);
#else
static QDF_STATUS dp_rx_dump_fisa_stats(struct dp_soc *soc)
{