mempool: fix populate with small virtual chunks
authorOlivier Matz <olivier.matz@6wind.com>
Fri, 17 Jan 2020 14:57:52 +0000 (15:57 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 20 Jan 2020 15:34:54 +0000 (16:34 +0100)
commit43503c59adee6cae7069da23e105c24e044bf72c
tree67c97bb0c6066b8cef866eee83a63a6dfb20d2ac
parent3a3d0c75b43e8d1670c5ea6bf85cb3e1e60dfa2b
mempool: fix populate with small virtual chunks

To populate a mempool with a virtual area, the mempool code calls
rte_mempool_populate_iova() for each iova-contiguous area. It happens
(rarely) that this area is too small to store one object. In this case,
rte_mempool_populate_iova() returns an error, which is forwarded by
rte_mempool_populate_virt().

This case should not throw an error in rte_mempool_populate_virt().
Instead, the area that is too small should just be ignored.

To fix this issue, change the return value of
rte_mempool_populate_iova() to 0 when no object can be populated,
so it can be ignored by the caller. As this would be an API/ABI change,
only do this modification internally for now.

Fixes: 354788b60cfd ("mempool: allow populating with unaligned virtual area")
Cc: stable@dpdk.org
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Tested-by: Anatoly Burakov <anatoly.burakov@intel.com>
Tested-by: Alvin Zhang <alvinx.zhang@intel.com>
lib/librte_mempool/rte_mempool.c