Lines Matching refs:region
257 struct userspace_mem_region *region; in kvm_vm_restart() local
263 for (region = vmp->userspace_mem_region_head; region; in kvm_vm_restart()
264 region = region->next) { in kvm_vm_restart()
265 int ret = ioctl(vmp->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); in kvm_vm_restart()
270 ret, errno, region->region.slot, in kvm_vm_restart()
271 region->region.flags, in kvm_vm_restart()
272 region->region.guest_phys_addr, in kvm_vm_restart()
273 region->region.memory_size); in kvm_vm_restart()
322 struct userspace_mem_region *region; in userspace_mem_region_find() local
324 for (region = vm->userspace_mem_region_head; region; in userspace_mem_region_find()
325 region = region->next) { in userspace_mem_region_find()
326 uint64_t existing_start = region->region.guest_phys_addr; in userspace_mem_region_find()
327 uint64_t existing_end = region->region.guest_phys_addr in userspace_mem_region_find()
328 + region->region.memory_size - 1; in userspace_mem_region_find()
330 return region; in userspace_mem_region_find()
356 struct userspace_mem_region *region; in kvm_userspace_memory_region_find() local
358 region = userspace_mem_region_find(vm, start, end); in kvm_userspace_memory_region_find()
359 if (!region) in kvm_userspace_memory_region_find()
362 return ®ion->region; in kvm_userspace_memory_region_find()
455 struct userspace_mem_region *region in kvm_vm_free() local
458 region->region.memory_size = 0; in kvm_vm_free()
460 ®ion->region); in kvm_vm_free()
464 vmp->userspace_mem_region_head = region->next; in kvm_vm_free()
465 sparsebit_free(®ion->unused_phy_pages); in kvm_vm_free()
466 ret = munmap(region->mmap_start, region->mmap_size); in kvm_vm_free()
470 free(region); in kvm_vm_free()
581 struct userspace_mem_region *region; in vm_userspace_mem_region_add() local
600 region = (struct userspace_mem_region *) userspace_mem_region_find( in vm_userspace_mem_region_add()
602 if (region != NULL) in vm_userspace_mem_region_add()
609 (uint64_t) region->region.guest_phys_addr, in vm_userspace_mem_region_add()
610 (uint64_t) region->region.memory_size); in vm_userspace_mem_region_add()
613 for (region = vm->userspace_mem_region_head; region; in vm_userspace_mem_region_add()
614 region = region->next) { in vm_userspace_mem_region_add()
615 if (region->region.slot == slot) in vm_userspace_mem_region_add()
618 if (region != NULL) in vm_userspace_mem_region_add()
624 region->region.slot, in vm_userspace_mem_region_add()
625 (uint64_t) region->region.guest_phys_addr, in vm_userspace_mem_region_add()
626 (uint64_t) region->region.memory_size); in vm_userspace_mem_region_add()
629 region = calloc(1, sizeof(*region)); in vm_userspace_mem_region_add()
630 TEST_ASSERT(region != NULL, "Insufficient Memory"); in vm_userspace_mem_region_add()
631 region->mmap_size = npages * vm->page_size; in vm_userspace_mem_region_add()
645 region->mmap_size += alignment; in vm_userspace_mem_region_add()
647 region->mmap_start = mmap(NULL, region->mmap_size, in vm_userspace_mem_region_add()
652 TEST_ASSERT(region->mmap_start != MAP_FAILED, in vm_userspace_mem_region_add()
654 region->mmap_start, errno); in vm_userspace_mem_region_add()
657 region->host_mem = align(region->mmap_start, alignment); in vm_userspace_mem_region_add()
661 ret = madvise(region->host_mem, npages * vm->page_size, in vm_userspace_mem_region_add()
667 region->host_mem, npages * vm->page_size, src_type); in vm_userspace_mem_region_add()
670 region->unused_phy_pages = sparsebit_alloc(); in vm_userspace_mem_region_add()
671 sparsebit_set_num(region->unused_phy_pages, in vm_userspace_mem_region_add()
673 region->region.slot = slot; in vm_userspace_mem_region_add()
674 region->region.flags = flags; in vm_userspace_mem_region_add()
675 region->region.guest_phys_addr = guest_paddr; in vm_userspace_mem_region_add()
676 region->region.memory_size = npages * vm->page_size; in vm_userspace_mem_region_add()
677 region->region.userspace_addr = (uintptr_t) region->host_mem; in vm_userspace_mem_region_add()
678 ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); in vm_userspace_mem_region_add()
684 guest_paddr, (uint64_t) region->region.memory_size); in vm_userspace_mem_region_add()
688 vm->userspace_mem_region_head->prev = region; in vm_userspace_mem_region_add()
689 region->next = vm->userspace_mem_region_head; in vm_userspace_mem_region_add()
690 vm->userspace_mem_region_head = region; in vm_userspace_mem_region_add()
711 struct userspace_mem_region *region; in memslot2region() local
713 for (region = vm->userspace_mem_region_head; region; in memslot2region()
714 region = region->next) { in memslot2region()
715 if (region->region.slot == memslot) in memslot2region()
718 if (region == NULL) { in memslot2region()
726 return region; in memslot2region()
746 struct userspace_mem_region *region; in vm_mem_region_set_flags() local
748 region = memslot2region(vm, slot); in vm_mem_region_set_flags()
750 region->region.flags = flags; in vm_mem_region_set_flags()
752 ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); in vm_mem_region_set_flags()
1030 struct userspace_mem_region *region; in addr_gpa2hva() local
1031 for (region = vm->userspace_mem_region_head; region; in addr_gpa2hva()
1032 region = region->next) { in addr_gpa2hva()
1033 if ((gpa >= region->region.guest_phys_addr) in addr_gpa2hva()
1034 && (gpa <= (region->region.guest_phys_addr in addr_gpa2hva()
1035 + region->region.memory_size - 1))) in addr_gpa2hva()
1036 return (void *) ((uintptr_t) region->host_mem in addr_gpa2hva()
1037 + (gpa - region->region.guest_phys_addr)); in addr_gpa2hva()
1063 struct userspace_mem_region *region; in addr_hva2gpa() local
1064 for (region = vm->userspace_mem_region_head; region; in addr_hva2gpa()
1065 region = region->next) { in addr_hva2gpa()
1066 if ((hva >= region->host_mem) in addr_hva2gpa()
1067 && (hva <= (region->host_mem in addr_hva2gpa()
1068 + region->region.memory_size - 1))) in addr_hva2gpa()
1070 region->region.guest_phys_addr in addr_hva2gpa()
1071 + (hva - (uintptr_t) region->host_mem)); in addr_hva2gpa()
1450 struct userspace_mem_region *region; in vm_dump() local
1457 for (region = vm->userspace_mem_region_head; region; in vm_dump()
1458 region = region->next) { in vm_dump()
1461 (uint64_t) region->region.guest_phys_addr, in vm_dump()
1462 (uint64_t) region->region.memory_size, in vm_dump()
1463 region->host_mem); in vm_dump()
1465 sparsebit_dump(stream, region->unused_phy_pages, 0); in vm_dump()
1560 struct userspace_mem_region *region; in vm_phy_pages_alloc() local
1570 region = memslot2region(vm, memslot); in vm_phy_pages_alloc()
1575 if (!sparsebit_is_set(region->unused_phy_pages, pg)) { in vm_phy_pages_alloc()
1576 base = pg = sparsebit_next_set(region->unused_phy_pages, pg); in vm_phy_pages_alloc()
1592 sparsebit_clear(region->unused_phy_pages, pg); in vm_phy_pages_alloc()