devargs: add in doc
[dpdk.git] / lib / librte_mempool / rte_mempool.h
index ae13f8b..1f9243c 100644 (file)
@@ -314,6 +314,7 @@ static inline void __mempool_write_trailer_cookie(void *obj)
  */
 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
 #ifndef __INTEL_COMPILER
+#pragma GCC push_options
 #pragma GCC diagnostic ignored "-Wcast-qual"
 #endif
 static inline void __mempool_check_cookies(const struct rte_mempool *mp,
@@ -380,7 +381,7 @@ static inline void __mempool_check_cookies(const struct rte_mempool *mp,
        }
 }
 #ifndef __INTEL_COMPILER
-#pragma GCC diagnostic error "-Wcast-qual"
+#pragma GCC pop_options
 #endif
 #else
 #define __mempool_check_cookies(mp, obj_table_const, n, free) do {} while(0)
@@ -1255,13 +1256,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.
  *