xref: /linux/tools/testing/selftests/kvm/lib/kvm_util.c (revision 18812bf31fff2b11c7915596b94c190701952f20)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * tools/testing/selftests/kvm/lib/kvm_util.c
4  *
5  * Copyright (C) 2018, Google LLC.
6  */
7 #include "test_util.h"
8 #include "kvm_syscalls.h"
9 #include "kvm_util.h"
10 #include "processor.h"
11 #include "ucall_common.h"
12 
13 #include <assert.h>
14 #include <sched.h>
15 #include <sys/resource.h>
16 #include <sys/types.h>
17 #include <sys/stat.h>
18 #include <time.h>
19 #include <unistd.h>
20 #include <linux/align.h>
21 #include <linux/kernel.h>
22 
23 #include "../../../../../mm/gup_test.h"
24 
25 #define KVM_UTIL_MIN_PFN	2
26 
27 u32 kvm_random_seed;
28 struct kvm_random_state kvm_rng;
29 static u32 last_kvm_seed;
30 
31 static void kvm_seed_rng(u32 seed)
32 {
33 	kvm_random_seed = last_kvm_seed = seed;
34 	pr_info("Random seed: 0x%x\n", kvm_random_seed);
35 	kvm_rng = new_kvm_random_state(kvm_random_seed);
36 }
37 
38 bool kvm_has_gmem_attributes;
39 
40 static size_t vcpu_mmap_sz(void);
41 
42 int __open_path_or_exit(const char *path, int flags, const char *enoent_help)
43 {
44 	int fd;
45 
46 	fd = open(path, flags);
47 	if (fd < 0)
48 		goto error;
49 
50 	return fd;
51 
52 error:
53 	if (errno == EACCES || errno == ENOENT)
54 		ksft_exit_skip("- Cannot open '%s': %s.  %s\n",
55 			       path, strerror(errno),
56 			       errno == EACCES ? "Root required?" : enoent_help);
57 	TEST_FAIL("Failed to open '%s'", path);
58 }
59 
60 int open_path_or_exit(const char *path, int flags)
61 {
62 	return __open_path_or_exit(path, flags, "");
63 }
64 
65 /*
66  * Open KVM_DEV_PATH if available, otherwise exit the entire program.
67  *
68  * Input Args:
69  *   flags - The flags to pass when opening KVM_DEV_PATH.
70  *
71  * Return:
72  *   The opened file descriptor of /dev/kvm.
73  */
74 static int _open_kvm_dev_path_or_exit(int flags)
75 {
76 	return __open_path_or_exit(KVM_DEV_PATH, flags, "Is KVM loaded and enabled?");
77 }
78 
79 int open_kvm_dev_path_or_exit(void)
80 {
81 	return _open_kvm_dev_path_or_exit(O_RDONLY);
82 }
83 
84 static ssize_t get_module_param(const char *module_name, const char *param,
85 				void *buffer, size_t buffer_size)
86 {
87 	const int path_size = 128;
88 	char path[path_size];
89 	ssize_t bytes_read;
90 	int fd, r;
91 
92 	/* Verify KVM is loaded, to provide a more helpful SKIP message. */
93 	fd = open_kvm_dev_path_or_exit();
94 	kvm_free_fd(fd);
95 
96 	r = snprintf(path, path_size, "/sys/module/%s/parameters/%s",
97 		     module_name, param);
98 	TEST_ASSERT(r < path_size,
99 		    "Failed to construct sysfs path in %d bytes.", path_size);
100 
101 	fd = open_path_or_exit(path, O_RDONLY);
102 
103 	bytes_read = read(fd, buffer, buffer_size);
104 	TEST_ASSERT(bytes_read > 0, "read(%s) returned %ld, wanted %ld bytes",
105 		    path, bytes_read, buffer_size);
106 
107 	kvm_free_fd(fd);
108 	return bytes_read;
109 }
110 
111 int kvm_get_module_param_integer(const char *module_name, const char *param)
112 {
113 	/*
114 	 * 16 bytes to hold a 64-bit value (1 byte per char), 1 byte for the
115 	 * NUL char, and 1 byte because the kernel sucks and inserts a newline
116 	 * at the end.
117 	 */
118 	char value[16 + 1 + 1];
119 	ssize_t r;
120 
121 	memset(value, '\0', sizeof(value));
122 
123 	r = get_module_param(module_name, param, value, sizeof(value));
124 	TEST_ASSERT(value[r - 1] == '\n',
125 		    "Expected trailing newline, got char '%c'", value[r - 1]);
126 
127 	/*
128 	 * Squash the newline, otherwise atoi_paranoid() will complain about
129 	 * trailing non-NUL characters in the string.
130 	 */
131 	value[r - 1] = '\0';
132 	return atoi_paranoid(value);
133 }
134 
135 bool kvm_get_module_param_bool(const char *module_name, const char *param)
136 {
137 	char value;
138 	ssize_t r;
139 
140 	r = get_module_param(module_name, param, &value, sizeof(value));
141 	TEST_ASSERT_EQ(r, 1);
142 
143 	if (value == 'Y')
144 		return true;
145 	else if (value == 'N')
146 		return false;
147 
148 	TEST_FAIL("Unrecognized value '%c' for boolean module param", value);
149 }
150 
151 /*
152  * Capability
153  *
154  * Input Args:
155  *   cap - Capability
156  *
157  * Output Args: None
158  *
159  * Return:
160  *   On success, the Value corresponding to the capability (KVM_CAP_*)
161  *   specified by the value of cap.  On failure a TEST_ASSERT failure
162  *   is produced.
163  *
164  * Looks up and returns the value corresponding to the capability
165  * (KVM_CAP_*) given by cap.
166  */
167 unsigned int kvm_check_cap(long cap)
168 {
169 	int ret;
170 	int kvm_fd;
171 
172 	kvm_fd = open_kvm_dev_path_or_exit();
173 	ret = __kvm_ioctl(kvm_fd, KVM_CHECK_EXTENSION, (void *)cap);
174 	TEST_ASSERT(ret >= 0, KVM_IOCTL_ERROR(KVM_CHECK_EXTENSION, ret));
175 
176 	kvm_free_fd(kvm_fd);
177 
178 	return (unsigned int)ret;
179 }
180 
181 void vm_enable_dirty_ring(struct kvm_vm *vm, u32 ring_size)
182 {
183 	if (vm_check_cap(vm, KVM_CAP_DIRTY_LOG_RING_ACQ_REL))
184 		vm_enable_cap(vm, KVM_CAP_DIRTY_LOG_RING_ACQ_REL, ring_size);
185 	else
186 		vm_enable_cap(vm, KVM_CAP_DIRTY_LOG_RING, ring_size);
187 	vm->dirty_ring_size = ring_size;
188 }
189 
190 static void vm_open(struct kvm_vm *vm)
191 {
192 	vm->kvm_fd = _open_kvm_dev_path_or_exit(O_RDWR);
193 
194 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_IMMEDIATE_EXIT));
195 
196 	vm->fd = __kvm_ioctl(vm->kvm_fd, KVM_CREATE_VM, (void *)vm->type);
197 	TEST_ASSERT(vm->fd >= 0, KVM_IOCTL_ERROR(KVM_CREATE_VM, vm->fd));
198 
199 	if (kvm_has_cap(KVM_CAP_BINARY_STATS_FD))
200 		vm->stats.fd = vm_get_stats_fd(vm);
201 	else
202 		vm->stats.fd = -1;
203 }
204 
205 const char *vm_guest_mode_string(u32 i)
206 {
207 	static const char * const strings[] = {
208 		[VM_MODE_P52V48_4K]	= "PA-bits:52,  VA-bits:48,  4K pages",
209 		[VM_MODE_P52V48_16K]	= "PA-bits:52,  VA-bits:48, 16K pages",
210 		[VM_MODE_P52V48_64K]	= "PA-bits:52,  VA-bits:48, 64K pages",
211 		[VM_MODE_P48V48_4K]	= "PA-bits:48,  VA-bits:48,  4K pages",
212 		[VM_MODE_P48V48_16K]	= "PA-bits:48,  VA-bits:48, 16K pages",
213 		[VM_MODE_P48V48_64K]	= "PA-bits:48,  VA-bits:48, 64K pages",
214 		[VM_MODE_P40V48_4K]	= "PA-bits:40,  VA-bits:48,  4K pages",
215 		[VM_MODE_P40V48_16K]	= "PA-bits:40,  VA-bits:48, 16K pages",
216 		[VM_MODE_P40V48_64K]	= "PA-bits:40,  VA-bits:48, 64K pages",
217 		[VM_MODE_PXXVYY_4K]	= "PA-bits:ANY, VA-bits:48 or 57, 4K pages",
218 		[VM_MODE_P47V64_4K]	= "PA-bits:47,  VA-bits:64,  4K pages",
219 		[VM_MODE_P44V64_4K]	= "PA-bits:44,  VA-bits:64,  4K pages",
220 		[VM_MODE_P36V48_4K]	= "PA-bits:36,  VA-bits:48,  4K pages",
221 		[VM_MODE_P36V48_16K]	= "PA-bits:36,  VA-bits:48, 16K pages",
222 		[VM_MODE_P36V48_64K]	= "PA-bits:36,  VA-bits:48, 64K pages",
223 		[VM_MODE_P47V47_16K]	= "PA-bits:47,  VA-bits:47, 16K pages",
224 		[VM_MODE_P36V47_16K]	= "PA-bits:36,  VA-bits:47, 16K pages",
225 		[VM_MODE_P56V57_4K]	= "PA-bits:56,  VA-bits:57,  4K pages",
226 		[VM_MODE_P56V48_4K]	= "PA-bits:56,  VA-bits:48,  4K pages",
227 		[VM_MODE_P56V39_4K]	= "PA-bits:56,  VA-bits:39,  4K pages",
228 		[VM_MODE_P50V57_4K]	= "PA-bits:50,  VA-bits:57,  4K pages",
229 		[VM_MODE_P50V48_4K]	= "PA-bits:50,  VA-bits:48,  4K pages",
230 		[VM_MODE_P50V39_4K]	= "PA-bits:50,  VA-bits:39,  4K pages",
231 		[VM_MODE_P41V57_4K]	= "PA-bits:41,  VA-bits:57,  4K pages",
232 		[VM_MODE_P41V48_4K]	= "PA-bits:41,  VA-bits:48,  4K pages",
233 		[VM_MODE_P41V39_4K]	= "PA-bits:41,  VA-bits:39,  4K pages",
234 		[VM_MODE_P52V52_4K]	= "PA-bits:52,  VA-bits:52,  4K pages",
235 		[VM_MODE_P52V52_64K]	= "PA-bits:52,  VA-bits:52, 64K pages",
236 	};
237 	_Static_assert(sizeof(strings)/sizeof(char *) == NUM_VM_MODES,
238 		       "Missing new mode strings?");
239 
240 	TEST_ASSERT(i < NUM_VM_MODES, "Guest mode ID %d too big", i);
241 
242 	return strings[i];
243 }
244 
245 const struct vm_guest_mode_params vm_guest_mode_params[] = {
246 	[VM_MODE_P52V48_4K]	= { 52, 48,  0x1000, 12 },
247 	[VM_MODE_P52V48_16K]	= { 52, 48,  0x4000, 14 },
248 	[VM_MODE_P52V48_64K]	= { 52, 48, 0x10000, 16 },
249 	[VM_MODE_P48V48_4K]	= { 48, 48,  0x1000, 12 },
250 	[VM_MODE_P48V48_16K]	= { 48, 48,  0x4000, 14 },
251 	[VM_MODE_P48V48_64K]	= { 48, 48, 0x10000, 16 },
252 	[VM_MODE_P40V48_4K]	= { 40, 48,  0x1000, 12 },
253 	[VM_MODE_P40V48_16K]	= { 40, 48,  0x4000, 14 },
254 	[VM_MODE_P40V48_64K]	= { 40, 48, 0x10000, 16 },
255 	[VM_MODE_PXXVYY_4K]	= {  0,  0,  0x1000, 12 },
256 	[VM_MODE_P47V64_4K]	= { 47, 64,  0x1000, 12 },
257 	[VM_MODE_P44V64_4K]	= { 44, 64,  0x1000, 12 },
258 	[VM_MODE_P36V48_4K]	= { 36, 48,  0x1000, 12 },
259 	[VM_MODE_P36V48_16K]	= { 36, 48,  0x4000, 14 },
260 	[VM_MODE_P36V48_64K]	= { 36, 48, 0x10000, 16 },
261 	[VM_MODE_P47V47_16K]	= { 47, 47,  0x4000, 14 },
262 	[VM_MODE_P36V47_16K]	= { 36, 47,  0x4000, 14 },
263 	[VM_MODE_P56V57_4K]	= { 56, 57,  0x1000, 12 },
264 	[VM_MODE_P56V48_4K]	= { 56, 48,  0x1000, 12 },
265 	[VM_MODE_P56V39_4K]	= { 56, 39,  0x1000, 12 },
266 	[VM_MODE_P50V57_4K]	= { 50, 57,  0x1000, 12 },
267 	[VM_MODE_P50V48_4K]	= { 50, 48,  0x1000, 12 },
268 	[VM_MODE_P50V39_4K]	= { 50, 39,  0x1000, 12 },
269 	[VM_MODE_P41V57_4K]	= { 41, 57,  0x1000, 12 },
270 	[VM_MODE_P41V48_4K]	= { 41, 48,  0x1000, 12 },
271 	[VM_MODE_P41V39_4K]	= { 41, 39,  0x1000, 12 },
272 	[VM_MODE_P52V52_4K]	= { 52, 52,  0x1000, 12 },
273 	[VM_MODE_P52V52_64K]	= { 52, 52, 0x10000, 16 },
274 };
275 _Static_assert(sizeof(vm_guest_mode_params)/sizeof(struct vm_guest_mode_params) == NUM_VM_MODES,
276 	       "Missing new mode params?");
277 
278 /*
279  * Initializes vm->vpages_valid to match the canonical VA space of the
280  * architecture.
281  *
282  * The default implementation is valid for architectures which split the
283  * range addressed by a single page table into a low and high region
284  * based on the MSB of the VA. On architectures with this behavior
285  * the VA region spans [0, 2^(va_bits - 1)), [-(2^(va_bits - 1), -1].
286  */
287 __weak void vm_populate_gva_bitmap(struct kvm_vm *vm)
288 {
289 	sparsebit_set_num(vm->vpages_valid,
290 		0, (1ULL << (vm->va_bits - 1)) >> vm->page_shift);
291 	sparsebit_set_num(vm->vpages_valid,
292 		(~((1ULL << (vm->va_bits - 1)) - 1)) >> vm->page_shift,
293 		(1ULL << (vm->va_bits - 1)) >> vm->page_shift);
294 }
295 
296 struct kvm_vm *____vm_create(struct vm_shape shape)
297 {
298 	struct kvm_vm *vm;
299 	int i;
300 
301 	vm = calloc(1, sizeof(*vm));
302 	TEST_ASSERT(vm != NULL, "Insufficient Memory");
303 
304 	INIT_LIST_HEAD(&vm->vcpus);
305 	vm->regions.gpa_tree = RB_ROOT;
306 	vm->regions.hva_tree = RB_ROOT;
307 	hash_init(vm->regions.slot_hash);
308 	for (i = 0; i < NR_MEM_REGIONS; i++)
309 		vm->memslots[i] = KVM_INVALID_MEMSLOT;
310 
311 	vm->mode = shape.mode;
312 	vm->type = shape.type;
313 
314 	vm->pa_bits = vm_guest_mode_params[vm->mode].pa_bits;
315 	vm->va_bits = vm_guest_mode_params[vm->mode].va_bits;
316 	vm->page_size = vm_guest_mode_params[vm->mode].page_size;
317 	vm->page_shift = vm_guest_mode_params[vm->mode].page_shift;
318 
319 	/* Setup mode specific traits. */
320 	switch (vm->mode) {
321 	case VM_MODE_P52V48_4K:
322 		vm->mmu.pgtable_levels = 4;
323 		break;
324 	case VM_MODE_P52V48_64K:
325 		vm->mmu.pgtable_levels = 3;
326 		break;
327 	case VM_MODE_P48V48_4K:
328 		vm->mmu.pgtable_levels = 4;
329 		break;
330 	case VM_MODE_P48V48_64K:
331 		vm->mmu.pgtable_levels = 3;
332 		break;
333 	case VM_MODE_P40V48_4K:
334 	case VM_MODE_P36V48_4K:
335 		vm->mmu.pgtable_levels = 4;
336 		break;
337 	case VM_MODE_P40V48_64K:
338 	case VM_MODE_P36V48_64K:
339 		vm->mmu.pgtable_levels = 3;
340 		break;
341 	case VM_MODE_P52V48_16K:
342 	case VM_MODE_P48V48_16K:
343 	case VM_MODE_P40V48_16K:
344 	case VM_MODE_P36V48_16K:
345 		vm->mmu.pgtable_levels = 4;
346 		break;
347 	case VM_MODE_P47V47_16K:
348 	case VM_MODE_P36V47_16K:
349 		vm->mmu.pgtable_levels = 3;
350 		break;
351 	case VM_MODE_PXXVYY_4K:
352 #ifdef __x86_64__
353 		kvm_get_cpu_address_width(&vm->pa_bits, &vm->va_bits);
354 		kvm_init_vm_address_properties(vm);
355 
356 		pr_debug("Guest physical address width detected: %d\n",
357 			 vm->pa_bits);
358 		pr_debug("Guest virtual address width detected: %d\n",
359 			 vm->va_bits);
360 
361 		if (vm->va_bits == 57) {
362 			vm->mmu.pgtable_levels = 5;
363 		} else {
364 			TEST_ASSERT(vm->va_bits == 48,
365 				    "Unexpected guest virtual address width: %d",
366 				    vm->va_bits);
367 			vm->mmu.pgtable_levels = 4;
368 		}
369 #else
370 		TEST_FAIL("VM_MODE_PXXVYY_4K not supported on non-x86 platforms");
371 #endif
372 		break;
373 	case VM_MODE_P47V64_4K:
374 		vm->mmu.pgtable_levels = 5;
375 		break;
376 	case VM_MODE_P44V64_4K:
377 		vm->mmu.pgtable_levels = 5;
378 		break;
379 	case VM_MODE_P56V57_4K:
380 	case VM_MODE_P50V57_4K:
381 	case VM_MODE_P41V57_4K:
382 		vm->mmu.pgtable_levels = 5;
383 		break;
384 	case VM_MODE_P56V48_4K:
385 	case VM_MODE_P50V48_4K:
386 	case VM_MODE_P41V48_4K:
387 		vm->mmu.pgtable_levels = 4;
388 		break;
389 	case VM_MODE_P56V39_4K:
390 	case VM_MODE_P50V39_4K:
391 	case VM_MODE_P41V39_4K:
392 		vm->mmu.pgtable_levels = 3;
393 		break;
394 	case VM_MODE_P52V52_4K:
395 	case VM_MODE_P52V52_64K:
396 		vm->mmu.pgtable_levels = 4;
397 		break;
398 	default:
399 		TEST_FAIL("Unknown guest mode: 0x%x", vm->mode);
400 	}
401 
402 #ifdef __aarch64__
403 	TEST_ASSERT(!vm->type, "ARM doesn't support test-provided types");
404 	if (vm->pa_bits != 40)
405 		vm->type = KVM_VM_TYPE_ARM_IPA_SIZE(vm->pa_bits);
406 #endif
407 
408 	vm_open(vm);
409 
410 	/* Limit to VA-bit canonical virtual addresses. */
411 	vm->vpages_valid = sparsebit_alloc();
412 	vm_populate_gva_bitmap(vm);
413 
414 	/* Limit physical addresses to PA-bits. */
415 	vm->max_gfn = vm_compute_max_gfn(vm);
416 
417 	/* Allocate and setup memory for guest. */
418 	vm->vpages_mapped = sparsebit_alloc();
419 
420 	return vm;
421 }
422 
423 static u64 vm_nr_pages_required(enum vm_guest_mode mode,
424 				u32 nr_runnable_vcpus,
425 				u64 extra_mem_pages)
426 {
427 	u64 page_size = vm_guest_mode_params[mode].page_size;
428 	u64 nr_pages;
429 
430 	TEST_ASSERT(nr_runnable_vcpus,
431 		    "Use vm_create_barebones() for VMs that _never_ have vCPUs");
432 
433 	TEST_ASSERT(nr_runnable_vcpus <= kvm_check_cap(KVM_CAP_MAX_VCPUS),
434 		    "nr_vcpus = %d too large for host, max-vcpus = %d",
435 		    nr_runnable_vcpus, kvm_check_cap(KVM_CAP_MAX_VCPUS));
436 
437 	/*
438 	 * Arbitrarily allocate 512 pages (2mb when page size is 4kb) for the
439 	 * test code and other per-VM assets that will be loaded into memslot0.
440 	 */
441 	nr_pages = 512;
442 
443 	/* Account for the per-vCPU stacks on behalf of the test. */
444 	nr_pages += nr_runnable_vcpus * DEFAULT_STACK_PGS;
445 
446 	/*
447 	 * Account for the number of pages needed for the page tables.  The
448 	 * maximum page table size for a memory region will be when the
449 	 * smallest page size is used. Considering each page contains x page
450 	 * table descriptors, the total extra size for page tables (for extra
451 	 * N pages) will be: N/x+N/x^2+N/x^3+... which is definitely smaller
452 	 * than N/x*2.
453 	 */
454 	nr_pages += (nr_pages + extra_mem_pages) / PTES_PER_MIN_PAGE * 2;
455 
456 	/* Account for the number of pages needed by ucall. */
457 	nr_pages += ucall_nr_pages_required(page_size);
458 
459 	return vm_adjust_num_guest_pages(mode, nr_pages);
460 }
461 
462 void kvm_set_files_rlimit(u32 nr_vcpus)
463 {
464 	/*
465 	 * Each vCPU will open two file descriptors: the vCPU itself and the
466 	 * vCPU's binary stats file descriptor.  Add an arbitrary amount of
467 	 * buffer for all other files a test may open.
468 	 */
469 	int nr_fds_wanted = nr_vcpus * 2 + 100;
470 	struct rlimit rl;
471 
472 	/*
473 	 * Check that we're allowed to open nr_fds_wanted file descriptors and
474 	 * try raising the limits if needed.
475 	 */
476 	TEST_ASSERT(!getrlimit(RLIMIT_NOFILE, &rl), "getrlimit() failed!");
477 
478 	if (rl.rlim_cur < nr_fds_wanted) {
479 		rl.rlim_cur = nr_fds_wanted;
480 		if (rl.rlim_max < nr_fds_wanted) {
481 			int old_rlim_max = rl.rlim_max;
482 
483 			rl.rlim_max = nr_fds_wanted;
484 			__TEST_REQUIRE(setrlimit(RLIMIT_NOFILE, &rl) >= 0,
485 				       "RLIMIT_NOFILE hard limit is too low (%d, wanted %d)",
486 				       old_rlim_max, nr_fds_wanted);
487 		} else {
488 			TEST_ASSERT(!setrlimit(RLIMIT_NOFILE, &rl), "setrlimit() failed!");
489 		}
490 	}
491 
492 }
493 
494 static bool is_guest_memfd_required(struct vm_shape shape)
495 {
496 #ifdef __x86_64__
497 	return shape.type == KVM_X86_SNP_VM;
498 #else
499 	return false;
500 #endif
501 }
502 
503 struct kvm_vm *__vm_create(struct vm_shape shape, u32 nr_runnable_vcpus,
504 			   u64 nr_extra_pages)
505 {
506 	u64 nr_pages = vm_nr_pages_required(shape.mode, nr_runnable_vcpus,
507 						 nr_extra_pages);
508 	struct userspace_mem_region *slot0;
509 	u64 gmem_flags = 0;
510 	struct kvm_vm *vm;
511 	int flags;
512 
513 	kvm_set_files_rlimit(nr_runnable_vcpus);
514 
515 	pr_debug("%s: mode='%s' type='%d', pages='%ld'\n", __func__,
516 		 vm_guest_mode_string(shape.mode), shape.type, nr_pages);
517 
518 	vm = ____vm_create(shape);
519 
520 	/*
521 	 * Force GUEST_MEMFD for the primary memory region if necessary, e.g.
522 	 * for CoCo VMs that require GUEST_MEMFD backed private memory.
523 	 */
524 	flags = 0;
525 	if (is_guest_memfd_required(shape)) {
526 		flags |= KVM_MEM_GUEST_MEMFD;
527 
528 		/*
529 		 * Allow mmap() and initialize the gmem instance as SHARED if
530 		 * in-place conversions are supported, so that the memory can
531 		 * be populated/initialized like any other memory region.
532 		 */
533 		if (kvm_has_gmem_attributes)
534 			gmem_flags |= GUEST_MEMFD_FLAG_INIT_SHARED |
535 				      GUEST_MEMFD_FLAG_MMAP;
536 	}
537 
538 	vm_mem_add(vm, VM_MEM_SRC_ANONYMOUS, 0, 0, nr_pages, flags, -1, 0, gmem_flags);
539 	____vm_override_mem_region(vm, MEM_REGION_CODE, 0);
540 	____vm_override_mem_region(vm, MEM_REGION_PT, 0);
541 	____vm_override_mem_region(vm, MEM_REGION_DATA, 0);
542 	____vm_override_mem_region(vm, MEM_REGION_TEST_DATA, 0);
543 
544 	kvm_vm_elf_load(vm, program_invocation_name);
545 
546 	/*
547 	 * TODO: Add proper defines to protect the library's memslots, and then
548 	 * carve out memslot1 for the ucall MMIO address.  KVM treats writes to
549 	 * read-only memslots as MMIO, and creating a read-only memslot for the
550 	 * MMIO region would prevent silently clobbering the MMIO region.
551 	 */
552 	slot0 = memslot2region(vm, 0);
553 	ucall_init(vm, slot0->region.guest_phys_addr + slot0->region.memory_size);
554 
555 	if (kvm_random_seed != last_kvm_seed)
556 		kvm_seed_rng(kvm_random_seed);
557 
558 	sync_global_to_guest(vm, kvm_rng);
559 	sync_global_to_guest(vm, kvm_has_gmem_attributes);
560 
561 	kvm_arch_vm_post_create(vm, nr_runnable_vcpus);
562 
563 	return vm;
564 }
565 
566 /*
567  * VM Create with customized parameters
568  *
569  * Input Args:
570  *   mode - VM Mode (e.g. VM_MODE_P52V48_4K)
571  *   nr_vcpus - VCPU count
572  *   extra_mem_pages - Non-slot0 physical memory total size
573  *   guest_code - Guest entry point
574  *   vcpuids - VCPU IDs
575  *
576  * Output Args: None
577  *
578  * Return:
579  *   Pointer to opaque structure that describes the created VM.
580  *
581  * Creates a VM with the mode specified by mode (e.g. VM_MODE_P52V48_4K).
582  * extra_mem_pages is only used to calculate the maximum page table size,
583  * no real memory allocation for non-slot0 memory in this function.
584  */
585 struct kvm_vm *__vm_create_with_vcpus(struct vm_shape shape, u32 nr_vcpus,
586 				      u64 extra_mem_pages,
587 				      void *guest_code, struct kvm_vcpu *vcpus[])
588 {
589 	struct kvm_vm *vm;
590 	int i;
591 
592 	TEST_ASSERT(!nr_vcpus || vcpus, "Must provide vCPU array");
593 
594 	vm = __vm_create(shape, nr_vcpus, extra_mem_pages);
595 
596 	for (i = 0; i < nr_vcpus; ++i)
597 		vcpus[i] = vm_vcpu_add(vm, i, guest_code);
598 
599 	kvm_arch_vm_finalize_vcpus(vm);
600 	return vm;
601 }
602 
603 struct kvm_vm *__vm_create_shape_with_one_vcpu(struct vm_shape shape,
604 					       struct kvm_vcpu **vcpu,
605 					       u64 extra_mem_pages,
606 					       void *guest_code)
607 {
608 	struct kvm_vcpu *vcpus[1];
609 	struct kvm_vm *vm;
610 
611 	vm = __vm_create_with_vcpus(shape, 1, extra_mem_pages, guest_code, vcpus);
612 
613 	*vcpu = vcpus[0];
614 	return vm;
615 }
616 
617 /*
618  * VM Restart
619  *
620  * Input Args:
621  *   vm - VM that has been released before
622  *
623  * Output Args: None
624  *
625  * Reopens the file descriptors associated to the VM and reinstates the
626  * global state, such as the irqchip and the memory regions that are mapped
627  * into the guest.
628  */
629 void kvm_vm_restart(struct kvm_vm *vmp)
630 {
631 	int ctr;
632 	struct userspace_mem_region *region;
633 
634 	vm_open(vmp);
635 	if (vmp->has_irqchip)
636 		vm_create_irqchip(vmp);
637 
638 	hash_for_each(vmp->regions.slot_hash, ctr, region, slot_node) {
639 		int ret = ioctl(vmp->fd, KVM_SET_USER_MEMORY_REGION2, &region->region);
640 
641 		TEST_ASSERT(ret == 0, "KVM_SET_USER_MEMORY_REGION2 IOCTL failed,\n"
642 			    "  rc: %i errno: %i\n"
643 			    "  slot: %u flags: 0x%x\n"
644 			    "  guest_phys_addr: 0x%llx size: 0x%llx",
645 			    ret, errno, region->region.slot,
646 			    region->region.flags,
647 			    region->region.guest_phys_addr,
648 			    region->region.memory_size);
649 	}
650 }
651 
652 __weak struct kvm_vcpu *vm_arch_vcpu_recreate(struct kvm_vm *vm,
653 					      u32 vcpu_id)
654 {
655 	return __vm_vcpu_add(vm, vcpu_id);
656 }
657 
658 struct kvm_vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm)
659 {
660 	kvm_vm_restart(vm);
661 
662 	return vm_vcpu_recreate(vm, 0);
663 }
664 
665 int __pin_task_to_cpu(pthread_t task, int cpu)
666 {
667 	cpu_set_t cpuset;
668 
669 	CPU_ZERO(&cpuset);
670 	CPU_SET(cpu, &cpuset);
671 
672 	return pthread_setaffinity_np(task, sizeof(cpuset), &cpuset);
673 }
674 
675 static int gup_test_fd = -1;
676 
677 void pin_pages(void *vaddr, uint64_t size)
678 {
679 	const struct pin_longterm_test args = {
680 		.addr = (uint64_t)vaddr,
681 		.size = size,
682 		.flags = PIN_LONGTERM_TEST_FLAG_USE_WRITE,
683 	};
684 
685 	gup_test_fd = __open_path_or_exit("/sys/kernel/debug/gup_test", O_RDWR,
686 					  "Is CONFIG_GUP_TEST enabled?");
687 
688 	TEST_ASSERT_EQ(ioctl(gup_test_fd, PIN_LONGTERM_TEST_START, &args), 0);
689 }
690 
691 void unpin_pages(void)
692 {
693 	TEST_ASSERT_EQ(ioctl(gup_test_fd, PIN_LONGTERM_TEST_STOP), 0);
694 
695 	kvm_free_fd(gup_test_fd);
696 }
697 
698 static u32 parse_pcpu(const char *cpu_str, const cpu_set_t *allowed_mask)
699 {
700 	u32 pcpu = atoi_non_negative("CPU number", cpu_str);
701 
702 	TEST_ASSERT(CPU_ISSET(pcpu, allowed_mask),
703 		    "Not allowed to run on pCPU '%d', check cgroups?", pcpu);
704 	return pcpu;
705 }
706 
707 void kvm_print_vcpu_pinning_help(void)
708 {
709 	const char *name = program_invocation_name;
710 
711 	printf(" -c: Pin tasks to physical CPUs.  Takes a list of comma separated\n"
712 	       "     values (target pCPU), one for each vCPU, plus an optional\n"
713 	       "     entry for the main application task (specified via entry\n"
714 	       "     <nr_vcpus + 1>).  If used, entries must be provided for all\n"
715 	       "     vCPUs, i.e. pinning vCPUs is all or nothing.\n\n"
716 	       "     E.g. to create 3 vCPUs, pin vCPU0=>pCPU22, vCPU1=>pCPU23,\n"
717 	       "     vCPU2=>pCPU24, and pin the application task to pCPU50:\n\n"
718 	       "         %s -v 3 -c 22,23,24,50\n\n"
719 	       "     To leave the application task unpinned, drop the final entry:\n\n"
720 	       "         %s -v 3 -c 22,23,24\n\n"
721 	       "     (default: no pinning)\n", name, name);
722 }
723 
724 int kvm_pick_random_cpu(cpu_set_t *possible_cpus)
725 {
726 	int target_idx;
727 	int nr_cpus;
728 	int cpu;
729 
730 	nr_cpus = CPU_COUNT(possible_cpus);
731 	TEST_ASSERT(nr_cpus > 0, "No CPUs available in possible_cpus");
732 
733 	target_idx = kvm_random_u64(&kvm_rng) % nr_cpus;
734 
735 	for (cpu = 0; cpu < CPU_SETSIZE; cpu++) {
736 		if (CPU_ISSET(cpu, possible_cpus) && target_idx-- == 0)
737 			return cpu;
738 	}
739 	TEST_FAIL("Failed to find random CPU in possible_cpus");
740 	return -1;
741 }
742 
743 void kvm_parse_vcpu_pinning(const char *pcpus_string, u32 vcpu_to_pcpu[],
744 			    int nr_vcpus)
745 {
746 	cpu_set_t allowed_mask;
747 	char *cpu, *cpu_list;
748 	char delim[2] = ",";
749 	int i;
750 
751 	cpu_list = strdup(pcpus_string);
752 	TEST_ASSERT(cpu_list, "strdup() allocation failed.");
753 
754 	kvm_sched_getaffinity(0, sizeof(allowed_mask), &allowed_mask);
755 
756 	cpu = strtok(cpu_list, delim);
757 
758 	/* 1. Get all pcpus for vcpus. */
759 	for (i = 0; i < nr_vcpus; i++) {
760 		TEST_ASSERT(cpu, "pCPU not provided for vCPU '%d'", i);
761 		vcpu_to_pcpu[i] = parse_pcpu(cpu, &allowed_mask);
762 		cpu = strtok(NULL, delim);
763 	}
764 
765 	/* 2. Check if the main worker needs to be pinned. */
766 	if (cpu) {
767 		pin_self_to_cpu(parse_pcpu(cpu, &allowed_mask));
768 		cpu = strtok(NULL, delim);
769 	}
770 
771 	TEST_ASSERT(!cpu, "pCPU list contains trailing garbage characters '%s'", cpu);
772 	free(cpu_list);
773 }
774 
775 /*
776  * Userspace Memory Region Find
777  *
778  * Input Args:
779  *   vm - Virtual Machine
780  *   start - Starting VM physical address
781  *   end - Ending VM physical address, inclusive.
782  *
783  * Output Args: None
784  *
785  * Return:
786  *   Pointer to overlapping region, NULL if no such region.
787  *
788  * Searches for a region with any physical memory that overlaps with
789  * any portion of the guest physical addresses from start to end
790  * inclusive.  If multiple overlapping regions exist, a pointer to any
791  * of the regions is returned.  Null is returned only when no overlapping
792  * region exists.
793  */
794 static struct userspace_mem_region *
795 userspace_mem_region_find(struct kvm_vm *vm, u64 start, u64 end)
796 {
797 	struct rb_node *node;
798 
799 	for (node = vm->regions.gpa_tree.rb_node; node; ) {
800 		struct userspace_mem_region *region =
801 			container_of(node, struct userspace_mem_region, gpa_node);
802 		u64 existing_start = region->region.guest_phys_addr;
803 		u64 existing_end = region->region.guest_phys_addr
804 			+ region->region.memory_size - 1;
805 		if (start <= existing_end && end >= existing_start)
806 			return region;
807 
808 		if (start < existing_start)
809 			node = node->rb_left;
810 		else
811 			node = node->rb_right;
812 	}
813 
814 	return NULL;
815 }
816 
817 static void kvm_stats_release(struct kvm_binary_stats *stats)
818 {
819 	if (stats->fd < 0)
820 		return;
821 
822 	if (stats->desc) {
823 		free(stats->desc);
824 		stats->desc = NULL;
825 	}
826 
827 	kvm_free_fd(stats->fd);
828 }
829 
830 __weak void vcpu_arch_free(struct kvm_vcpu *vcpu)
831 {
832 
833 }
834 
835 /*
836  * VM VCPU Remove
837  *
838  * Input Args:
839  *   vcpu - VCPU to remove
840  *
841  * Output Args: None
842  *
843  * Return: None, TEST_ASSERT failures for all error conditions
844  *
845  * Removes a vCPU from a VM and frees its resources.
846  */
847 static void vm_vcpu_rm(struct kvm_vm *vm, struct kvm_vcpu *vcpu)
848 {
849 	if (vcpu->dirty_gfns) {
850 		kvm_munmap(vcpu->dirty_gfns, vm->dirty_ring_size);
851 		vcpu->dirty_gfns = NULL;
852 	}
853 
854 	kvm_munmap(vcpu->run, vcpu_mmap_sz());
855 
856 	kvm_free_fd(vcpu->fd);
857 	kvm_stats_release(&vcpu->stats);
858 
859 	list_del(&vcpu->list);
860 
861 	vcpu_arch_free(vcpu);
862 	free(vcpu);
863 }
864 
865 void kvm_vm_release(struct kvm_vm *vmp)
866 {
867 	struct kvm_vcpu *vcpu, *tmp;
868 
869 	list_for_each_entry_safe(vcpu, tmp, &vmp->vcpus, list)
870 		vm_vcpu_rm(vmp, vcpu);
871 
872 	kvm_free_fd(vmp->fd);
873 	kvm_free_fd(vmp->kvm_fd);
874 
875 	/* Free cached stats metadata and close FD */
876 	kvm_stats_release(&vmp->stats);
877 
878 	kvm_arch_vm_release(vmp);
879 }
880 
881 static void __vm_mem_region_delete(struct kvm_vm *vm,
882 				   struct userspace_mem_region *region)
883 {
884 	rb_erase(&region->gpa_node, &vm->regions.gpa_tree);
885 	rb_erase(&region->hva_node, &vm->regions.hva_tree);
886 	hash_del(&region->slot_node);
887 
888 	sparsebit_free(&region->unused_phy_pages);
889 	sparsebit_free(&region->protected_phy_pages);
890 	kvm_munmap(region->mmap_start, region->mmap_size);
891 	if (region->fd >= 0) {
892 		/* There's an extra map when using shared memory. */
893 		kvm_munmap(region->mmap_alias, region->mmap_size);
894 		kvm_free_fd(region->fd);
895 	}
896 	if ((int)region->region.guest_memfd >= 0)
897 		kvm_free_fd(region->region.guest_memfd);
898 
899 	free(region);
900 }
901 
902 /*
903  * Destroys and frees the VM pointed to by vmp.
904  */
905 void kvm_vm_free(struct kvm_vm *vmp)
906 {
907 	int ctr;
908 	struct hlist_node *node;
909 	struct userspace_mem_region *region;
910 
911 	if (vmp == NULL)
912 		return;
913 
914 	/* Free userspace_mem_regions. */
915 	hash_for_each_safe(vmp->regions.slot_hash, ctr, node, region, slot_node)
916 		__vm_mem_region_delete(vmp, region);
917 
918 	/* Free sparsebit arrays. */
919 	sparsebit_free(&vmp->vpages_valid);
920 	sparsebit_free(&vmp->vpages_mapped);
921 
922 	kvm_vm_release(vmp);
923 
924 	/* Free the structure describing the VM. */
925 	free(vmp);
926 }
927 
928 int kvm_memfd_alloc(size_t size, bool hugepages)
929 {
930 	int memfd_flags = MFD_CLOEXEC;
931 	int fd;
932 
933 	if (hugepages)
934 		memfd_flags |= MFD_HUGETLB;
935 
936 	fd = memfd_create("kvm_selftest", memfd_flags);
937 	TEST_ASSERT(fd != -1, __KVM_SYSCALL_ERROR("memfd_create()", fd));
938 
939 	kvm_ftruncate(fd, size);
940 	kvm_fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, size);
941 
942 	return fd;
943 }
944 
945 static void vm_userspace_mem_region_gpa_insert(struct rb_root *gpa_tree,
946 					       struct userspace_mem_region *region)
947 {
948 	struct rb_node **cur, *parent;
949 
950 	for (cur = &gpa_tree->rb_node, parent = NULL; *cur; ) {
951 		struct userspace_mem_region *cregion;
952 
953 		cregion = container_of(*cur, typeof(*cregion), gpa_node);
954 		parent = *cur;
955 		if (region->region.guest_phys_addr <
956 		    cregion->region.guest_phys_addr)
957 			cur = &(*cur)->rb_left;
958 		else {
959 			TEST_ASSERT(region->region.guest_phys_addr !=
960 				    cregion->region.guest_phys_addr,
961 				    "Duplicate GPA in region tree");
962 
963 			cur = &(*cur)->rb_right;
964 		}
965 	}
966 
967 	rb_link_node(&region->gpa_node, parent, cur);
968 	rb_insert_color(&region->gpa_node, gpa_tree);
969 }
970 
971 static void vm_userspace_mem_region_hva_insert(struct rb_root *hva_tree,
972 					       struct userspace_mem_region *region)
973 {
974 	struct rb_node **cur, *parent;
975 
976 	for (cur = &hva_tree->rb_node, parent = NULL; *cur; ) {
977 		struct userspace_mem_region *cregion;
978 
979 		cregion = container_of(*cur, typeof(*cregion), hva_node);
980 		parent = *cur;
981 		if (region->host_mem < cregion->host_mem)
982 			cur = &(*cur)->rb_left;
983 		else {
984 			TEST_ASSERT(region->host_mem !=
985 				    cregion->host_mem,
986 				    "Duplicate HVA in region tree");
987 
988 			cur = &(*cur)->rb_right;
989 		}
990 	}
991 
992 	rb_link_node(&region->hva_node, parent, cur);
993 	rb_insert_color(&region->hva_node, hva_tree);
994 }
995 
996 
997 int __vm_set_user_memory_region(struct kvm_vm *vm, u32 slot, u32 flags,
998 				gpa_t gpa, u64 size, void *hva)
999 {
1000 	struct kvm_userspace_memory_region region = {
1001 		.slot = slot,
1002 		.flags = flags,
1003 		.guest_phys_addr = gpa,
1004 		.memory_size = size,
1005 		.userspace_addr = (uintptr_t)hva,
1006 	};
1007 
1008 	return ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, &region);
1009 }
1010 
1011 void vm_set_user_memory_region(struct kvm_vm *vm, u32 slot, u32 flags,
1012 			       gpa_t gpa, u64 size, void *hva)
1013 {
1014 	int ret = __vm_set_user_memory_region(vm, slot, flags, gpa, size, hva);
1015 
1016 	TEST_ASSERT(!ret, "KVM_SET_USER_MEMORY_REGION failed, errno = %d (%s)",
1017 		    errno, strerror(errno));
1018 }
1019 
1020 #define TEST_REQUIRE_SET_USER_MEMORY_REGION2()			\
1021 	__TEST_REQUIRE(kvm_has_cap(KVM_CAP_USER_MEMORY2),	\
1022 		       "KVM selftests now require KVM_SET_USER_MEMORY_REGION2 (introduced in v6.8)")
1023 
1024 int __vm_set_user_memory_region2(struct kvm_vm *vm, u32 slot, u32 flags,
1025 				 gpa_t gpa, u64 size, void *hva,
1026 				 u32 gmem_fd, u64 gmem_offset)
1027 {
1028 	struct kvm_userspace_memory_region2 region = {
1029 		.slot = slot,
1030 		.flags = flags,
1031 		.guest_phys_addr = gpa,
1032 		.memory_size = size,
1033 		.userspace_addr = (uintptr_t)hva,
1034 		.guest_memfd = gmem_fd,
1035 		.guest_memfd_offset = gmem_offset,
1036 	};
1037 
1038 	TEST_REQUIRE_SET_USER_MEMORY_REGION2();
1039 
1040 	return ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION2, &region);
1041 }
1042 
1043 void vm_set_user_memory_region2(struct kvm_vm *vm, u32 slot, u32 flags,
1044 				gpa_t gpa, u64 size, void *hva,
1045 				u32 gmem_fd, u64 gmem_offset)
1046 {
1047 	int ret = __vm_set_user_memory_region2(vm, slot, flags, gpa, size, hva,
1048 					       gmem_fd, gmem_offset);
1049 
1050 	TEST_ASSERT(!ret, "KVM_SET_USER_MEMORY_REGION2 failed, errno = %d (%s)",
1051 		    errno, strerror(errno));
1052 }
1053 
1054 
1055 /* FIXME: This thing needs to be ripped apart and rewritten. */
1056 void vm_mem_add(struct kvm_vm *vm, enum vm_mem_backing_src_type src_type,
1057 		gpa_t gpa, u32 slot, u64 npages, u32 flags,
1058 		int gmem_fd, u64 gmem_offset, u64 gmem_flags)
1059 {
1060 	int ret;
1061 	struct userspace_mem_region *region;
1062 	size_t mem_size = npages * vm->page_size;
1063 	size_t backing_src_pagesz;
1064 	off_t mmap_offset;
1065 	bool is_gmem_mmap;
1066 	size_t alignment;
1067 	int mmap_flags;
1068 
1069 	TEST_REQUIRE_SET_USER_MEMORY_REGION2();
1070 
1071 	TEST_ASSERT(vm_adjust_num_guest_pages(vm->mode, npages) == npages,
1072 		"Number of guest pages is not compatible with the host. "
1073 		"Try npages=%d", vm_adjust_num_guest_pages(vm->mode, npages));
1074 
1075 	TEST_ASSERT((gpa % vm->page_size) == 0, "Guest physical "
1076 		"address not on a page boundary.\n"
1077 		"  gpa: 0x%lx vm->page_size: 0x%x",
1078 		gpa, vm->page_size);
1079 	TEST_ASSERT((((gpa >> vm->page_shift) + npages) - 1)
1080 		<= vm->max_gfn, "Physical range beyond maximum "
1081 		"supported physical address,\n"
1082 		"  gpa: 0x%lx npages: 0x%lx\n"
1083 		"  vm->max_gfn: 0x%lx vm->page_size: 0x%x",
1084 		gpa, npages, vm->max_gfn, vm->page_size);
1085 
1086 	/*
1087 	 * Confirm a mem region with an overlapping address doesn't
1088 	 * already exist.
1089 	 */
1090 	region = (struct userspace_mem_region *) userspace_mem_region_find(
1091 		vm, gpa, (gpa + npages * vm->page_size) - 1);
1092 	if (region != NULL)
1093 		TEST_FAIL("overlapping userspace_mem_region already "
1094 			"exists\n"
1095 			"  requested gpa: 0x%lx npages: 0x%lx page_size: 0x%x\n"
1096 			"  existing gpa: 0x%lx size: 0x%lx",
1097 			gpa, npages, vm->page_size,
1098 			(u64)region->region.guest_phys_addr,
1099 			(u64)region->region.memory_size);
1100 
1101 	/* Confirm no region with the requested slot already exists. */
1102 	hash_for_each_possible(vm->regions.slot_hash, region, slot_node,
1103 			       slot) {
1104 		if (region->region.slot != slot)
1105 			continue;
1106 
1107 		TEST_FAIL("A mem region with the requested slot "
1108 			"already exists.\n"
1109 			"  requested slot: %u gpa: 0x%lx npages: 0x%lx\n"
1110 			"  existing slot: %u gpa: 0x%lx size: 0x%lx",
1111 			slot, gpa, npages, region->region.slot,
1112 			(u64)region->region.guest_phys_addr,
1113 			(u64)region->region.memory_size);
1114 	}
1115 
1116 	/* Allocate and initialize new mem region structure. */
1117 	region = calloc(1, sizeof(*region));
1118 	TEST_ASSERT(region != NULL, "Insufficient Memory");
1119 
1120 	is_gmem_mmap = (flags & KVM_MEM_GUEST_MEMFD) &&
1121 		       (gmem_flags & GUEST_MEMFD_FLAG_MMAP);
1122 
1123 	if (is_gmem_mmap) {
1124 		backing_src_pagesz = getpagesize();
1125 		alignment = 1;
1126 		mmap_flags = MAP_SHARED;
1127 		mmap_offset = gmem_offset;
1128 	} else {
1129 		backing_src_pagesz = get_backing_src_pagesz(src_type);
1130 		/*
1131 		 * When using THP mmap is not guaranteed to returned a hugepage aligned
1132 		 * address so we have to pad the mmap. Padding is not needed for HugeTLB
1133 		 * because mmap will always return an address aligned to the HugeTLB
1134 		 * page size.
1135 		 */
1136 		alignment = src_type == VM_MEM_SRC_ANONYMOUS_THP ? backing_src_pagesz : 1;
1137 		mmap_flags = vm_mem_backing_src_alias(src_type)->flag;
1138 		mmap_offset = 0;
1139 	}
1140 
1141 	TEST_ASSERT_EQ(gpa, align_up(gpa, backing_src_pagesz));
1142 
1143 	region->mmap_size = mem_size;
1144 	/* Add enough memory to align up if necessary */
1145 	if (alignment > 1)
1146 		region->mmap_size += alignment;
1147 
1148 	if (flags & KVM_MEM_GUEST_MEMFD) {
1149 		if (gmem_fd < 0) {
1150 			TEST_ASSERT(!gmem_offset,
1151 				    "Offset must be zero when creating new guest_memfd");
1152 			gmem_fd = vm_create_guest_memfd(vm, mem_size, gmem_flags);
1153 		} else {
1154 			/*
1155 			 * Install a unique fd for each memslot so that the fd
1156 			 * can be closed when the region is deleted without
1157 			 * needing to track if the fd is owned by the framework
1158 			 * or by the caller.
1159 			 */
1160 			gmem_fd = kvm_dup(gmem_fd);
1161 		}
1162 
1163 		region->region.guest_memfd = gmem_fd;
1164 		region->region.guest_memfd_offset = gmem_offset;
1165 	} else {
1166 		region->region.guest_memfd = -1;
1167 	}
1168 
1169 	region->fd = -1;
1170 	if (is_gmem_mmap) {
1171 		region->fd = kvm_dup(gmem_fd);
1172 	} else if (backing_src_is_shared(src_type)) {
1173 		region->fd = kvm_memfd_alloc(region->mmap_size,
1174 					     src_type == VM_MEM_SRC_SHARED_HUGETLB);
1175 	}
1176 
1177 	region->mmap_start = __kvm_mmap(region->mmap_size, PROT_READ | PROT_WRITE,
1178 					mmap_flags, region->fd, mmap_offset);
1179 
1180 	/* Align host address */
1181 	region->host_mem = align_ptr_up(region->mmap_start, alignment);
1182 
1183 	if (!is_gmem_mmap) {
1184 		TEST_ASSERT(!is_backing_src_hugetlb(src_type) ||
1185 			    region->mmap_start ==
1186 			    align_ptr_up(region->mmap_start, backing_src_pagesz),
1187 			    "mmap_start %p is not aligned to HugeTLB page size 0x%lx",
1188 			    region->mmap_start, backing_src_pagesz);
1189 
1190 		/* As needed perform madvise */
1191 		if ((src_type == VM_MEM_SRC_ANONYMOUS ||
1192 		     src_type == VM_MEM_SRC_ANONYMOUS_THP) && thp_configured()) {
1193 			int advice = src_type == VM_MEM_SRC_ANONYMOUS ?
1194 				     MADV_NOHUGEPAGE : MADV_HUGEPAGE;
1195 
1196 			ret = madvise(region->host_mem, mem_size, advice);
1197 			TEST_ASSERT(ret == 0, "madvise failed, addr: %p length: 0x%lx src_type: %s",
1198 				    region->host_mem, mem_size,
1199 				    vm_mem_backing_src_alias(src_type)->name);
1200 		}
1201 	}
1202 
1203 	region->backing_src_type = src_type;
1204 
1205 	region->unused_phy_pages = sparsebit_alloc();
1206 	if (vm_arch_has_protected_memory(vm))
1207 		region->protected_phy_pages = sparsebit_alloc();
1208 	sparsebit_set_num(region->unused_phy_pages, gpa >> vm->page_shift, npages);
1209 	region->region.slot = slot;
1210 	region->region.flags = flags;
1211 	region->region.guest_phys_addr = gpa;
1212 	region->region.memory_size = npages * vm->page_size;
1213 	region->region.userspace_addr = (uintptr_t) region->host_mem;
1214 	ret = __vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION2, &region->region);
1215 	TEST_ASSERT(ret == 0, "KVM_SET_USER_MEMORY_REGION2 IOCTL failed,\n"
1216 		"  rc: %i errno: %i\n"
1217 		"  slot: %u flags: 0x%x\n"
1218 		"  guest_phys_addr: 0x%lx size: 0x%llx guest_memfd: %d",
1219 		ret, errno, slot, flags, gpa, region->region.memory_size,
1220 		region->region.guest_memfd);
1221 
1222 	/* Add to quick lookup data structures */
1223 	vm_userspace_mem_region_gpa_insert(&vm->regions.gpa_tree, region);
1224 	vm_userspace_mem_region_hva_insert(&vm->regions.hva_tree, region);
1225 	hash_add(vm->regions.slot_hash, &region->slot_node, slot);
1226 
1227 	/* If shared memory, create an alias. */
1228 	if (region->fd >= 0) {
1229 		region->mmap_alias = __kvm_mmap(region->mmap_size,
1230 						PROT_READ | PROT_WRITE,
1231 						mmap_flags, region->fd,
1232 						mmap_offset);
1233 
1234 		/* Align host alias address */
1235 		region->host_alias = align_ptr_up(region->mmap_alias, alignment);
1236 	}
1237 }
1238 
1239 void vm_userspace_mem_region_add(struct kvm_vm *vm,
1240 				 enum vm_mem_backing_src_type src_type,
1241 				 gpa_t gpa, u32 slot, u64 npages, u32 flags)
1242 {
1243 	vm_mem_add(vm, src_type, gpa, slot, npages, flags, -1, 0, 0);
1244 }
1245 
1246 /*
1247  * Memslot to region
1248  *
1249  * Input Args:
1250  *   vm - Virtual Machine
1251  *   memslot - KVM memory slot ID
1252  *
1253  * Output Args: None
1254  *
1255  * Return:
1256  *   Pointer to memory region structure that describe memory region
1257  *   using kvm memory slot ID given by memslot.  TEST_ASSERT failure
1258  *   on error (e.g. currently no memory region using memslot as a KVM
1259  *   memory slot ID).
1260  */
1261 struct userspace_mem_region *
1262 memslot2region(struct kvm_vm *vm, u32 memslot)
1263 {
1264 	struct userspace_mem_region *region;
1265 
1266 	TEST_ASSERT(memslot != KVM_INVALID_MEMSLOT, "vm->memslots[] unpopulated?");
1267 
1268 	hash_for_each_possible(vm->regions.slot_hash, region, slot_node,
1269 			       memslot)
1270 		if (region->region.slot == memslot)
1271 			return region;
1272 
1273 	fprintf(stderr, "No mem region with the requested slot found,\n"
1274 		"  requested slot: %u\n", memslot);
1275 	fputs("---- vm dump ----\n", stderr);
1276 	vm_dump(stderr, vm, 2);
1277 	TEST_FAIL("Mem region not found");
1278 	return NULL;
1279 }
1280 
1281 /*
1282  * VM Memory Region Flags Set
1283  *
1284  * Input Args:
1285  *   vm - Virtual Machine
1286  *   flags - Starting guest physical address
1287  *
1288  * Output Args: None
1289  *
1290  * Return: None
1291  *
1292  * Sets the flags of the memory region specified by the value of slot,
1293  * to the values given by flags.
1294  */
1295 void vm_mem_region_set_flags(struct kvm_vm *vm, u32 slot, u32 flags)
1296 {
1297 	int ret;
1298 	struct userspace_mem_region *region;
1299 
1300 	region = memslot2region(vm, slot);
1301 
1302 	region->region.flags = flags;
1303 
1304 	ret = __vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION2, &region->region);
1305 
1306 	TEST_ASSERT(ret == 0, "KVM_SET_USER_MEMORY_REGION2 IOCTL failed,\n"
1307 		"  rc: %i errno: %i slot: %u flags: 0x%x",
1308 		ret, errno, slot, flags);
1309 }
1310 
1311 void vm_mem_region_reload(struct kvm_vm *vm, u32 slot)
1312 {
1313 	struct userspace_mem_region *region = memslot2region(vm, slot);
1314 	struct kvm_userspace_memory_region2 tmp = region->region;
1315 
1316 	tmp.memory_size = 0;
1317 	vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION2, &tmp);
1318 	vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION2, &region->region);
1319 }
1320 
1321 /*
1322  * VM Memory Region Move
1323  *
1324  * Input Args:
1325  *   vm - Virtual Machine
1326  *   slot - Slot of the memory region to move
1327  *   new_gpa - Starting guest physical address
1328  *
1329  * Output Args: None
1330  *
1331  * Return: None
1332  *
1333  * Change the gpa of a memory region.
1334  */
1335 void vm_mem_region_move(struct kvm_vm *vm, u32 slot, u64 new_gpa)
1336 {
1337 	struct userspace_mem_region *region;
1338 	int ret;
1339 
1340 	region = memslot2region(vm, slot);
1341 
1342 	region->region.guest_phys_addr = new_gpa;
1343 
1344 	ret = __vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION2, &region->region);
1345 
1346 	TEST_ASSERT(!ret, "KVM_SET_USER_MEMORY_REGION2 failed\n"
1347 		    "ret: %i errno: %i slot: %u new_gpa: 0x%lx",
1348 		    ret, errno, slot, new_gpa);
1349 }
1350 
1351 /*
1352  * VM Memory Region Delete
1353  *
1354  * Input Args:
1355  *   vm - Virtual Machine
1356  *   slot - Slot of the memory region to delete
1357  *
1358  * Output Args: None
1359  *
1360  * Return: None
1361  *
1362  * Delete a memory region.
1363  */
1364 void vm_mem_region_delete(struct kvm_vm *vm, u32 slot)
1365 {
1366 	struct userspace_mem_region *region = memslot2region(vm, slot);
1367 
1368 	region->region.memory_size = 0;
1369 	vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION2, &region->region);
1370 
1371 	__vm_mem_region_delete(vm, region);
1372 }
1373 
1374 void vm_guest_mem_fallocate(struct kvm_vm *vm, u64 base, u64 size,
1375 			    bool punch_hole)
1376 {
1377 	const int mode = FALLOC_FL_KEEP_SIZE | (punch_hole ? FALLOC_FL_PUNCH_HOLE : 0);
1378 	u64 end = base + size;
1379 	off_t fd_offset;
1380 	int fd, ret;
1381 	size_t len;
1382 	gpa_t gpa;
1383 
1384 	for (gpa = base; gpa < end; gpa += len) {
1385 		fd = kvm_gpa_to_guest_memfd(vm, gpa, &fd_offset, &len);
1386 		len = min(end - gpa, len);
1387 
1388 		ret = fallocate(fd, mode, fd_offset, len);
1389 		TEST_ASSERT(!ret, "fallocate() failed to %s at %lx (len = %lu), fd = %d, mode = %x, offset = %lx",
1390 			    punch_hole ? "punch hole" : "allocate", gpa, len,
1391 			    fd, mode, fd_offset);
1392 	}
1393 }
1394 
1395 /* Returns the size of a vCPU's kvm_run structure. */
1396 static size_t vcpu_mmap_sz(void)
1397 {
1398 	int dev_fd, ret;
1399 
1400 	dev_fd = open_kvm_dev_path_or_exit();
1401 
1402 	ret = ioctl(dev_fd, KVM_GET_VCPU_MMAP_SIZE, NULL);
1403 	TEST_ASSERT(ret >= 0 && ret >= sizeof(struct kvm_run),
1404 		    KVM_IOCTL_ERROR(KVM_GET_VCPU_MMAP_SIZE, ret));
1405 
1406 	kvm_free_fd(dev_fd);
1407 
1408 	return ret;
1409 }
1410 
1411 static bool vcpu_exists(struct kvm_vm *vm, u32 vcpu_id)
1412 {
1413 	struct kvm_vcpu *vcpu;
1414 
1415 	list_for_each_entry(vcpu, &vm->vcpus, list) {
1416 		if (vcpu->id == vcpu_id)
1417 			return true;
1418 	}
1419 
1420 	return false;
1421 }
1422 
1423 /*
1424  * Adds a virtual CPU to the VM specified by vm with the ID given by vcpu_id.
1425  * No additional vCPU setup is done.  Returns the vCPU.
1426  */
1427 struct kvm_vcpu *__vm_vcpu_add(struct kvm_vm *vm, u32 vcpu_id)
1428 {
1429 	struct kvm_vcpu *vcpu;
1430 
1431 	/* Confirm a vcpu with the specified id doesn't already exist. */
1432 	TEST_ASSERT(!vcpu_exists(vm, vcpu_id), "vCPU%d already exists", vcpu_id);
1433 
1434 	/* Allocate and initialize new vcpu structure. */
1435 	vcpu = calloc(1, sizeof(*vcpu));
1436 	TEST_ASSERT(vcpu != NULL, "Insufficient Memory");
1437 
1438 	vcpu->vm = vm;
1439 	vcpu->id = vcpu_id;
1440 	vcpu->fd = __vm_ioctl(vm, KVM_CREATE_VCPU, (void *)(unsigned long)vcpu_id);
1441 	TEST_ASSERT_VM_VCPU_IOCTL(vcpu->fd >= 0, KVM_CREATE_VCPU, vcpu->fd, vm);
1442 
1443 	TEST_ASSERT(vcpu_mmap_sz() >= sizeof(*vcpu->run), "vcpu mmap size "
1444 		"smaller than expected, vcpu_mmap_sz: %zi expected_min: %zi",
1445 		vcpu_mmap_sz(), sizeof(*vcpu->run));
1446 	vcpu->run = kvm_mmap(vcpu_mmap_sz(), PROT_READ | PROT_WRITE,
1447 			     MAP_SHARED, vcpu->fd);
1448 
1449 	if (kvm_has_cap(KVM_CAP_BINARY_STATS_FD))
1450 		vcpu->stats.fd = vcpu_get_stats_fd(vcpu);
1451 	else
1452 		vcpu->stats.fd = -1;
1453 
1454 	/* Add to linked-list of VCPUs. */
1455 	list_add(&vcpu->list, &vm->vcpus);
1456 
1457 	return vcpu;
1458 }
1459 
1460 /*
1461  * Within the VM specified by @vm, locates the lowest starting guest virtual
1462  * address >= @min_gva, that has at least @sz unallocated bytes.  A
1463  * TEST_ASSERT failure occurs for invalid input or no area of at least
1464  * @sz unallocated bytes >= @min_gva is available.
1465  */
1466 gva_t vm_unused_gva_gap(struct kvm_vm *vm, size_t sz, gva_t min_gva)
1467 {
1468 	u64 pages = (sz + vm->page_size - 1) >> vm->page_shift;
1469 
1470 	/* Determine lowest permitted virtual page index. */
1471 	u64 pgidx_start = (min_gva + vm->page_size - 1) >> vm->page_shift;
1472 	if ((pgidx_start * vm->page_size) < min_gva)
1473 		goto no_va_found;
1474 
1475 	/* Loop over section with enough valid virtual page indexes. */
1476 	if (!sparsebit_is_set_num(vm->vpages_valid,
1477 		pgidx_start, pages))
1478 		pgidx_start = sparsebit_next_set_num(vm->vpages_valid,
1479 			pgidx_start, pages);
1480 	do {
1481 		/*
1482 		 * Are there enough unused virtual pages available at
1483 		 * the currently proposed starting virtual page index.
1484 		 * If not, adjust proposed starting index to next
1485 		 * possible.
1486 		 */
1487 		if (sparsebit_is_clear_num(vm->vpages_mapped,
1488 			pgidx_start, pages))
1489 			goto va_found;
1490 		pgidx_start = sparsebit_next_clear_num(vm->vpages_mapped,
1491 			pgidx_start, pages);
1492 		if (pgidx_start == 0)
1493 			goto no_va_found;
1494 
1495 		/*
1496 		 * If needed, adjust proposed starting virtual address,
1497 		 * to next range of valid virtual addresses.
1498 		 */
1499 		if (!sparsebit_is_set_num(vm->vpages_valid,
1500 			pgidx_start, pages)) {
1501 			pgidx_start = sparsebit_next_set_num(
1502 				vm->vpages_valid, pgidx_start, pages);
1503 			if (pgidx_start == 0)
1504 				goto no_va_found;
1505 		}
1506 	} while (pgidx_start != 0);
1507 
1508 no_va_found:
1509 	TEST_FAIL("No gva of specified pages available, pages: 0x%lx", pages);
1510 
1511 	/* NOT REACHED */
1512 	return -1;
1513 
1514 va_found:
1515 	TEST_ASSERT(sparsebit_is_set_num(vm->vpages_valid,
1516 		pgidx_start, pages),
1517 		"Unexpected, invalid virtual page index range,\n"
1518 		"  pgidx_start: 0x%lx\n"
1519 		"  pages: 0x%lx",
1520 		pgidx_start, pages);
1521 	TEST_ASSERT(sparsebit_is_clear_num(vm->vpages_mapped,
1522 		pgidx_start, pages),
1523 		"Unexpected, pages already mapped,\n"
1524 		"  pgidx_start: 0x%lx\n"
1525 		"  pages: 0x%lx",
1526 		pgidx_start, pages);
1527 
1528 	return pgidx_start * vm->page_size;
1529 }
1530 
1531 static gva_t ____vm_alloc(struct kvm_vm *vm, size_t sz, gva_t min_gva,
1532 			  enum kvm_mem_region_type type, bool protected)
1533 {
1534 	u64 pages = (sz >> vm->page_shift) + ((sz % vm->page_size) != 0);
1535 
1536 	virt_pgd_alloc(vm);
1537 	gpa_t gpa = __vm_phy_pages_alloc(vm, pages, type, protected);
1538 
1539 	/*
1540 	 * Find an unused range of virtual page addresses of at least
1541 	 * pages in length.
1542 	 */
1543 	gva_t gva_start = vm_unused_gva_gap(vm, sz, min_gva);
1544 
1545 	/* Map the virtual pages. */
1546 	for (gva_t gva = gva_start; pages > 0;
1547 		pages--, gva += vm->page_size, gpa += vm->page_size) {
1548 
1549 		virt_pg_map(vm, gva, gpa);
1550 	}
1551 
1552 	return gva_start;
1553 }
1554 
1555 gva_t __vm_alloc(struct kvm_vm *vm, size_t sz, gva_t min_gva,
1556 		 enum kvm_mem_region_type type)
1557 {
1558 	return ____vm_alloc(vm, sz, min_gva, type,
1559 			    vm_arch_has_protected_memory(vm));
1560 }
1561 
1562 gva_t vm_alloc_shared(struct kvm_vm *vm, size_t sz, gva_t min_gva,
1563 		      enum kvm_mem_region_type type)
1564 {
1565 	return ____vm_alloc(vm, sz, min_gva, type, false);
1566 }
1567 
1568 /*
1569  * Allocates at least sz bytes within the virtual address space of the VM
1570  * given by @vm.  The allocated bytes are mapped to a virtual address >= the
1571  * address given by @min_gva.  Note that each allocation uses a a unique set
1572  * of pages, with the minimum real allocation being at least a page. The
1573  * allocated physical space comes from the TEST_DATA memory region.
1574  */
1575 gva_t vm_alloc(struct kvm_vm *vm, size_t sz, gva_t min_gva)
1576 {
1577 	return __vm_alloc(vm, sz, min_gva, MEM_REGION_TEST_DATA);
1578 }
1579 
1580 gva_t vm_alloc_pages(struct kvm_vm *vm, int nr_pages)
1581 {
1582 	return vm_alloc(vm, nr_pages * getpagesize(), KVM_UTIL_MIN_VADDR);
1583 }
1584 
1585 gva_t __vm_alloc_page(struct kvm_vm *vm, enum kvm_mem_region_type type)
1586 {
1587 	return __vm_alloc(vm, getpagesize(), KVM_UTIL_MIN_VADDR, type);
1588 }
1589 
1590 gva_t vm_alloc_page(struct kvm_vm *vm)
1591 {
1592 	return vm_alloc_pages(vm, 1);
1593 }
1594 
1595 /*
1596  * Map a range of VM virtual address to the VM's physical address.
1597  *
1598  * Within the VM given by @vm, creates a virtual translation for @npages
1599  * starting at @gva to the page range starting at @gpa.
1600  */
1601 void virt_map(struct kvm_vm *vm, gva_t gva, gpa_t gpa, unsigned int npages)
1602 {
1603 	size_t page_size = vm->page_size;
1604 	size_t size = npages * page_size;
1605 
1606 	TEST_ASSERT(gva + size > gva, "Vaddr overflow");
1607 	TEST_ASSERT(gpa + size > gpa, "Paddr overflow");
1608 
1609 	while (npages--) {
1610 		virt_pg_map(vm, gva, gpa);
1611 
1612 		gva += page_size;
1613 		gpa += page_size;
1614 	}
1615 }
1616 
1617 /*
1618  * Address VM Physical to Host Virtual
1619  *
1620  * Input Args:
1621  *   vm - Virtual Machine
1622  *   gpa - VM physical address
1623  *
1624  * Output Args: None
1625  *
1626  * Return:
1627  *   Equivalent host virtual address
1628  *
1629  * Locates the memory region containing the VM physical address given
1630  * by gpa, within the VM given by vm.  When found, the host virtual
1631  * address providing the memory to the vm physical address is returned.
1632  * A TEST_ASSERT failure occurs if no region containing gpa exists.
1633  */
1634 void *addr_gpa2hva(struct kvm_vm *vm, gpa_t gpa)
1635 {
1636 	struct userspace_mem_region *region;
1637 
1638 	gpa = vm_untag_gpa(vm, gpa);
1639 
1640 	region = userspace_mem_region_find(vm, gpa, gpa);
1641 	if (!region) {
1642 		TEST_FAIL("No vm physical memory at 0x%lx", gpa);
1643 		return NULL;
1644 	}
1645 
1646 	return (void *)((uintptr_t)region->host_mem
1647 		+ (gpa - region->region.guest_phys_addr));
1648 }
1649 
1650 /*
1651  * Address Host Virtual to VM Physical
1652  *
1653  * Input Args:
1654  *   vm - Virtual Machine
1655  *   hva - Host virtual address
1656  *
1657  * Output Args: None
1658  *
1659  * Return:
1660  *   Equivalent VM physical address
1661  *
1662  * Locates the memory region containing the host virtual address given
1663  * by hva, within the VM given by vm.  When found, the equivalent
1664  * VM physical address is returned. A TEST_ASSERT failure occurs if no
1665  * region containing hva exists.
1666  */
1667 gpa_t addr_hva2gpa(struct kvm_vm *vm, void *hva)
1668 {
1669 	struct rb_node *node;
1670 
1671 	for (node = vm->regions.hva_tree.rb_node; node; ) {
1672 		struct userspace_mem_region *region =
1673 			container_of(node, struct userspace_mem_region, hva_node);
1674 
1675 		if (hva >= region->host_mem) {
1676 			if (hva <= (region->host_mem
1677 				+ region->region.memory_size - 1))
1678 				return (gpa_t)((uintptr_t)
1679 					region->region.guest_phys_addr
1680 					+ (hva - (uintptr_t)region->host_mem));
1681 
1682 			node = node->rb_right;
1683 		} else
1684 			node = node->rb_left;
1685 	}
1686 
1687 	TEST_FAIL("No mapping to a guest physical address, hva: %p", hva);
1688 	return -1;
1689 }
1690 
1691 /*
1692  * Address VM physical to Host Virtual *alias*.
1693  *
1694  * Input Args:
1695  *   vm - Virtual Machine
1696  *   gpa - VM physical address
1697  *
1698  * Output Args: None
1699  *
1700  * Return:
1701  *   Equivalent address within the host virtual *alias* area, or NULL
1702  *   (without failing the test) if the guest memory is not shared (so
1703  *   no alias exists).
1704  *
1705  * Create a writable, shared virtual=>physical alias for the specific GPA.
1706  * The primary use case is to allow the host selftest to manipulate guest
1707  * memory without mapping said memory in the guest's address space. And, for
1708  * userfaultfd-based demand paging, to do so without triggering userfaults.
1709  */
1710 void *addr_gpa2alias(struct kvm_vm *vm, gpa_t gpa)
1711 {
1712 	struct userspace_mem_region *region;
1713 	uintptr_t offset;
1714 
1715 	region = userspace_mem_region_find(vm, gpa, gpa);
1716 	if (!region)
1717 		return NULL;
1718 
1719 	if (!region->host_alias)
1720 		return NULL;
1721 
1722 	offset = gpa - region->region.guest_phys_addr;
1723 	return (void *) ((uintptr_t) region->host_alias + offset);
1724 }
1725 
1726 int kvm_gpa_to_guest_memfd(struct kvm_vm *vm, gpa_t gpa, off_t *fd_offset,
1727 			   size_t *nr_bytes)
1728 {
1729 	struct userspace_mem_region *region;
1730 	gpa_t gpa_offset;
1731 
1732 	region = userspace_mem_region_find(vm, gpa, gpa);
1733 	TEST_ASSERT(region && region->region.flags & KVM_MEM_GUEST_MEMFD,
1734 		    "guest_memfd memory region not found for GPA 0x%lx", gpa);
1735 
1736 	gpa_offset = gpa - region->region.guest_phys_addr;
1737 	*fd_offset = region->region.guest_memfd_offset + gpa_offset;
1738 	*nr_bytes = region->region.memory_size - gpa_offset;
1739 	return region->region.guest_memfd;
1740 }
1741 
1742 /* Create an interrupt controller chip for the specified VM. */
1743 void vm_create_irqchip(struct kvm_vm *vm)
1744 {
1745 	int r;
1746 
1747 	/*
1748 	 * Allocate a fully in-kernel IRQ chip by default, but fall back to a
1749 	 * split model (x86 only) if that fails (KVM x86 allows compiling out
1750 	 * support for KVM_CREATE_IRQCHIP).
1751 	 */
1752 	r = __vm_ioctl(vm, KVM_CREATE_IRQCHIP, NULL);
1753 	if (r && errno == ENOTTY && kvm_has_cap(KVM_CAP_SPLIT_IRQCHIP))
1754 		vm_enable_cap(vm, KVM_CAP_SPLIT_IRQCHIP, 24);
1755 	else
1756 		TEST_ASSERT_VM_VCPU_IOCTL(!r, KVM_CREATE_IRQCHIP, r, vm);
1757 
1758 	vm->has_irqchip = true;
1759 }
1760 
1761 int _vcpu_run(struct kvm_vcpu *vcpu)
1762 {
1763 	int rc;
1764 
1765 	do {
1766 		rc = __vcpu_run(vcpu);
1767 	} while (rc == -1 && errno == EINTR);
1768 
1769 	if (!rc)
1770 		assert_on_unhandled_exception(vcpu);
1771 
1772 	return rc;
1773 }
1774 
1775 /*
1776  * Invoke KVM_RUN on a vCPU until KVM returns something other than -EINTR.
1777  * Assert if the KVM returns an error (other than -EINTR).
1778  */
1779 void vcpu_run(struct kvm_vcpu *vcpu)
1780 {
1781 	int ret = _vcpu_run(vcpu);
1782 
1783 	TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_RUN, ret));
1784 }
1785 
1786 void vcpu_run_complete_io(struct kvm_vcpu *vcpu)
1787 {
1788 	int ret;
1789 
1790 	vcpu->run->immediate_exit = 1;
1791 	ret = __vcpu_run(vcpu);
1792 	vcpu->run->immediate_exit = 0;
1793 
1794 	TEST_ASSERT(ret == -1 && errno == EINTR,
1795 		    "KVM_RUN IOCTL didn't exit immediately, rc: %i, errno: %i",
1796 		    ret, errno);
1797 }
1798 
1799 /*
1800  * Get the list of guest registers which are supported for
1801  * KVM_GET_ONE_REG/KVM_SET_ONE_REG ioctls.  Returns a kvm_reg_list pointer,
1802  * it is the caller's responsibility to free the list.
1803  */
1804 struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vcpu *vcpu)
1805 {
1806 	struct kvm_reg_list reg_list_n = { .n = 0 }, *reg_list;
1807 	int ret;
1808 
1809 	ret = __vcpu_ioctl(vcpu, KVM_GET_REG_LIST, &reg_list_n);
1810 	TEST_ASSERT(ret == -1 && errno == E2BIG, "KVM_GET_REG_LIST n=0");
1811 
1812 	reg_list = calloc(1, sizeof(*reg_list) + reg_list_n.n * sizeof(__u64));
1813 	TEST_ASSERT(reg_list, "Failed to allocate reg_list");
1814 	reg_list->n = reg_list_n.n;
1815 	vcpu_ioctl(vcpu, KVM_GET_REG_LIST, reg_list);
1816 	return reg_list;
1817 }
1818 
1819 void *vcpu_map_dirty_ring(struct kvm_vcpu *vcpu)
1820 {
1821 	u32 page_size = getpagesize();
1822 	u32 size = vcpu->vm->dirty_ring_size;
1823 
1824 	TEST_ASSERT(size > 0, "Should enable dirty ring first");
1825 
1826 	if (!vcpu->dirty_gfns) {
1827 		void *addr;
1828 
1829 		addr = mmap(NULL, size, PROT_READ, MAP_PRIVATE, vcpu->fd,
1830 			    page_size * KVM_DIRTY_LOG_PAGE_OFFSET);
1831 		TEST_ASSERT(addr == MAP_FAILED, "Dirty ring mapped private");
1832 
1833 		addr = mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_PRIVATE, vcpu->fd,
1834 			    page_size * KVM_DIRTY_LOG_PAGE_OFFSET);
1835 		TEST_ASSERT(addr == MAP_FAILED, "Dirty ring mapped exec");
1836 
1837 		addr = __kvm_mmap(size, PROT_READ | PROT_WRITE, MAP_SHARED, vcpu->fd,
1838 				  page_size * KVM_DIRTY_LOG_PAGE_OFFSET);
1839 
1840 		vcpu->dirty_gfns = addr;
1841 		vcpu->dirty_gfns_count = size / sizeof(struct kvm_dirty_gfn);
1842 	}
1843 
1844 	return vcpu->dirty_gfns;
1845 }
1846 
1847 /*
1848  * Device Ioctl
1849  */
1850 
1851 int __kvm_has_device_attr(int dev_fd, u32 group, u64 attr)
1852 {
1853 	struct kvm_device_attr attribute = {
1854 		.group = group,
1855 		.attr = attr,
1856 		.flags = 0,
1857 	};
1858 
1859 	return ioctl(dev_fd, KVM_HAS_DEVICE_ATTR, &attribute);
1860 }
1861 
1862 int __kvm_test_create_device(struct kvm_vm *vm, u64 type)
1863 {
1864 	struct kvm_create_device create_dev = {
1865 		.type = type,
1866 		.flags = KVM_CREATE_DEVICE_TEST,
1867 	};
1868 
1869 	return __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev);
1870 }
1871 
1872 int __kvm_create_device(struct kvm_vm *vm, u64 type)
1873 {
1874 	struct kvm_create_device create_dev = {
1875 		.type = type,
1876 		.fd = -1,
1877 		.flags = 0,
1878 	};
1879 	int err;
1880 
1881 	err = __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev);
1882 	TEST_ASSERT(err <= 0, "KVM_CREATE_DEVICE shouldn't return a positive value");
1883 	return err ? : create_dev.fd;
1884 }
1885 
1886 int __kvm_device_attr_get(int dev_fd, u32 group, u64 attr, void *val)
1887 {
1888 	struct kvm_device_attr kvmattr = {
1889 		.group = group,
1890 		.attr = attr,
1891 		.flags = 0,
1892 		.addr = (uintptr_t)val,
1893 	};
1894 
1895 	return __kvm_ioctl(dev_fd, KVM_GET_DEVICE_ATTR, &kvmattr);
1896 }
1897 
1898 int __kvm_device_attr_set(int dev_fd, u32 group, u64 attr, void *val)
1899 {
1900 	struct kvm_device_attr kvmattr = {
1901 		.group = group,
1902 		.attr = attr,
1903 		.flags = 0,
1904 		.addr = (uintptr_t)val,
1905 	};
1906 
1907 	return __kvm_ioctl(dev_fd, KVM_SET_DEVICE_ATTR, &kvmattr);
1908 }
1909 
1910 /*
1911  * IRQ related functions.
1912  */
1913 
1914 int _kvm_irq_line(struct kvm_vm *vm, u32 irq, int level)
1915 {
1916 	struct kvm_irq_level irq_level = {
1917 		.irq    = irq,
1918 		.level  = level,
1919 	};
1920 
1921 	return __vm_ioctl(vm, KVM_IRQ_LINE, &irq_level);
1922 }
1923 
1924 void kvm_irq_line(struct kvm_vm *vm, u32 irq, int level)
1925 {
1926 	int ret = _kvm_irq_line(vm, irq, level);
1927 
1928 	TEST_ASSERT(ret >= 0, KVM_IOCTL_ERROR(KVM_IRQ_LINE, ret));
1929 }
1930 
1931 struct kvm_irq_routing *kvm_gsi_routing_create(void)
1932 {
1933 	struct kvm_irq_routing *routing;
1934 	size_t size;
1935 
1936 	size = sizeof(struct kvm_irq_routing);
1937 	/* Allocate space for the max number of entries: this wastes 196 KBs. */
1938 	size += KVM_MAX_IRQ_ROUTES * sizeof(struct kvm_irq_routing_entry);
1939 	routing = calloc(1, size);
1940 	assert(routing);
1941 
1942 	return routing;
1943 }
1944 
1945 void kvm_gsi_routing_irqchip_add(struct kvm_irq_routing *routing,
1946 		u32 gsi, u32 pin)
1947 {
1948 	int i;
1949 
1950 	assert(routing);
1951 	assert(routing->nr < KVM_MAX_IRQ_ROUTES);
1952 
1953 	i = routing->nr;
1954 	routing->entries[i].gsi = gsi;
1955 	routing->entries[i].type = KVM_IRQ_ROUTING_IRQCHIP;
1956 	routing->entries[i].flags = 0;
1957 	routing->entries[i].u.irqchip.irqchip = 0;
1958 	routing->entries[i].u.irqchip.pin = pin;
1959 	routing->nr++;
1960 }
1961 
1962 int _kvm_gsi_routing_write(struct kvm_vm *vm, struct kvm_irq_routing *routing)
1963 {
1964 	int ret;
1965 
1966 	assert(routing);
1967 	ret = __vm_ioctl(vm, KVM_SET_GSI_ROUTING, routing);
1968 	free(routing);
1969 
1970 	return ret;
1971 }
1972 
1973 void kvm_gsi_routing_write(struct kvm_vm *vm, struct kvm_irq_routing *routing)
1974 {
1975 	int ret;
1976 
1977 	ret = _kvm_gsi_routing_write(vm, routing);
1978 	TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_SET_GSI_ROUTING, ret));
1979 }
1980 
1981 /*
1982  * VM Dump
1983  *
1984  * Input Args:
1985  *   vm - Virtual Machine
1986  *   indent - Left margin indent amount
1987  *
1988  * Output Args:
1989  *   stream - Output FILE stream
1990  *
1991  * Return: None
1992  *
1993  * Dumps the current state of the VM given by vm, to the FILE stream
1994  * given by stream.
1995  */
1996 void vm_dump(FILE *stream, struct kvm_vm *vm, u8 indent)
1997 {
1998 	int ctr;
1999 	struct userspace_mem_region *region;
2000 	struct kvm_vcpu *vcpu;
2001 
2002 	fprintf(stream, "%*smode: 0x%x\n", indent, "", vm->mode);
2003 	fprintf(stream, "%*sfd: %i\n", indent, "", vm->fd);
2004 	fprintf(stream, "%*spage_size: 0x%x\n", indent, "", vm->page_size);
2005 	fprintf(stream, "%*sMem Regions:\n", indent, "");
2006 	hash_for_each(vm->regions.slot_hash, ctr, region, slot_node) {
2007 		fprintf(stream, "%*sguest_phys: 0x%lx size: 0x%lx "
2008 			"host_virt: %p\n", indent + 2, "",
2009 			(u64)region->region.guest_phys_addr,
2010 			(u64)region->region.memory_size,
2011 			region->host_mem);
2012 		fprintf(stream, "%*sunused_phy_pages: ", indent + 2, "");
2013 		sparsebit_dump(stream, region->unused_phy_pages, 0);
2014 		if (region->protected_phy_pages) {
2015 			fprintf(stream, "%*sprotected_phy_pages: ", indent + 2, "");
2016 			sparsebit_dump(stream, region->protected_phy_pages, 0);
2017 		}
2018 	}
2019 	fprintf(stream, "%*sMapped Virtual Pages:\n", indent, "");
2020 	sparsebit_dump(stream, vm->vpages_mapped, indent + 2);
2021 	fprintf(stream, "%*spgd_created: %u\n", indent, "",
2022 		vm->mmu.pgd_created);
2023 	if (vm->mmu.pgd_created) {
2024 		fprintf(stream, "%*sVirtual Translation Tables:\n",
2025 			indent + 2, "");
2026 		virt_dump(stream, vm, indent + 4);
2027 	}
2028 	fprintf(stream, "%*sVCPUs:\n", indent, "");
2029 
2030 	list_for_each_entry(vcpu, &vm->vcpus, list)
2031 		vcpu_dump(stream, vcpu, indent + 2);
2032 }
2033 
2034 #define KVM_EXIT_STRING(x) {KVM_EXIT_##x, #x}
2035 
2036 /* Known KVM exit reasons */
2037 static struct exit_reason {
2038 	unsigned int reason;
2039 	const char *name;
2040 } exit_reasons_known[] = {
2041 	KVM_EXIT_STRING(UNKNOWN),
2042 	KVM_EXIT_STRING(EXCEPTION),
2043 	KVM_EXIT_STRING(IO),
2044 	KVM_EXIT_STRING(HYPERCALL),
2045 	KVM_EXIT_STRING(DEBUG),
2046 	KVM_EXIT_STRING(HLT),
2047 	KVM_EXIT_STRING(MMIO),
2048 	KVM_EXIT_STRING(IRQ_WINDOW_OPEN),
2049 	KVM_EXIT_STRING(SHUTDOWN),
2050 	KVM_EXIT_STRING(FAIL_ENTRY),
2051 	KVM_EXIT_STRING(INTR),
2052 	KVM_EXIT_STRING(SET_TPR),
2053 	KVM_EXIT_STRING(TPR_ACCESS),
2054 	KVM_EXIT_STRING(S390_SIEIC),
2055 	KVM_EXIT_STRING(S390_RESET),
2056 	KVM_EXIT_STRING(DCR),
2057 	KVM_EXIT_STRING(NMI),
2058 	KVM_EXIT_STRING(INTERNAL_ERROR),
2059 	KVM_EXIT_STRING(OSI),
2060 	KVM_EXIT_STRING(PAPR_HCALL),
2061 	KVM_EXIT_STRING(S390_UCONTROL),
2062 	KVM_EXIT_STRING(WATCHDOG),
2063 	KVM_EXIT_STRING(S390_TSCH),
2064 	KVM_EXIT_STRING(EPR),
2065 	KVM_EXIT_STRING(SYSTEM_EVENT),
2066 	KVM_EXIT_STRING(S390_STSI),
2067 	KVM_EXIT_STRING(IOAPIC_EOI),
2068 	KVM_EXIT_STRING(HYPERV),
2069 	KVM_EXIT_STRING(ARM_NISV),
2070 	KVM_EXIT_STRING(X86_RDMSR),
2071 	KVM_EXIT_STRING(X86_WRMSR),
2072 	KVM_EXIT_STRING(DIRTY_RING_FULL),
2073 	KVM_EXIT_STRING(AP_RESET_HOLD),
2074 	KVM_EXIT_STRING(X86_BUS_LOCK),
2075 	KVM_EXIT_STRING(XEN),
2076 	KVM_EXIT_STRING(RISCV_SBI),
2077 	KVM_EXIT_STRING(RISCV_CSR),
2078 	KVM_EXIT_STRING(NOTIFY),
2079 	KVM_EXIT_STRING(LOONGARCH_IOCSR),
2080 	KVM_EXIT_STRING(MEMORY_FAULT),
2081 	KVM_EXIT_STRING(ARM_SEA),
2082 };
2083 
2084 /*
2085  * Exit Reason String
2086  *
2087  * Input Args:
2088  *   exit_reason - Exit reason
2089  *
2090  * Output Args: None
2091  *
2092  * Return:
2093  *   Constant string pointer describing the exit reason.
2094  *
2095  * Locates and returns a constant string that describes the KVM exit
2096  * reason given by exit_reason.  If no such string is found, a constant
2097  * string of "Unknown" is returned.
2098  */
2099 const char *exit_reason_str(unsigned int exit_reason)
2100 {
2101 	unsigned int n1;
2102 
2103 	for (n1 = 0; n1 < ARRAY_SIZE(exit_reasons_known); n1++) {
2104 		if (exit_reason == exit_reasons_known[n1].reason)
2105 			return exit_reasons_known[n1].name;
2106 	}
2107 
2108 	return "Unknown";
2109 }
2110 
2111 /*
2112  * Allocate contiguous (guest) physical pages in a given memory region, at or
2113  * above the minimum specified GPA.  If the memory is protected/private, also
2114  * add the allocated pages to the region's set of protected pages, e.g. so that
2115  * arch code knows which pages need to be encrypted when launching the VM.
2116  *
2117  * Note, success is guaranteed!
2118  */
2119 gpa_t ____vm_phy_pages_alloc(struct kvm_vm *vm, size_t nr_pages, gpa_t min_gpa,
2120 			     u32 memslot, bool protected, bool naturally_aligned)
2121 {
2122 	size_t alignment = naturally_aligned ? nr_pages : 1;
2123 	struct userspace_mem_region *region;
2124 	sparsebit_idx_t pg, base;
2125 
2126 	TEST_ASSERT(nr_pages, "Must allocate at least one page");
2127 
2128 	TEST_ASSERT((min_gpa % vm->page_size) == 0, "Min physical address "
2129 		"not divisible by page size.\n"
2130 		"  min_gpa: 0x%lx page_size: 0x%x",
2131 		min_gpa, vm->page_size);
2132 
2133 	region = memslot2region(vm, memslot);
2134 	TEST_ASSERT(!protected || region->protected_phy_pages,
2135 		    "Region doesn't support protected memory");
2136 
2137 	base = min_gpa >> vm->page_shift;
2138 again:
2139 	base = ALIGN(base, alignment);
2140 	for (pg = base; pg < base + nr_pages; ++pg) {
2141 		if (!sparsebit_is_set(region->unused_phy_pages, pg)) {
2142 			base = sparsebit_next_set(region->unused_phy_pages, pg);
2143 			if (!base)
2144 				goto enomem;
2145 			goto again;
2146 		}
2147 	}
2148 
2149 	for (pg = base; pg < base + nr_pages; ++pg) {
2150 		sparsebit_clear(region->unused_phy_pages, pg);
2151 		if (protected)
2152 			sparsebit_set(region->protected_phy_pages, pg);
2153 	}
2154 
2155 	return base * vm->page_size;
2156 
2157 enomem:
2158 	fprintf(stderr, "No guest physical page available, min_gpa: 0x%lx page_size: 0x%x memslot: %u\n",
2159 		min_gpa, vm->page_size, memslot);
2160 	fputs("---- vm dump ----\n", stderr);
2161 	vm_dump(stderr, vm, 2);
2162 	abort();
2163 	__builtin_unreachable();
2164 }
2165 
2166 __weak bool kvm_arch_needs_naturally_aligned_page_tables(void)
2167 {
2168 	return false;
2169 }
2170 
2171 gpa_t __vm_phy_pages_alloc(struct kvm_vm *vm, size_t nr_pages,
2172 			   enum kvm_mem_region_type type, bool protected)
2173 {
2174 	struct userspace_mem_region *region = vm_get_mem_region(vm, type);
2175 	bool naturally_aligned = false;
2176 	gpa_t min_gpa;
2177 
2178 	TEST_ASSERT(region, "No region for type '%u', memslot '%u'",
2179 		    type, vm->memslots[type]);
2180 
2181 	switch (type) {
2182 	case MEM_REGION_CODE:
2183 	case MEM_REGION_DATA:
2184 	case MEM_REGION_TEST_DATA:
2185 		/*
2186 		 * If the region is backed by the default memslot (id=0), use
2187 		 * selftests' hardcoded minimum PFN, otherwise use the base of
2188 		 * the custom memory slot that backs the region.
2189 		 */
2190 		if (!vm->memslots[type])
2191 			min_gpa = KVM_UTIL_MIN_PFN * vm->page_size;
2192 		else
2193 			min_gpa = region->region.guest_phys_addr;
2194 		break;
2195 	case MEM_REGION_PT:
2196 		min_gpa = KVM_GUEST_PAGE_TABLE_MIN_PADDR;
2197 		naturally_aligned = kvm_arch_needs_naturally_aligned_page_tables();
2198 		break;
2199 	case MEM_REGION_TEST_EXTRA:
2200 		min_gpa = region->region.guest_phys_addr;
2201 		break;
2202 	default:
2203 		TEST_FAIL("Invalid memory region type '%u'", type);
2204 		break;
2205 	}
2206 
2207 	return ____vm_phy_pages_alloc(vm, nr_pages, min_gpa, vm->memslots[type],
2208 				      protected, naturally_aligned);
2209 }
2210 
2211 /*
2212  * Address Guest Virtual to Host Virtual
2213  *
2214  * Input Args:
2215  *   vm - Virtual Machine
2216  *   gva - VM virtual address
2217  *
2218  * Output Args: None
2219  *
2220  * Return:
2221  *   Equivalent host virtual address
2222  */
2223 void *addr_gva2hva(struct kvm_vm *vm, gva_t gva)
2224 {
2225 	return addr_gpa2hva(vm, addr_gva2gpa(vm, gva));
2226 }
2227 
2228 unsigned long __weak vm_compute_max_gfn(struct kvm_vm *vm)
2229 {
2230 	return ((1ULL << vm->pa_bits) >> vm->page_shift) - 1;
2231 }
2232 
2233 static unsigned int vm_calc_num_pages(unsigned int num_pages,
2234 				      unsigned int page_shift,
2235 				      unsigned int new_page_shift,
2236 				      bool ceil)
2237 {
2238 	unsigned int n = 1 << (new_page_shift - page_shift);
2239 
2240 	if (page_shift >= new_page_shift)
2241 		return num_pages * (1 << (page_shift - new_page_shift));
2242 
2243 	return num_pages / n + !!(ceil && num_pages % n);
2244 }
2245 
2246 static inline int getpageshift(void)
2247 {
2248 	return __builtin_ffs(getpagesize()) - 1;
2249 }
2250 
2251 unsigned int
2252 vm_num_host_pages(enum vm_guest_mode mode, unsigned int num_guest_pages)
2253 {
2254 	return vm_calc_num_pages(num_guest_pages,
2255 				 vm_guest_mode_params[mode].page_shift,
2256 				 getpageshift(), true);
2257 }
2258 
2259 unsigned int
2260 vm_num_guest_pages(enum vm_guest_mode mode, unsigned int num_host_pages)
2261 {
2262 	return vm_calc_num_pages(num_host_pages, getpageshift(),
2263 				 vm_guest_mode_params[mode].page_shift, false);
2264 }
2265 
2266 unsigned int vm_calc_num_guest_pages(enum vm_guest_mode mode, size_t size)
2267 {
2268 	unsigned int n;
2269 	n = DIV_ROUND_UP(size, vm_guest_mode_params[mode].page_size);
2270 	return vm_adjust_num_guest_pages(mode, n);
2271 }
2272 
2273 /*
2274  * Read binary stats descriptors
2275  *
2276  * Input Args:
2277  *   stats_fd - the file descriptor for the binary stats file from which to read
2278  *   header - the binary stats metadata header corresponding to the given FD
2279  *
2280  * Output Args: None
2281  *
2282  * Return:
2283  *   A pointer to a newly allocated series of stat descriptors.
2284  *   Caller is responsible for freeing the returned kvm_stats_desc.
2285  *
2286  * Read the stats descriptors from the binary stats interface.
2287  */
2288 struct kvm_stats_desc *read_stats_descriptors(int stats_fd,
2289 					      struct kvm_stats_header *header)
2290 {
2291 	struct kvm_stats_desc *stats_desc;
2292 	ssize_t desc_size, total_size, ret;
2293 
2294 	desc_size = get_stats_descriptor_size(header);
2295 	total_size = header->num_desc * desc_size;
2296 
2297 	stats_desc = calloc(header->num_desc, desc_size);
2298 	TEST_ASSERT(stats_desc, "Allocate memory for stats descriptors");
2299 
2300 	ret = pread(stats_fd, stats_desc, total_size, header->desc_offset);
2301 	TEST_ASSERT(ret == total_size, "Read KVM stats descriptors");
2302 
2303 	return stats_desc;
2304 }
2305 
2306 /*
2307  * Read stat data for a particular stat
2308  *
2309  * Input Args:
2310  *   stats_fd - the file descriptor for the binary stats file from which to read
2311  *   header - the binary stats metadata header corresponding to the given FD
2312  *   desc - the binary stat metadata for the particular stat to be read
2313  *   max_elements - the maximum number of 8-byte values to read into data
2314  *
2315  * Output Args:
2316  *   data - the buffer into which stat data should be read
2317  *
2318  * Read the data values of a specified stat from the binary stats interface.
2319  */
2320 void read_stat_data(int stats_fd, struct kvm_stats_header *header,
2321 		    struct kvm_stats_desc *desc, u64 *data,
2322 		    size_t max_elements)
2323 {
2324 	size_t nr_elements = min_t(ssize_t, desc->size, max_elements);
2325 	size_t size = nr_elements * sizeof(*data);
2326 	ssize_t ret;
2327 
2328 	TEST_ASSERT(desc->size, "No elements in stat '%s'", desc->name);
2329 	TEST_ASSERT(max_elements, "Zero elements requested for stat '%s'", desc->name);
2330 
2331 	ret = pread(stats_fd, data, size,
2332 		    header->data_offset + desc->offset);
2333 
2334 	TEST_ASSERT(ret >= 0, "pread() failed on stat '%s', errno: %i (%s)",
2335 		    desc->name, errno, strerror(errno));
2336 	TEST_ASSERT(ret == size,
2337 		    "pread() on stat '%s' read %ld bytes, wanted %lu bytes",
2338 		    desc->name, size, ret);
2339 }
2340 
2341 void kvm_get_stat(struct kvm_binary_stats *stats, const char *name,
2342 		  u64 *data, size_t max_elements)
2343 {
2344 	struct kvm_stats_desc *desc;
2345 	size_t size_desc;
2346 	int i;
2347 
2348 	if (!stats->desc) {
2349 		read_stats_header(stats->fd, &stats->header);
2350 		stats->desc = read_stats_descriptors(stats->fd, &stats->header);
2351 	}
2352 
2353 	size_desc = get_stats_descriptor_size(&stats->header);
2354 
2355 	for (i = 0; i < stats->header.num_desc; ++i) {
2356 		desc = (void *)stats->desc + (i * size_desc);
2357 
2358 		if (strcmp(desc->name, name))
2359 			continue;
2360 
2361 		read_stat_data(stats->fd, &stats->header, desc, data, max_elements);
2362 		return;
2363 	}
2364 
2365 	TEST_FAIL("Unable to find stat '%s'", name);
2366 }
2367 
2368 __weak void kvm_arch_vm_post_create(struct kvm_vm *vm, unsigned int nr_vcpus)
2369 {
2370 }
2371 
2372 __weak void kvm_arch_vm_finalize_vcpus(struct kvm_vm *vm)
2373 {
2374 }
2375 
2376 __weak void kvm_arch_vm_release(struct kvm_vm *vm)
2377 {
2378 }
2379 
2380 __weak void kvm_selftest_arch_init(void)
2381 {
2382 }
2383 
2384 __thread sigjmp_buf expect_sigbus_jmpbuf;
2385 __thread volatile sig_atomic_t expecting_sigbus;
2386 
2387 void catchall_signal_handler(int signum)
2388 {
2389 	switch (signum) {
2390 	case SIGBUS: {
2391 		if (expecting_sigbus)
2392 			siglongjmp(expect_sigbus_jmpbuf, 1);
2393 
2394 		TEST_FAIL("Unexpected SIGBUS (%d)\n", signum);
2395 	}
2396 #define KVM_CASE_SIGNUM(sig)					\
2397 	case sig: TEST_FAIL("Unexpected " #sig " (%d)\n", signum)
2398 	KVM_CASE_SIGNUM(SIGSEGV);
2399 	KVM_CASE_SIGNUM(SIGILL);
2400 	KVM_CASE_SIGNUM(SIGFPE);
2401 	default:
2402 		TEST_FAIL("Unexpected signal %d\n", signum);
2403 	}
2404 }
2405 
2406 void __attribute((constructor)) kvm_selftest_init(void)
2407 {
2408 	struct sigaction sig_sa = {
2409 		.sa_handler = catchall_signal_handler,
2410 	};
2411 
2412 	/* Tell stdout not to buffer its content. */
2413 	setbuf(stdout, NULL);
2414 
2415 	expecting_sigbus = false;
2416 	sigaction(SIGBUS, &sig_sa, NULL);
2417 	sigaction(SIGSEGV, &sig_sa, NULL);
2418 	sigaction(SIGILL, &sig_sa, NULL);
2419 	sigaction(SIGFPE, &sig_sa, NULL);
2420 
2421 	srandom(time(0));
2422 	kvm_seed_rng(random());
2423 
2424 	kvm_has_gmem_attributes = kvm_has_cap(KVM_CAP_GUEST_MEMFD_MEMORY_ATTRIBUTES);
2425 
2426 	kvm_selftest_arch_init();
2427 }
2428 
2429 bool vm_is_gpa_protected(struct kvm_vm *vm, gpa_t gpa)
2430 {
2431 	sparsebit_idx_t pg = 0;
2432 	struct userspace_mem_region *region;
2433 
2434 	if (!vm_arch_has_protected_memory(vm))
2435 		return false;
2436 
2437 	region = userspace_mem_region_find(vm, gpa, gpa);
2438 	TEST_ASSERT(region, "No vm physical memory at 0x%lx", gpa);
2439 
2440 	pg = gpa >> vm->page_shift;
2441 	return sparsebit_is_set(region->protected_phy_pages, pg);
2442 }
2443 
2444 __weak bool kvm_arch_has_default_irqchip(void)
2445 {
2446 	return false;
2447 }
2448