Lines Matching full:region
178 * When phy_pages is non-zero, a memory region of phy_pages physical pages
289 struct userspace_mem_region *region; in kvm_vm_restart() local
295 list_for_each_entry(region, &vmp->userspace_mem_regions, list) { in kvm_vm_restart()
296 int ret = ioctl(vmp->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); in kvm_vm_restart()
301 ret, errno, region->region.slot, in kvm_vm_restart()
302 region->region.flags, in kvm_vm_restart()
303 region->region.guest_phys_addr, in kvm_vm_restart()
304 region->region.memory_size); in kvm_vm_restart()
332 * Userspace Memory Region Find
342 * Pointer to overlapping region, NULL if no such region.
344 * Searches for a region with any physical memory that overlaps with
348 * region exists.
353 struct userspace_mem_region *region; in userspace_mem_region_find() local
355 list_for_each_entry(region, &vm->userspace_mem_regions, list) { in userspace_mem_region_find()
356 uint64_t existing_start = region->region.guest_phys_addr; in userspace_mem_region_find()
357 uint64_t existing_end = region->region.guest_phys_addr in userspace_mem_region_find()
358 + region->region.memory_size - 1; in userspace_mem_region_find()
360 return region; in userspace_mem_region_find()
367 * KVM Userspace Memory Region Find
377 * Pointer to overlapping region, NULL if no such region.
386 struct userspace_mem_region *region; in kvm_userspace_memory_region_find() local
388 region = userspace_mem_region_find(vm, start, end); in kvm_userspace_memory_region_find()
389 if (!region) in kvm_userspace_memory_region_find()
392 return ®ion->region; in kvm_userspace_memory_region_find()
468 struct userspace_mem_region *region) in __vm_mem_region_delete() argument
472 list_del(®ion->list); in __vm_mem_region_delete()
474 region->region.memory_size = 0; in __vm_mem_region_delete()
475 ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); in __vm_mem_region_delete()
479 sparsebit_free(®ion->unused_phy_pages); in __vm_mem_region_delete()
480 ret = munmap(region->mmap_start, region->mmap_size); in __vm_mem_region_delete()
483 free(region); in __vm_mem_region_delete()
491 struct userspace_mem_region *region, *tmp; in kvm_vm_free() local
497 list_for_each_entry_safe(region, tmp, &vmp->userspace_mem_regions, list) in kvm_vm_free()
498 __vm_mem_region_delete(vmp, region); in kvm_vm_free()
581 * VM Userspace Memory Region Add
585 * backing_src - Storage source for this region.
588 * slot - KVM region slot
590 * flags - KVM memory region flags (e.g. KVM_MEM_LOG_DIRTY_PAGES)
598 * given by guest_paddr. The region is created with a KVM region slot
600 * region is created with the flags given by flags.
608 struct userspace_mem_region *region; in vm_userspace_mem_region_add() local
628 * Confirm a mem region with an overlapping address doesn't in vm_userspace_mem_region_add()
631 region = (struct userspace_mem_region *) userspace_mem_region_find( in vm_userspace_mem_region_add()
633 if (region != NULL) in vm_userspace_mem_region_add()
640 (uint64_t) region->region.guest_phys_addr, in vm_userspace_mem_region_add()
641 (uint64_t) region->region.memory_size); in vm_userspace_mem_region_add()
643 /* Confirm no region with the requested slot already exists. */ in vm_userspace_mem_region_add()
644 list_for_each_entry(region, &vm->userspace_mem_regions, list) { in vm_userspace_mem_region_add()
645 if (region->region.slot != slot) in vm_userspace_mem_region_add()
648 TEST_FAIL("A mem region with the requested slot " in vm_userspace_mem_region_add()
653 region->region.slot, in vm_userspace_mem_region_add()
654 (uint64_t) region->region.guest_phys_addr, in vm_userspace_mem_region_add()
655 (uint64_t) region->region.memory_size); in vm_userspace_mem_region_add()
658 /* Allocate and initialize new mem region structure. */ in vm_userspace_mem_region_add()
659 region = calloc(1, sizeof(*region)); in vm_userspace_mem_region_add()
660 TEST_ASSERT(region != NULL, "Insufficient Memory"); in vm_userspace_mem_region_add()
661 region->mmap_size = npages * vm->page_size; in vm_userspace_mem_region_add()
675 region->mmap_size += alignment; in vm_userspace_mem_region_add()
677 region->mmap_start = mmap(NULL, region->mmap_size, in vm_userspace_mem_region_add()
682 TEST_ASSERT(region->mmap_start != MAP_FAILED, in vm_userspace_mem_region_add()
684 region->mmap_start, errno); in vm_userspace_mem_region_add()
687 region->host_mem = align(region->mmap_start, alignment); in vm_userspace_mem_region_add()
701 ret = madvise(region->host_mem, npages * vm->page_size, in vm_userspace_mem_region_add()
704 region->host_mem, npages * vm->page_size, src_type); in vm_userspace_mem_region_add()
708 region->unused_phy_pages = sparsebit_alloc(); in vm_userspace_mem_region_add()
709 sparsebit_set_num(region->unused_phy_pages, in vm_userspace_mem_region_add()
711 region->region.slot = slot; in vm_userspace_mem_region_add()
712 region->region.flags = flags; in vm_userspace_mem_region_add()
713 region->region.guest_phys_addr = guest_paddr; in vm_userspace_mem_region_add()
714 region->region.memory_size = npages * vm->page_size; in vm_userspace_mem_region_add()
715 region->region.userspace_addr = (uintptr_t) region->host_mem; in vm_userspace_mem_region_add()
716 ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); in vm_userspace_mem_region_add()
722 guest_paddr, (uint64_t) region->region.memory_size); in vm_userspace_mem_region_add()
725 list_add(®ion->list, &vm->userspace_mem_regions); in vm_userspace_mem_region_add()
729 * Memslot to region
738 * Pointer to memory region structure that describe memory region
740 * on error (e.g. currently no memory region using memslot as a KVM
746 struct userspace_mem_region *region; in memslot2region() local
748 list_for_each_entry(region, &vm->userspace_mem_regions, list) { in memslot2region()
749 if (region->region.slot == memslot) in memslot2region()
750 return region; in memslot2region()
753 fprintf(stderr, "No mem region with the requested slot found,\n" in memslot2region()
757 TEST_FAIL("Mem region not found"); in memslot2region()
762 * VM Memory Region Flags Set
772 * Sets the flags of the memory region specified by the value of slot,
778 struct userspace_mem_region *region; in vm_mem_region_set_flags() local
780 region = memslot2region(vm, slot); in vm_mem_region_set_flags()
782 region->region.flags = flags; in vm_mem_region_set_flags()
784 ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); in vm_mem_region_set_flags()
792 * VM Memory Region Move
796 * slot - Slot of the memory region to move
803 * Change the gpa of a memory region.
807 struct userspace_mem_region *region; in vm_mem_region_move() local
810 region = memslot2region(vm, slot); in vm_mem_region_move()
812 region->region.guest_phys_addr = new_gpa; in vm_mem_region_move()
814 ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); in vm_mem_region_move()
822 * VM Memory Region Delete
826 * slot - Slot of the memory region to delete
832 * Delete a memory region.
1010 * data_memslot - Memory region slot for data pages
1011 * pgd_memslot - Memory region slot for new virtual translation tables
1062 * pgd_memslot - Memory region slot for new virtual translation tables
1099 * Locates the memory region containing the VM physical address given
1102 * A TEST_ASSERT failure occurs if no region containing gpa exists.
1106 struct userspace_mem_region *region; in addr_gpa2hva() local
1108 list_for_each_entry(region, &vm->userspace_mem_regions, list) { in addr_gpa2hva()
1109 if ((gpa >= region->region.guest_phys_addr) in addr_gpa2hva()
1110 && (gpa <= (region->region.guest_phys_addr in addr_gpa2hva()
1111 + region->region.memory_size - 1))) in addr_gpa2hva()
1112 return (void *) ((uintptr_t) region->host_mem in addr_gpa2hva()
1113 + (gpa - region->region.guest_phys_addr)); in addr_gpa2hva()
1132 * Locates the memory region containing the host virtual address given
1135 * region containing hva exists.
1139 struct userspace_mem_region *region; in addr_hva2gpa() local
1141 list_for_each_entry(region, &vm->userspace_mem_regions, list) { in addr_hva2gpa()
1142 if ((hva >= region->host_mem) in addr_hva2gpa()
1143 && (hva <= (region->host_mem in addr_hva2gpa()
1144 + region->region.memory_size - 1))) in addr_hva2gpa()
1146 region->region.guest_phys_addr in addr_hva2gpa()
1147 + (hva - (uintptr_t) region->host_mem)); in addr_hva2gpa()
1602 struct userspace_mem_region *region; in vm_dump() local
1609 list_for_each_entry(region, &vm->userspace_mem_regions, list) { in vm_dump()
1612 (uint64_t) region->region.guest_phys_addr, in vm_dump()
1613 (uint64_t) region->region.memory_size, in vm_dump()
1614 region->host_mem); in vm_dump()
1616 sparsebit_dump(stream, region->unused_phy_pages, 0); in vm_dump()
1696 * memslot - Memory region to allocate page from
1711 struct userspace_mem_region *region; in vm_phy_pages_alloc() local
1721 region = memslot2region(vm, memslot); in vm_phy_pages_alloc()
1726 if (!sparsebit_is_set(region->unused_phy_pages, pg)) { in vm_phy_pages_alloc()
1727 base = pg = sparsebit_next_set(region->unused_phy_pages, pg); in vm_phy_pages_alloc()
1743 sparsebit_clear(region->unused_phy_pages, pg); in vm_phy_pages_alloc()