Browse Source

qcacmn: Add force break quota for REO error ring process

In some conditions REO error ring may have RX flood, but
there is no force break scheme for that ring process. This
leads to starvation of RX refill buffer ring and then FW
crashes due to no refill buffer. Change is aimed to force
break of ring processing and refill buffers in small batch
count.

Change-Id: I3c543ebb16bd1709e782be759c9063a356a96562
CRs-Fixed: 3262685
Yu Tian 2 years ago
parent
commit
226e9258ba
1 changed files with 10 additions and 0 deletions
  1. 10 0
      dp/wifi3.0/dp_rx_err.c

+ 10 - 0
dp/wifi3.0/dp_rx_err.c

@@ -2304,6 +2304,8 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
 	bool ret;
 	uint32_t error_code = 0;
 	bool sw_pn_check_needed;
+	int max_reap_limit = dp_rx_get_loop_pkt_limit(soc);
+	int i, rx_bufs_reaped_total;
 
 	/* Debug -- Remove later */
 	qdf_assert(soc && hal_ring_hdl);
@@ -2553,6 +2555,14 @@ process_reo_error_code:
 next_entry:
 		dp_rx_link_cookie_invalidate(ring_desc);
 		hal_srng_dst_get_next(hal_soc, hal_ring_hdl);
+
+		rx_bufs_reaped_total = 0;
+		for (i = 0; i < MAX_PDEV_CNT; i++)
+			rx_bufs_reaped_total += rx_bufs_reaped[i];
+
+		if (dp_rx_reap_loop_pkt_limit_hit(soc, rx_bufs_reaped_total,
+						  max_reap_limit))
+			break;
 	}
 
 done: