diff --git a/lib/env_dpdk/env.c b/lib/env_dpdk/env.c index 1088cb707..5dc12a8ba 100644 --- a/lib/env_dpdk/env.c +++ b/lib/env_dpdk/env.c @@ -45,11 +45,21 @@ static uint64_t virt_to_phys(void *vaddr) { + uint64_t ret; + #if RTE_VERSION >= RTE_VERSION_NUM(17, 11, 0, 3) - return rte_malloc_virt2iova(vaddr); + ret = rte_malloc_virt2iova(vaddr); + if (ret != RTE_BAD_IOVA) { + return ret; + } #else - return rte_malloc_virt2phy(vaddr); + ret = rte_malloc_virt2phy(vaddr); + if (ret != RTE_BAD_PHYS_ADDR) { + return ret; + } #endif + + return spdk_vtophys(vaddr); } void * diff --git a/lib/env_dpdk/vtophys.c b/lib/env_dpdk/vtophys.c index 49cbe215e..aa9da36fa 100644 --- a/lib/env_dpdk/vtophys.c +++ b/lib/env_dpdk/vtophys.c @@ -208,6 +208,13 @@ vtophys_get_paddr_memseg(uint64_t vaddr) if (vaddr >= (uintptr_t)seg->addr && vaddr < ((uintptr_t)seg->addr + seg->len)) { paddr = seg->phys_addr; +#if RTE_VERSION >= RTE_VERSION_NUM(17, 11, 0, 3) + if (paddr == RTE_BAD_IOVA) { +#else + if (paddr == RTE_BAD_PHYS_ADDR) { +#endif + return SPDK_VTOPHYS_ERROR; + } paddr += (vaddr - (uintptr_t)seg->addr); return paddr; }