On 02/01/2018 12:09 PM, santosh wrote:
On Thursday 01 February 2018 12:24 PM, Andrew Rybchenko wrote:
On 02/01/2018 08:05 AM, santosh wrote:
On Wednesday 31 January 2018 10:15 PM, Olivier Matz wrote:
On Tue, Jan 23, 2018 at 01:15:56PM +0000, Andrew Rybchenko wrote:
There is not specified dependency between rte_mempool_populate_default()
and rte_mempool_populate_iova(). So, the second should not rely on the
fact that the first adds capability flags to the mempool flags.
Fixes: 65cf769f5e6a ("mempool: detect physical contiguous objects")
Cc: sta...@dpdk.org
Signed-off-by: Andrew Rybchenko <arybche...@solarflare.com>
Looks good to me. I agree it's strange that the mp->flags are
updated with capabilities only in rte_mempool_populate_default().
I see that this behavior is removed later in the patchset since the
get_capa() is removed!
However maybe this single patch could go in 18.02.
+Santosh +Jerin since it's mostly about Octeon.
rte_mempool_xmem_size should return correct size if
MEMPOOL_F_CAPA_BLK_ALIGNED_OBJECTS flag
is set in 'mp->flags'. Thats why _ops_get_capabilities() called in
_populate_default() but not
at _populate_iova().
I think, this 'alone' patch may break octeontx mempool.
The patch does not touch rte_mempool_populate_default().
_ops_get_capabilities() is still called there before
rte_mempool_xmem_size(). The theoretical problem which
the patch tries to fix is the case when
rte_mempool_populate_default() is not called at all. I.e. application
calls _ops_get_capabilities() to get flags, then, together with
mp->flags, calls rte_mempool_xmem_size() directly, allocates
calculated amount of memory and calls _populate_iova().
In that case, Application does like below:
/* Get mempool capabilities */
mp_flags = 0;
ret = rte_mempool_ops_get_capabilities(mp, &mp_flags);
if ((ret < 0) && (ret != -ENOTSUP))
return ret;
/* update mempool capabilities */
mp->flags |= mp_flags;
Above line is not mandatory. "mp->flags | mp_flags" could be simply
passed to rte_mempool_xmem_size() below.
/* calc xmem sz */
size = rte_mempool_xmem_size(n, total_elt_sz, pg_shift,
mp->flags);
/* rsrv memory */
mz = rte_memzone_reserve_aligned(mz_name, size,...);
/* now populate iova */
ret = rte_mempool_populate_iova(mp,,..);
won't it work?
However I understand that clubbing `_get_ops_capa() + flag-updation` into
_populate_iova()
perhaps better from user PoV.
Since later patches of the series reconsider memory size
calculation etc, it is up to you if it makes sense to apply it
in 18.02 as a fix.