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, ®ion->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(®ion->gpa_node, &vm->regions.gpa_tree); 885 rb_erase(®ion->hva_node, &vm->regions.hva_tree); 886 hash_del(®ion->slot_node); 887 888 sparsebit_free(®ion->unused_phy_pages); 889 sparsebit_free(®ion->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(®ion->gpa_node, parent, cur); 968 rb_insert_color(®ion->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(®ion->hva_node, parent, cur); 993 rb_insert_color(®ion->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, ®ion); 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, ®ion); 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, ®ion->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, ®ion->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, ®ion->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, ®ion->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, ®ion->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, ®ion->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, ®_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