net/mlx5: fix minimum number of Multi-Packet RQ buffers
authorYongseok Koh <yskoh@mellanox.com>
Thu, 2 Aug 2018 21:00:07 +0000 (14:00 -0700)
committerShahaf Shuler <shahafs@mellanox.com>
Sun, 5 Aug 2018 11:29:34 +0000 (13:29 +0200)
commitb85b719ab7c05dc821ff05bca9cd2b7ff7b0b7ed
tree2734f9ad493b98fe9a99c9daccd1014917a5f488
parente845e9ceb414b310aafaf3500b034478838e515a
net/mlx5: fix minimum number of Multi-Packet RQ buffers

If MPRQ is enabled, a PMD-private mempool is allocated. For ConnectX-4 Lx,
the minimum number of strides is 512 which ConnectX-5 supports 8. This
results in quite small number of elements for the MPRQ mempool. For
example, if the size of Rx ring is configured as 512, only one MPRQ buffer
can cover the whole ring. If there's only one Rx queue is configured. In
the following code in mlx5_mprq_alloc_mp(), desc is 1 and obj_num will be
36 as a result.

desc *= 4;
obj_num = desc + MLX5_MPRQ_MP_CACHE_SZ * priv->rxqs_n;

However, rte_mempool_create_empty() has a sanity check to refuse large
per-lcore cache size compared to the number of elements. Cache flush
threshold should not exceed the number of elements of a mempool. For the
above example, the threshold is 32 * 1.5 = 48 which is larger than 36 and
it fails to create the mempool.

Fixes: 7d6bf6b866b8 ("net/mlx5: add Multi-Packet Rx support")
Cc: stable@dpdk.org
Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
drivers/net/mlx5/mlx5_defs.h
drivers/net/mlx5/mlx5_rxq.c