uffd_global_test_opts_t
static void hugetlb_alias_mapping(uffd_global_test_opts_t *gopts, __u64 *start,
static void shmem_release_pages(uffd_global_test_opts_t *gopts, char *rel_area)
static int shmem_allocate_area(uffd_global_test_opts_t *gopts, void **alloc_area, bool is_src)
pthread_mutex_t *area_mutex(char *area, unsigned long nr, uffd_global_test_opts_t *gopts)
static void shmem_alias_mapping(uffd_global_test_opts_t *gopts, __u64 *start,
static void shmem_check_pmd_mapping(uffd_global_test_opts_t *gopts, void *p, int expect_nr_hpages)
uffd_global_test_opts_t *gopts)
int userfaultfd_open(uffd_global_test_opts_t *gopts, uint64_t *features)
static inline void munmap_area(uffd_global_test_opts_t *gopts, void **area)
void uffd_test_ctx_clear(uffd_global_test_opts_t *gopts)
int uffd_test_ctx_init(uffd_global_test_opts_t *gopts, uint64_t features, const char **errmsg)
int uffd_read_msg(uffd_global_test_opts_t *gopts, struct uffd_msg *msg)
void uffd_handle_page_fault(uffd_global_test_opts_t *gopts, struct uffd_msg *msg,
static void anon_release_pages(uffd_global_test_opts_t *gopts, char *rel_area)
uffd_global_test_opts_t *gopts = args->gopts;
static int anon_allocate_area(uffd_global_test_opts_t *gopts, void **alloc_area, bool is_src)
static void retry_copy_page(uffd_global_test_opts_t *gopts, struct uffdio_copy *uffdio_copy,
int __copy_page(uffd_global_test_opts_t *gopts, unsigned long offset, bool retry, bool wp)
int copy_page(uffd_global_test_opts_t *gopts, unsigned long offset, bool wp)
int move_page(uffd_global_test_opts_t *gopts, unsigned long offset, unsigned long len)
static void noop_alias_mapping(uffd_global_test_opts_t *gopts, __u64 *start,
static void hugetlb_release_pages(uffd_global_test_opts_t *gopts, char *rel_area)
static int hugetlb_allocate_area(uffd_global_test_opts_t *gopts, void **alloc_area, bool is_src)
int (*post_alloc)(uffd_global_test_opts_t *gopts, const char **errmsg);
extern uffd_global_test_opts_t *uffd_gtest_opts;
pthread_mutex_t *area_mutex(char *area, unsigned long nr, uffd_global_test_opts_t *gopts);
uffd_global_test_opts_t *gopts);
int uffd_test_ctx_init(uffd_global_test_opts_t *gopts, uint64_t features, const char **errmsg);
void uffd_test_ctx_clear(uffd_global_test_opts_t *gopts);
int userfaultfd_open(uffd_global_test_opts_t *gopts, uint64_t *features);
int uffd_read_msg(uffd_global_test_opts_t *gopts, struct uffd_msg *msg);
void uffd_handle_page_fault(uffd_global_test_opts_t *gopts,
int __copy_page(uffd_global_test_opts_t *gopts, unsigned long offset, bool retry, bool wp);
int copy_page(uffd_global_test_opts_t *gopts, unsigned long offset, bool wp);
int move_page(uffd_global_test_opts_t *gopts, unsigned long offset, unsigned long len);
int (*allocate_area)(uffd_global_test_opts_t *gopts, void **alloc_area, bool is_src);
void (*release_pages)(uffd_global_test_opts_t *gopts, char *rel_area);
void (*alias_mapping)(uffd_global_test_opts_t *gopts,
void (*check_pmd_mapping)(uffd_global_test_opts_t *gopts, void *p, int expect_nr_hpages);
int (*pre_alloc)(uffd_global_test_opts_t *gopts, const char **errmsg);
uffd_global_test_opts_t *gopts = args->gopts;
static int copy_page_retry(uffd_global_test_opts_t *gopts, unsigned long offset)
uffd_global_test_opts_t *gopts = args->gopts;
uffd_global_test_opts_t *gopts = args->gopts;
uffd_global_test_opts_t *gopts = args->gopts;
static int userfaultfd_stress(uffd_global_test_opts_t *gopts)
static void set_test_type(uffd_global_test_opts_t *gopts, const char *type)
static void parse_test_type_arg(uffd_global_test_opts_t *gopts, const char *raw_type)
gopts = (uffd_global_test_opts_t *) malloc(sizeof(uffd_global_test_opts_t));
static uffd_global_test_opts_t *gopts;
static void uffd_stats_reset(uffd_global_test_opts_t *gopts, struct uffd_args *args,
static void uffd_poison_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *targs)
uffd_move_handle_fault_common(uffd_global_test_opts_t *gopts,
static void uffd_move_handle_fault(uffd_global_test_opts_t *gopts, struct uffd_msg *msg,
static void uffd_move_pmd_handle_fault(uffd_global_test_opts_t *gopts, struct uffd_msg *msg,
uffd_move_test_common(uffd_global_test_opts_t *gopts,
static void uffd_move_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *targs)
static void uffd_move_pmd_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *targs)
static void uffd_move_pmd_split_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *targs)
uffd_global_test_opts_t *gopts;
uffd_global_test_opts_t *gopts = args->gopts;
static void uffd_consume_message(uffd_global_test_opts_t *gopts)
static void uffd_mmap_changing_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *targs)
static int prevent_hugepages(uffd_global_test_opts_t *gopts, const char **errmsg)
static int request_hugepages(uffd_global_test_opts_t *gopts, const char **errmsg)
do_register_ioctls_test(uffd_global_test_opts_t *gopts,
static void uffd_register_ioctls_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
uffd_global_test_opts_t gopts = { 0 };
uffd_global_test_opts_t *gopts;
static int pagemap_test_fork(uffd_global_test_opts_t *gopts, bool with_event, bool test_pin)
static void uffd_wp_unpopulated_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
static void uffd_wp_fork_test_common(uffd_global_test_opts_t *gopts, uffd_test_args_t *args,
static void uffd_wp_fork_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
static void uffd_wp_fork_with_event_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
static void uffd_wp_fork_pin_test_common(uffd_global_test_opts_t *gopts,
static void uffd_wp_fork_pin_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
static void uffd_wp_fork_pin_with_event_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
static void check_memory_contents(uffd_global_test_opts_t *gopts, char *p)
static void uffd_minor_test_common(uffd_global_test_opts_t *gopts, bool test_collapse, bool test_wp)
void uffd_minor_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
void uffd_minor_wp_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
void uffd_minor_collapse_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
static int faulting_process(uffd_global_test_opts_t *gopts, int signal_test, bool wp)
static void uffd_sigbus_test_common(uffd_global_test_opts_t *gopts, bool wp)
typedef void (*uffd_test_fn)(uffd_global_test_opts_t *, uffd_test_args_t *);
static void uffd_sigbus_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
static void uffd_sigbus_wp_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
static void uffd_events_test_common(uffd_global_test_opts_t *gopts, bool wp)
static void uffd_events_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
static void uffd_events_wp_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
static void retry_uffdio_zeropage(uffd_global_test_opts_t *gopts,
static bool do_uffdio_zeropage(uffd_global_test_opts_t *gopts, bool has_zeropage)
static void uffd_zeropage_test(uffd_global_test_opts_t *gopts, uffd_test_args_t *args)
static void do_uffdio_poison(uffd_global_test_opts_t *gopts, unsigned long offset)
static void uffd_poison_handle_fault(uffd_global_test_opts_t *gopts,
static void test_one_folio(uffd_global_test_opts_t *gopts, size_t size, bool private,
uffd_global_test_opts_t gopts = { 0 };