Local cache for an indexed pool is not initialized in the situation when
all the indices are allocated on one CPU core and freed on another one.
That leads to a crash once we try to check its reference counter.
Check that the local cache is initialized before accessing this counter.

Fixes: d15c0946be ("net/mlx5: add indexed pool local cache")
Cc: sta...@dpdk.org

Signed-off-by: Alexander Kozyrev <akozy...@nvidia.com>
---
 drivers/net/mlx5/mlx5_utils.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/mlx5/mlx5_utils.c b/drivers/net/mlx5/mlx5_utils.c
index 4115a2ad77..b295702fd4 100644
--- a/drivers/net/mlx5/mlx5_utils.c
+++ b/drivers/net/mlx5/mlx5_utils.c
@@ -479,7 +479,7 @@ _mlx5_ipool_free_cache(struct mlx5_indexed_pool *pool, int 
cidx, uint32_t idx)
        mlx5_ipool_lock(pool);
        gc = pool->gc;
        if (ilc->lc != gc) {
-               if (!(--ilc->lc->ref_cnt))
+               if (ilc->lc && !(--ilc->lc->ref_cnt))
                        olc = ilc->lc;
                gc->ref_cnt++;
                ilc->lc = gc;
-- 
2.18.2

Reply via email to