test/mem: check segment fd API

Use memory autotest to also test segment fd API. This will not do
any checks - just see if the relevant API's return success or
indicate that the API is not supported.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Tiwei Bie <tiwei.bie@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
This commit is contained in:
Anatoly Burakov 2018-12-13 11:43:19 +00:00 committed by Thomas Monjalon
parent c75f535ac5
commit c3e35a0966

View File

@ -37,10 +37,44 @@ check_mem(const struct rte_memseg_list *msl __rte_unused,
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
@ -59,6 +93,15 @@ test_memory(void)
/* 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;
}