qcacmn: Flush monitor status buffer queue

Flush monitor status buffer queue in case of
flush or truncated PPDU

Change-Id: I79daa9054caf0ffc3658c8c41b759d9ce8cdf108
CRs-Fixed: 3160035
Este commit está contenido en:
Amir Patel
2022-04-06 20:30:20 +05:30
cometido por Madan Koyyalamudi
padre 0afac9d12e
commit 5f9d3d8f53

Ver fichero

@@ -52,6 +52,66 @@ void dp_rx_mon_add_ppdu_info_to_wq(struct dp_mon_pdev_be *mon_pdev_be,
}
}
/**
* dp_rx_mon_flush_status_buf_queue () - Flush status buffer queue
*
* @pdev: DP pdev handle
*
*Return: void
*/
static inline void
dp_rx_mon_flush_status_buf_queue(struct dp_pdev *pdev)
{
struct dp_soc *soc = pdev->soc;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
struct dp_mon_pdev_be *mon_pdev_be =
dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev);
union dp_mon_desc_list_elem_t *desc_list = NULL;
union dp_mon_desc_list_elem_t *tail = NULL;
struct dp_mon_desc *mon_desc;
uint8_t idx;
void *buf;
struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
struct dp_mon_desc_pool *rx_mon_desc_pool = &mon_soc_be->rx_desc_mon;
uint8_t work_done = 0;
uint16_t status_buf_count;
if (!mon_pdev_be->desc_count) {
dp_mon_info("no of status buffer count is zero: %pK", pdev);
return;
}
status_buf_count = mon_pdev_be->desc_count;
for (idx = 0; idx < status_buf_count; idx++) {
mon_desc = mon_pdev_be->status[idx];
if (!mon_desc) {
qdf_assert_always(0);
return;
}
buf = mon_desc->buf_addr;
dp_mon_add_to_free_desc_list(&desc_list, &tail, mon_desc);
work_done++;
/* set status buffer pointer to NULL */
mon_pdev_be->status[idx] = NULL;
mon_pdev_be->desc_count--;
qdf_frag_free(buf);
}
if (work_done) {
mon_pdev->rx_mon_stats.mon_rx_bufs_replenished_dest +=
work_done;
dp_mon_buffers_replenish(soc, &soc->rxdma_mon_buf_ring[0],
rx_mon_desc_pool,
work_done,
&desc_list, &tail);
}
}
/**
* dp_rx_mon_handle_flush_n_trucated_ppdu () - Handle flush and truncated ppdu
*
@@ -72,6 +132,8 @@ dp_rx_mon_handle_flush_n_trucated_ppdu(struct dp_soc *soc,
struct dp_mon_desc_pool *rx_mon_desc_pool = &mon_soc_be->rx_desc_mon;
uint16_t work_done;
/* Flush status buffers in queue */
dp_rx_mon_flush_status_buf_queue(pdev);
qdf_frag_free(mon_desc->buf_addr);
dp_mon_add_to_free_desc_list(&desc_list, &tail, mon_desc);
work_done = 1;