mem: fix mempool for --no-huge
[dpdk.git] / lib / librte_mempool / rte_mempool.h
index ae13f8b..7668671 100644 (file)
@@ -1255,13 +1255,21 @@ rte_mempool_empty(const struct rte_mempool *mp)
 static inline phys_addr_t
 rte_mempool_virt2phy(const struct rte_mempool *mp, const void *elt)
 {
-       uintptr_t off;
-
-       off = (const char *)elt - (const char *)mp->elt_va_start;
-       return (mp->elt_pa[off >> mp->pg_shift] + (off & mp->pg_mask));
+       if (rte_eal_has_hugepages()) {
+               uintptr_t off;
+
+               off = (const char *)elt - (const char *)mp->elt_va_start;
+               return (mp->elt_pa[off >> mp->pg_shift] + (off & mp->pg_mask));
+       } else {
+               /*
+                * If huge pages are disabled, we cannot assume the
+                * memory region to be physically contiguous.
+                * Lookup for each element.
+                */
+               return rte_mem_virt2phy(elt);
+       }
 }
 
-
 /**
  * Check the consistency of mempool objects.
  *