mempool: fix invalid panic on dump or audit
Checks
Commit Message
When doing a mempool dump or an audit, the application can panic because
the length of the cache is greater than the flush threshold, which is
seen as a fatal error. But this can temporarily happen when the mempool
is in use.
Fix the panic condition to abort only when the cache length is greater
than the array.
Fixes: ea5dd2744b90 ("mempool: cache optimisations")
Cc: stable@dpdk.org
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
---
lib/librte_mempool/rte_mempool.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Comments
On 2/3/21 12:01 PM, Olivier Matz wrote:
> When doing a mempool dump or an audit, the application can panic because
> the length of the cache is greater than the flush threshold, which is
> seen as a fatal error. But this can temporarily happen when the mempool
> is in use.
>
> Fix the panic condition to abort only when the cache length is greater
> than the array.
>
> Fixes: ea5dd2744b90 ("mempool: cache optimisations")
> Cc: stable@dpdk.org
>
> Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
04/02/2021 14:33, Andrew Rybchenko:
> On 2/3/21 12:01 PM, Olivier Matz wrote:
> > When doing a mempool dump or an audit, the application can panic because
> > the length of the cache is greater than the flush threshold, which is
> > seen as a fatal error. But this can temporarily happen when the mempool
> > is in use.
> >
> > Fix the panic condition to abort only when the cache length is greater
> > than the array.
> >
> > Fixes: ea5dd2744b90 ("mempool: cache optimisations")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
>
> Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Applied, thanks
@@ -1167,7 +1167,7 @@ mempool_audit_cache(const struct rte_mempool *mp)
for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
const struct rte_mempool_cache *cache;
cache = &mp->local_cache[lcore_id];
- if (cache->len > cache->flushthresh) {
+ if (cache->len > RTE_DIM(cache->objs)) {
RTE_LOG(CRIT, MEMPOOL, "badness on cache[%u]\n",
lcore_id);
rte_panic("MEMPOOL: invalid cache len\n");