at master 1.2 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * KVM userfaultfd util 4 * 5 * Copyright (C) 2018, Red Hat, Inc. 6 * Copyright (C) 2019-2022 Google LLC 7 */ 8#include <inttypes.h> 9#include <time.h> 10#include <pthread.h> 11#include <linux/userfaultfd.h> 12 13#include "test_util.h" 14 15typedef int (*uffd_handler_t)(int uffd_mode, int uffd, struct uffd_msg *msg); 16 17struct uffd_reader_args { 18 int uffd_mode; 19 int uffd; 20 useconds_t delay; 21 uffd_handler_t handler; 22 /* Holds the read end of the pipe for killing the reader. */ 23 int pipe; 24}; 25 26struct uffd_desc { 27 int uffd; 28 uint64_t num_readers; 29 /* Holds the write ends of the pipes for killing the readers. */ 30 int *pipefds; 31 pthread_t *readers; 32 struct uffd_reader_args *reader_args; 33}; 34 35struct uffd_desc *uffd_setup_demand_paging(int uffd_mode, useconds_t delay, 36 void *hva, uint64_t len, 37 uint64_t num_readers, 38 uffd_handler_t handler); 39 40void uffd_stop_demand_paging(struct uffd_desc *uffd); 41 42#ifdef PRINT_PER_PAGE_UPDATES 43#define PER_PAGE_DEBUG(...) printf(__VA_ARGS__) 44#else 45#define PER_PAGE_DEBUG(...) _no_printf(__VA_ARGS__) 46#endif 47 48#ifdef PRINT_PER_VCPU_UPDATES 49#define PER_VCPU_DEBUG(...) printf(__VA_ARGS__) 50#else 51#define PER_VCPU_DEBUG(...) _no_printf(__VA_ARGS__) 52#endif