mempool/dpaa2: report error on endless loop in mbuf release

When BMAN is not able to accept more buffers, it could be that
there are no FBPR's (internal mem provided to bman) left.
Report error in such condition.

Fixes: 5dc43d22b5ad ("mempool/dpaa2: add hardware offloaded mempool")
Cc: stable@dpdk.org

Signed-off-by: Radu Bulie <radu-andrei.bulie@nxp.com>
Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
This commit is contained in:
Radu Bulie 2019-11-05 19:53:19 +05:30 committed by Thomas Monjalon
parent 0da362b8f9
commit f0617163b8

View File

@ -192,7 +192,7 @@ rte_dpaa2_mbuf_release(struct rte_mempool *pool __rte_unused,
struct qbman_release_desc releasedesc;
struct qbman_swp *swp;
int ret;
int i, n;
int i, n, retry_count;
uint64_t bufs[DPAA2_MBUF_MAX_ACQ_REL];
if (unlikely(!DPAA2_PER_LCORE_DPIO)) {
@ -225,9 +225,15 @@ rte_dpaa2_mbuf_release(struct rte_mempool *pool __rte_unused,
}
/* feed them to bman */
do {
ret = qbman_swp_release(swp, &releasedesc, bufs, n);
} while (ret == -EBUSY);
retry_count = 0;
while ((ret = qbman_swp_release(swp, &releasedesc, bufs, n)) ==
-EBUSY) {
retry_count++;
if (retry_count > DPAA2_MAX_TX_RETRY_COUNT) {
DPAA2_MEMPOOL_ERR("bman release retry exceeded, low fbpr?");
return;
}
}
aligned:
/* if there are more buffers to free */
@ -243,10 +249,15 @@ aligned:
#endif
}
do {
ret = qbman_swp_release(swp, &releasedesc, bufs,
DPAA2_MBUF_MAX_ACQ_REL);
} while (ret == -EBUSY);
retry_count = 0;
while ((ret = qbman_swp_release(swp, &releasedesc, bufs,
DPAA2_MBUF_MAX_ACQ_REL)) == -EBUSY) {
retry_count++;
if (retry_count > DPAA2_MAX_TX_RETRY_COUNT) {
DPAA2_MEMPOOL_ERR("bman release retry exceeded, low fbpr?");
return;
}
}
n += DPAA2_MBUF_MAX_ACQ_REL;
}
}