qcacmn: Replenish more RX buffers when refill ring runs low

When nbuf allocation failure happens, there is no retry scheme.
So RX buffers in refill ring may shrink and not got enlarged.
This change is aimed to replenish more RX buffers when watermark
is less than critical low threshold.

Change-Id: I201b9e252ba08ba1bff47e0b5ec819a45f1b1ddf
CRs-Fixed: 3245915
This commit is contained in:
Yu Tian
2022-04-25 18:54:32 +08:00
committed by Madan Koyyalamudi
szülő f7a1c7e0c7
commit ed3ba3ca44
3 fájl változott, egészen pontosan 29 új sor hozzáadva és 0 régi sor törölve

Fájl megtekintése

@@ -600,6 +600,9 @@ QDF_STATUS __dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
union dp_rx_desc_list_elem_t *next;
QDF_STATUS ret;
void *rxdma_srng;
union dp_rx_desc_list_elem_t *desc_list_append = NULL;
union dp_rx_desc_list_elem_t *tail_append = NULL;
union dp_rx_desc_list_elem_t *temp_list = NULL;
rxdma_srng = dp_rxdma_srng->hal_srng;
@@ -633,6 +636,28 @@ QDF_STATUS __dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
} else if (num_entries_avail < num_req_buffers) {
num_desc_to_free = num_req_buffers - num_entries_avail;
num_req_buffers = num_entries_avail;
} else if ((*desc_list) &&
dp_rxdma_srng->num_entries - num_entries_avail <
CRITICAL_BUFFER_THRESHOLD) {
/* Append some free descriptors to tail */
num_alloc_desc =
dp_rx_get_free_desc_list(dp_soc, mac_id,
rx_desc_pool,
CRITICAL_BUFFER_THRESHOLD,
&desc_list_append,
&tail_append);
if (num_alloc_desc) {
temp_list = *desc_list;
*desc_list = desc_list_append;
tail_append->next = temp_list;
num_req_buffers += num_alloc_desc;
DP_STATS_DEC(dp_pdev,
replenish.free_list,
num_alloc_desc);
} else
dp_err_rl("%pK: no free rx_descs in freelist", dp_soc);
}
if (qdf_unlikely(!num_req_buffers)) {
@@ -736,6 +761,7 @@ QDF_STATUS __dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
* Therefore set replenish.pkts.bytes as 0.
*/
DP_STATS_INC_PKT(dp_pdev, replenish.pkts, count, 0);
DP_STATS_INC(dp_pdev, replenish.free_list, num_req_buffers - count);
free_descs:
DP_STATS_INC(dp_pdev, buf_freelist, num_desc_to_free);