From 7bc528bac95a00e2462ae76b1f9e8610d4d67477 Mon Sep 17 00:00:00 2001 From: Suanming Mou Date: Wed, 23 Feb 2022 08:26:11 +0200 Subject: [PATCH] net/mlx5: fix indexed pool fetch overlap For indexed pool with local cache, when a new trunk is allocated, half of the trunk's index was fetched to the local cache. In case of local cache size was less then half of the trunk size, memory overlap happened. This commit adds the check of the fetch size, if local cache size is less than fetch size, adjust the fetch size to be local cache size. Fixes: d15c0946beea ("net/mlx5: add indexed pool local cache") Cc: stable@dpdk.org Signed-off-by: Suanming Mou Acked-by: Viacheslav Ovsiienko --- drivers/net/mlx5/mlx5_utils.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/mlx5/mlx5_utils.c b/drivers/net/mlx5/mlx5_utils.c index be33af96fe..4115a2ad77 100644 --- a/drivers/net/mlx5/mlx5_utils.c +++ b/drivers/net/mlx5/mlx5_utils.c @@ -340,6 +340,8 @@ check_again: /* Enqueue half of the index to global. */ ts_idx = mlx5_trunk_idx_offset_get(pool, trunk_idx) + 1; fetch_size = trunk->free >> 1; + if (fetch_size > pool->cfg.per_core_cache) + fetch_size = trunk->free - pool->cfg.per_core_cache; for (i = 0; i < fetch_size; i++) lc->idx[i] = ts_idx + i; lc->len = fetch_size; -- 2.20.1