uffd_desc
struct uffd_desc **pt_uffd, struct uffd_desc **data_uffd)
static void free_uffd(struct test_desc *test, struct uffd_desc *pt_uffd,
struct uffd_desc *data_uffd)
struct uffd_desc *pt_uffd, *data_uffd;
struct uffd_desc **uffd_descs = NULL;
uffd_descs = malloc(num_uffds * sizeof(struct uffd_desc *));
struct uffd_desc *uffd_setup_demand_paging(int uffd_mode, useconds_t delay,
void uffd_stop_demand_paging(struct uffd_desc *uffd);
struct uffd_desc *uffd_setup_demand_paging(int uffd_mode, useconds_t delay,
struct uffd_desc *uffd_desc;
uffd_desc = malloc(sizeof(struct uffd_desc));
TEST_ASSERT(uffd_desc, "Failed to malloc uffd descriptor");
uffd_desc->pipefds = calloc(sizeof(int), num_readers);
TEST_ASSERT(uffd_desc->pipefds, "Failed to alloc pipes");
uffd_desc->readers = calloc(sizeof(pthread_t), num_readers);
TEST_ASSERT(uffd_desc->readers, "Failed to alloc reader threads");
uffd_desc->reader_args = calloc(sizeof(struct uffd_reader_args), num_readers);
TEST_ASSERT(uffd_desc->reader_args, "Failed to alloc reader_args");
uffd_desc->num_readers = num_readers;
uffd_desc->uffd = uffd;
for (i = 0; i < uffd_desc->num_readers; ++i) {
i, uffd_desc);
uffd_desc->pipefds[i] = pipes[1];
uffd_desc->reader_args[i].uffd_mode = uffd_mode;
uffd_desc->reader_args[i].uffd = uffd;
uffd_desc->reader_args[i].delay = delay;
uffd_desc->reader_args[i].handler = handler;
uffd_desc->reader_args[i].pipe = pipes[0];
pthread_create(&uffd_desc->readers[i], NULL, uffd_handler_thread_fn,
&uffd_desc->reader_args[i]);
return uffd_desc;
void uffd_stop_demand_paging(struct uffd_desc *uffd)