return 0;
}
+static int
+check_seg_fds(const struct rte_memseg_list *msl, const struct rte_memseg *ms,
+ void *arg __rte_unused)
+{
+ size_t offset;
+ int ret;
+
+ /* skip external segments */
+ if (msl->external)
+ return 0;
+
+ /* try segment fd first. we're in a callback, so thread-unsafe */
+ ret = rte_memseg_get_fd_thread_unsafe(ms);
+ if (ret < 0) {
+ /* ENOTSUP means segment is valid, but there is not support for
+ * segment fd API (e.g. on FreeBSD).
+ */
+ if (errno == ENOTSUP)
+ return 1;
+ /* all other errors are treated as failures */
+ return -1;
+ }
+
+ /* we're able to get memseg fd - try getting its offset */
+ ret = rte_memseg_get_fd_offset_thread_unsafe(ms, &offset);
+ if (ret < 0) {
+ if (errno == ENOTSUP)
+ return 1;
+ return -1;
+ }
+ return 0;
+}
+
static int
test_memory(void)
{
uint64_t s;
+ int ret;
/*
* dump the mapped memory: the python-expect script checks
/* try to read memory (should not segfault) */
rte_memseg_walk(check_mem, NULL);
+ /* check segment fd support */
+ ret = rte_memseg_walk(check_seg_fds, NULL);
+ if (ret == 1) {
+ printf("Segment fd API is unsupported\n");
+ } else if (ret == -1) {
+ printf("Error getting segment fd's\n");
+ return -1;
+ }
+
return 0;
}