Path: blob/master/tools/testing/selftests/kvm/include/userfaultfd_util.h
38236 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* KVM userfaultfd util3*4* Copyright (C) 2018, Red Hat, Inc.5* Copyright (C) 2019-2022 Google LLC6*/7#include <inttypes.h>8#include <time.h>9#include <pthread.h>10#include <linux/userfaultfd.h>1112#include "test_util.h"1314typedef int (*uffd_handler_t)(int uffd_mode, int uffd, struct uffd_msg *msg);1516struct uffd_reader_args {17int uffd_mode;18int uffd;19useconds_t delay;20uffd_handler_t handler;21/* Holds the read end of the pipe for killing the reader. */22int pipe;23};2425struct uffd_desc {26int uffd;27uint64_t num_readers;28/* Holds the write ends of the pipes for killing the readers. */29int *pipefds;30pthread_t *readers;31struct uffd_reader_args *reader_args;32};3334struct uffd_desc *uffd_setup_demand_paging(int uffd_mode, useconds_t delay,35void *hva, uint64_t len,36uint64_t num_readers,37uffd_handler_t handler);3839void uffd_stop_demand_paging(struct uffd_desc *uffd);4041#ifdef PRINT_PER_PAGE_UPDATES42#define PER_PAGE_DEBUG(...) printf(__VA_ARGS__)43#else44#define PER_PAGE_DEBUG(...) _no_printf(__VA_ARGS__)45#endif4647#ifdef PRINT_PER_VCPU_UPDATES48#define PER_VCPU_DEBUG(...) printf(__VA_ARGS__)49#else50#define PER_VCPU_DEBUG(...) _no_printf(__VA_ARGS__)51#endif525354