return mlock((void *)aligned, page_size);
}
+int __rte_experimental
+rte_memseg_walk(rte_memseg_walk_t func, void *arg)
+{
+ struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
+ int i, ret;
+
+ for (i = 0; i < RTE_MAX_MEMSEG; i++) {
+ const struct rte_memseg *ms = &mcfg->memseg[i];
+
+ if (ms->addr == NULL)
+ continue;
+
+ ret = func(ms, arg);
+ if (ret < 0)
+ return -1;
+ if (ret > 0)
+ return 1;
+ }
+ return 0;
+}
+
/* init memory subsystem */
int
rte_eal_memory_init(void)
#endif
#include <rte_common.h>
+#include <rte_compat.h>
#include <rte_config.h>
__extension__
*/
rte_iova_t rte_mem_virt2iova(const void *virt);
+/**
+ * Memseg walk function prototype.
+ *
+ * Returning 0 will continue walk
+ * Returning 1 will stop the walk
+ * Returning -1 will stop the walk and report error
+ */
+typedef int (*rte_memseg_walk_t)(const struct rte_memseg *ms, void *arg);
+
+/**
+ * Walk list of all memsegs.
+ *
+ * @param func
+ * Iterator function
+ * @param arg
+ * Argument passed to iterator
+ * @return
+ * 0 if walked over the entire list
+ * 1 if stopped by the user
+ * -1 if user function reported error
+ */
+int __rte_experimental
+rte_memseg_walk(rte_memseg_walk_t func, void *arg);
+
/**
* Get the layout of the available physical memory.
*