> > Windows EAL did not detect IOVA mode and worked incorrectly > > if physical addresses could not be obtained > > (if virt2phys driver was missing or inaccessible). > > In this case, rte_mem_virt2iova() reported RTE_BAD_IOVA for any address. > > Inability to obtain IOVA, be it PA or VA, should cause a failure > > for the DPDK allocator, but it was hidden by the implementation, > > so allocations did not fail when they should. > > The mode when DPDK cannot obtain PA but can work is IOVA-as-VA mode. > > However, rte_eal_iova_mode() always returned RTE_IOVA_DC > > (while it should only ever return RTE_IOVA_PA or RTE_IOVA_VA), > > because IOVA mode detection was not implemented. > > > > Implement IOVA mode detection: > > 1. Always allow to force --iova-mode=va. > > 2. Allow to force --iova-mode=pa only if virt2phys is available. > > 3. If no mode is forced and virt2phys is available, > > select the mode according to bus requests, default to PA. > > 4. If no mode is forced but virt2phys is unavailable, default to VA. > > Fix rte_mem_virt2iova() by returning VA when using IOVA-as-VA. > > Fix rte_eal_iova_mode() by returning the selected mode. > > > > Fixes: 2a5d547a4a9b ("eal/windows: implement basic memory management") > > Cc: sta...@dpdk.org > > > > Reported-by: Tal Shnaiderman <tal...@nvidia.com> > > Signed-off-by: Dmitry Kozlyuk <dkozl...@nvidia.com> > > Tested-by: Pallavi Kadam <pallavi.ka...@intel.com> > Acked-by: Pallavi Kadam <pallavi.ka...@intel.com>
Applied, thanks.