qcacmn: Use static memory for ppdu_info in Rx monitor

a. to avoid dynamic memory allocation of ppdu_info per-pkt path
which is leading fragmentation, use statically  allocated
ppdu_info.
b. Disable rxmon workqueue processing as statically allocated
ppdu_info is being used.

Change-Id: Idbcd49863954582349900a414bb1aa80f68aab72
CRs-Fixed: 3239974
Цей коміт міститься в:
Harsh Kumar Bijlani
2022-07-10 23:15:52 +05:30
зафіксовано Madan Koyyalamudi
джерело 967441ed46
коміт 82708b0aab

Переглянути файл

@@ -319,6 +319,9 @@ dp_rx_mon_process_ppdu_info(struct dp_pdev *pdev,
struct dp_mon_pdev *mon_pdev = (struct dp_mon_pdev *)pdev->monitor_pdev;
uint8_t user;
if (!ppdu_info)
return;
for (user = 0; user < ppdu_info->com_info.num_users; user++) {
uint16_t mpdu_count = ppdu_info->mpdu_count[user];
uint16_t mpdu_idx;
@@ -436,7 +439,7 @@ void dp_rx_mon_process_ppdu(void *context)
* Return: SUCCESS or FAILIRE
*/
static QDF_STATUS
QDF_STATUS
dp_rx_mon_add_ppdu_info_to_wq(struct dp_mon_pdev *mon_pdev,
struct hal_rx_ppdu_info *ppdu_info)
{
@@ -952,7 +955,7 @@ uint8_t dp_rx_mon_process_tlv_status(struct dp_pdev *pdev,
nbuf = ppdu_info->mpdu_q[user_id][mpdu_idx];
if (qdf_unlikely(!nbuf)) {
dp_mon_err("nbuf is NULL");
qdf_assert_always(0);
return num_buf_reaped;
}
tmp_nbuf = qdf_get_nbuf_valid_frag(nbuf);
@@ -1012,6 +1015,7 @@ uint8_t dp_rx_mon_process_tlv_status(struct dp_pdev *pdev,
if (qdf_unlikely(!nbuf)) {
/* WAR: RX_HDR is not received for this MPDU, drop this frame */
mon_pdev->rx_mon_stats.rx_hdr_not_received++;
DP_STATS_INC(mon_soc, frag_free, 1);
qdf_frag_free(addr);
return num_buf_reaped;
@@ -1220,7 +1224,7 @@ dp_rx_mon_process_status_tlv(struct dp_pdev *pdev)
return NULL;
}
ppdu_info = qdf_mem_malloc(sizeof(*ppdu_info));
ppdu_info = &mon_pdev->ppdu_info;
if (!ppdu_info) {
dp_mon_err("ppdu_info malloc failed pdev: %pK", pdev);
@@ -1470,13 +1474,7 @@ dp_rx_mon_srng_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
else if (dp_cfr_rcc_mode_status(pdev) && ppdu_info)
dp_rx_handle_cfr(soc, pdev, ppdu_info);
/* Call API to add PPDU info workqueue */
status = dp_rx_mon_add_ppdu_info_to_wq(mon_pdev, ppdu_info);
if (status != QDF_STATUS_SUCCESS) {
if (ppdu_info)
qdf_mem_free(ppdu_info);
}
dp_rx_mon_process_ppdu_info(pdev, ppdu_info);
work_done++;