qcacmn: Fixes for monitor ring stall issues
STATUS_DONE is missing sometimes in monitor status ring,
causing stalled processing in host and backpressure to RXDMA.
Adding a WAR to skip such entries.
Also increased the size of monitor link descriptor ring since
multiple descriptors are used for large MPDUs.
Change-Id: I556b4196482ed738471afc1f7e7b73cf3f8fbc51
diff --git a/dp/wifi3.0/dp_rx_mon_status.c b/dp/wifi3.0/dp_rx_mon_status.c
index 4b75740..3a941bc 100644
--- a/dp/wifi3.0/dp_rx_mon_status.c
+++ b/dp/wifi3.0/dp_rx_mon_status.c
@@ -452,11 +452,16 @@
status = hal_get_rx_status_done(status_buf);
if (status != QDF_STATUS_SUCCESS) {
+ uint32_t hp, tp;
+ hal_api_get_tphp(hal_soc, mon_status_srng,
+ &tp, &hp);
QDF_TRACE(QDF_MODULE_ID_DP,
- QDF_TRACE_LEVEL_WARN,
- "[%s][%d] status not done",
- __func__, __LINE__);
- break;
+ QDF_TRACE_LEVEL_ERROR,
+ "[%s][%d] status not done - hp:%u, tp:%u",
+ __func__, __LINE__, hp, tp);
+ /* WAR for missing status: Skip status entry */
+ hal_srng_src_get_next(hal_soc, mon_status_srng);
+ continue;
}
qdf_nbuf_set_pktlen(status_nbuf, RX_BUFFER_SIZE);
@@ -501,8 +506,7 @@
hal_rxdma_buff_addr_info_set(rxdma_mon_status_ring_entry,
paddr, rx_desc->cookie, HAL_RX_BUF_RBM_SW3_BM);
- rxdma_mon_status_ring_entry =
- hal_srng_src_get_next(hal_soc, mon_status_srng);
+ hal_srng_src_get_next(hal_soc, mon_status_srng);
work_done++;
}
done: