diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 61165de552..bc8bf662cf 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -2972,6 +2972,7 @@ static QDF_STATUS dp_soc_interrupt_attach(struct cdp_soc_t *txrx_soc) int i = 0; int num_irq = 0; int rx_err_ring_intr_ctxt_id = HIF_MAX_GROUP; + int lmac_id = 0; qdf_mem_set(&soc->mon_intr_id_lmac_map, sizeof(soc->mon_intr_id_lmac_map), DP_MON_INVALID_LMAC_ID); @@ -3062,6 +3063,11 @@ static QDF_STATUS dp_soc_interrupt_attach(struct cdp_soc_t *txrx_soc) if (rx_err_ring_mask) rx_err_ring_intr_ctxt_id = i; + + if (dp_is_mon_mask_valid(soc, &soc->intr_ctx[i])) { + soc->mon_intr_id_lmac_map[lmac_id] = i; + lmac_id++; + } } hif_configure_ext_group_interrupts(soc->hif_handle); diff --git a/dp/wifi3.0/monitor/dp_mon.c b/dp/wifi3.0/monitor/dp_mon.c index ea55c99886..7698afac39 100644 --- a/dp/wifi3.0/monitor/dp_mon.c +++ b/dp/wifi3.0/monitor/dp_mon.c @@ -941,7 +941,7 @@ static void dp_flush_monitor_rings(struct dp_soc *soc) hal_soc_handle_t hal_soc = soc->hal_soc; uint32_t lmac_id; uint32_t hp, tp; - uint8_t dp_intr_id; + int dp_intr_id; int budget; void *mon_dst_srng; struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev; @@ -961,6 +961,9 @@ static void dp_flush_monitor_rings(struct dp_soc *soc) return; dp_intr_id = soc->mon_intr_id_lmac_map[lmac_id]; + if (qdf_unlikely(dp_intr_id == DP_MON_INVALID_LMAC_ID)) + return; + mon_dst_srng = dp_rxdma_get_mon_dst_ring(pdev, lmac_id); /* reap full ring */