On Thu, Nov 14, 2019 at 2:58 PM Anatoly Burakov <[email protected]> wrote: > > Currently, when mempool is being populated, we get IOVA address > of every segment using rte_mem_virt2iova(). This works for internal > memory, but does not really work for external memory, and does not > work on platforms which return RTE_BAD_IOVA as a result of this > call (such as FreeBSD). Moreover, even when it works, the function > in question will do unnecessary pagewalks in IOVA as PA mode, as > it falls back to rte_mem_virt2phy() instead of just doing a lookup in > internal memseg table. > > To fix it, replace the call to first attempt to look through the > internal memseg table (this takes care of internal and external memory), > and fall back to rte_mem_virt2iova() when unable to perform VA->IOVA > translation via memseg table. > > Fixes: 66cc45e293ed ("mem: replace memseg with memseg lists") > Cc: [email protected] > > Signed-off-by: Anatoly Burakov <[email protected]>
Acked-by: Olivier Matz <[email protected]> Tested-by: Bo Chen <[email protected]> Series applied, thanks. -- David Marchand

