52 lines · 1.2 KB · C
RawDownload
/* SPDX-License-Identifier: GPL-2.0 *//* * KVM userfaultfd util * * Copyright (C) 2018, Red Hat, Inc. * Copyright (C) 2019-2022 Google LLC */#include <inttypes.h>#include <time.h>#include <pthread.h>#include <linux/userfaultfd.h> #include "test_util.h" typedef int (*uffd_handler_t)(int uffd_mode, int uffd, struct uffd_msg *msg); struct uffd_reader_args {	int uffd_mode;	int uffd;	useconds_t delay;	uffd_handler_t handler;	/* Holds the read end of the pipe for killing the reader. */	int pipe;}; struct uffd_desc {	int uffd;	u64 num_readers;	/* Holds the write ends of the pipes for killing the readers. */	int *pipefds;	pthread_t *readers;	struct uffd_reader_args *reader_args;}; struct uffd_desc *uffd_setup_demand_paging(int uffd_mode, useconds_t delay,					   void *hva, u64 len,					   u64 num_readers,					   uffd_handler_t handler); void uffd_stop_demand_paging(struct uffd_desc *uffd); #ifdef PRINT_PER_PAGE_UPDATES#define PER_PAGE_DEBUG(...) printf(__VA_ARGS__)#else#define PER_PAGE_DEBUG(...) _no_printf(__VA_ARGS__)#endif #ifdef PRINT_PER_VCPU_UPDATES#define PER_VCPU_DEBUG(...) printf(__VA_ARGS__)#else#define PER_VCPU_DEBUG(...) _no_printf(__VA_ARGS__)#endif