Lines Matching full:vm

93 /* VM Enable Capability
96 * vm - Virtual Machine
103 * Enables a capability (KVM_CAP_*) on the VM.
105 int vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap *cap) in vm_enable_cap() argument
109 ret = ioctl(vm->fd, KVM_ENABLE_CAP, cap); in vm_enable_cap()
119 * vm - Virtual Machine
129 int vcpu_enable_cap(struct kvm_vm *vm, uint32_t vcpu_id, in vcpu_enable_cap() argument
132 struct vcpu *vcpu = vcpu_find(vm, vcpu_id); in vcpu_enable_cap()
144 void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size) in vm_enable_dirty_ring() argument
150 vm_enable_cap(vm, &cap); in vm_enable_dirty_ring()
151 vm->dirty_ring_size = ring_size; in vm_enable_dirty_ring()
154 static void vm_open(struct kvm_vm *vm, int perm) in vm_open() argument
156 vm->kvm_fd = _open_kvm_dev_path_or_exit(perm); in vm_open()
163 vm->fd = ioctl(vm->kvm_fd, KVM_CREATE_VM, vm->type); in vm_open()
164 TEST_ASSERT(vm->fd >= 0, "KVM_CREATE_VM ioctl failed, " in vm_open()
165 "rc: %i errno: %i", vm->fd, errno); in vm_open()
204 * VM Create
207 * mode - VM Mode (e.g. VM_MODE_P52V48_4K)
214 * Pointer to opaque structure that describes the created VM.
216 * Creates a VM with the mode specified by mode (e.g. VM_MODE_P52V48_4K).
219 * descriptor to control the created VM is created with the permissions
224 struct kvm_vm *vm; in vm_create() local
229 vm = calloc(1, sizeof(*vm)); in vm_create()
230 TEST_ASSERT(vm != NULL, "Insufficient Memory"); in vm_create()
232 INIT_LIST_HEAD(&vm->vcpus); in vm_create()
233 vm->regions.gpa_tree = RB_ROOT; in vm_create()
234 vm->regions.hva_tree = RB_ROOT; in vm_create()
235 hash_init(vm->regions.slot_hash); in vm_create()
237 vm->mode = mode; in vm_create()
238 vm->type = 0; in vm_create()
240 vm->pa_bits = vm_guest_mode_params[mode].pa_bits; in vm_create()
241 vm->va_bits = vm_guest_mode_params[mode].va_bits; in vm_create()
242 vm->page_size = vm_guest_mode_params[mode].page_size; in vm_create()
243 vm->page_shift = vm_guest_mode_params[mode].page_shift; in vm_create()
246 switch (vm->mode) { in vm_create()
248 vm->pgtable_levels = 4; in vm_create()
251 vm->pgtable_levels = 3; in vm_create()
254 vm->pgtable_levels = 4; in vm_create()
257 vm->pgtable_levels = 3; in vm_create()
260 vm->pgtable_levels = 4; in vm_create()
263 vm->pgtable_levels = 3; in vm_create()
267 kvm_get_cpu_address_width(&vm->pa_bits, &vm->va_bits); in vm_create()
269 * Ignore KVM support for 5-level paging (vm->va_bits == 57), in vm_create()
273 TEST_ASSERT(vm->va_bits == 48 || vm->va_bits == 57, in vm_create()
275 vm->va_bits); in vm_create()
277 vm->pa_bits); in vm_create()
278 vm->pgtable_levels = 4; in vm_create()
279 vm->va_bits = 48; in vm_create()
285 vm->pgtable_levels = 5; in vm_create()
288 vm->pgtable_levels = 5; in vm_create()
295 if (vm->pa_bits != 40) in vm_create()
296 vm->type = KVM_VM_TYPE_ARM_IPA_SIZE(vm->pa_bits); in vm_create()
299 vm_open(vm, perm); in vm_create()
302 vm->vpages_valid = sparsebit_alloc(); in vm_create()
303 sparsebit_set_num(vm->vpages_valid, in vm_create()
304 0, (1ULL << (vm->va_bits - 1)) >> vm->page_shift); in vm_create()
305 sparsebit_set_num(vm->vpages_valid, in vm_create()
306 (~((1ULL << (vm->va_bits - 1)) - 1)) >> vm->page_shift, in vm_create()
307 (1ULL << (vm->va_bits - 1)) >> vm->page_shift); in vm_create()
310 vm->max_gfn = ((1ULL << vm->pa_bits) >> vm->page_shift) - 1; in vm_create()
313 vm->vpages_mapped = sparsebit_alloc(); in vm_create()
315 vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, in vm_create()
318 return vm; in vm_create()
322 * VM Create with customized parameters
325 * mode - VM Mode (e.g. VM_MODE_P52V48_4K)
336 * Pointer to opaque structure that describes the created VM.
338 * Creates a VM with the mode specified by mode (e.g. VM_MODE_P52V48_4K),
349 struct kvm_vm *vm; in vm_create_with_vcpus() local
371 vm = vm_create(mode, pages, O_RDWR); in vm_create_with_vcpus()
373 kvm_vm_elf_load(vm, program_invocation_name); in vm_create_with_vcpus()
376 vm_create_irqchip(vm); in vm_create_with_vcpus()
382 vm_vcpu_add_default(vm, vcpuid, guest_code); in vm_create_with_vcpus()
385 return vm; in vm_create_with_vcpus()
404 * VM Restart
407 * vm - VM that has been released before
412 * Reopens the file descriptors associated to the VM and reinstates the
438 void kvm_vm_get_dirty_log(struct kvm_vm *vm, int slot, void *log) in kvm_vm_get_dirty_log() argument
443 ret = ioctl(vm->fd, KVM_GET_DIRTY_LOG, &args); in kvm_vm_get_dirty_log()
448 void kvm_vm_clear_dirty_log(struct kvm_vm *vm, int slot, void *log, in kvm_vm_clear_dirty_log() argument
456 ret = ioctl(vm->fd, KVM_CLEAR_DIRTY_LOG, &args); in kvm_vm_clear_dirty_log()
461 uint32_t kvm_vm_reset_dirty_ring(struct kvm_vm *vm) in kvm_vm_reset_dirty_ring() argument
463 return ioctl(vm->fd, KVM_RESET_DIRTY_RINGS); in kvm_vm_reset_dirty_ring()
470 * vm - Virtual Machine
471 * start - Starting VM physical address
472 * end - Ending VM physical address, inclusive.
486 userspace_mem_region_find(struct kvm_vm *vm, uint64_t start, uint64_t end) in userspace_mem_region_find() argument
490 for (node = vm->regions.gpa_tree.rb_node; node; ) { in userspace_mem_region_find()
512 * vm - Virtual Machine
513 * start - Starting VM physical address
514 * end - Ending VM physical address, inclusive.
525 kvm_userspace_memory_region_find(struct kvm_vm *vm, uint64_t start, in kvm_userspace_memory_region_find() argument
530 region = userspace_mem_region_find(vm, start, end); in kvm_userspace_memory_region_find()
541 * vm - Virtual Machine
550 * returns a pointer to it. Returns NULL if the VM doesn't contain a VCPU
553 struct vcpu *vcpu_find(struct kvm_vm *vm, uint32_t vcpuid) in vcpu_find() argument
557 list_for_each_entry(vcpu, &vm->vcpus, list) { in vcpu_find()
566 * VM VCPU Remove
575 * Removes a vCPU from a VM and frees its resources.
577 static void vm_vcpu_rm(struct kvm_vm *vm, struct vcpu *vcpu) in vm_vcpu_rm() argument
582 ret = munmap(vcpu->dirty_gfns, vm->dirty_ring_size); in vm_vcpu_rm()
608 TEST_ASSERT(ret == 0, "Close of vm fd failed,\n" in kvm_vm_release()
616 static void __vm_mem_region_delete(struct kvm_vm *vm, in __vm_mem_region_delete() argument
623 rb_erase(&region->gpa_node, &vm->regions.gpa_tree); in __vm_mem_region_delete()
624 rb_erase(&region->hva_node, &vm->regions.hva_tree); in __vm_mem_region_delete()
629 ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, &region->region); in __vm_mem_region_delete()
641 * Destroys and frees the VM pointed to by vmp.
662 /* Free the structure describing the VM. */ in kvm_vm_free()
671 * vm - Virtual Machine
689 int kvm_memcmp_hva_gva(void *hva, struct kvm_vm *vm, vm_vaddr_t gva, size_t len) in kvm_memcmp_hva_gva() argument
704 uintptr_t ptr2 = (uintptr_t)addr_gva2hva(vm, gva + offset); in kvm_memcmp_hva_gva()
711 if ((ptr1 >> vm->page_shift) != ((ptr1 + amt) >> vm->page_shift)) in kvm_memcmp_hva_gva()
712 amt = vm->page_size - (ptr1 % vm->page_size); in kvm_memcmp_hva_gva()
713 if ((ptr2 >> vm->page_shift) != ((ptr2 + amt) >> vm->page_shift)) in kvm_memcmp_hva_gva()
714 amt = vm->page_size - (ptr2 % vm->page_size); in kvm_memcmp_hva_gva()
716 assert((ptr1 >> vm->page_shift) == ((ptr1 + amt - 1) >> vm->page_shift)); in kvm_memcmp_hva_gva()
717 assert((ptr2 >> vm->page_shift) == ((ptr2 + amt - 1) >> vm->page_shift)); in kvm_memcmp_hva_gva()
788 * VM Userspace Memory Region Add
791 * vm - Virtual Machine
804 * and maps it to the VM specified by vm, at a starting physical address
809 void vm_userspace_mem_region_add(struct kvm_vm *vm, in vm_userspace_mem_region_add() argument
819 TEST_ASSERT(vm_adjust_num_guest_pages(vm->mode, npages) == npages, in vm_userspace_mem_region_add()
821 "Try npages=%d", vm_adjust_num_guest_pages(vm->mode, npages)); in vm_userspace_mem_region_add()
823 TEST_ASSERT((guest_paddr % vm->page_size) == 0, "Guest physical " in vm_userspace_mem_region_add()
825 " guest_paddr: 0x%lx vm->page_size: 0x%x", in vm_userspace_mem_region_add()
826 guest_paddr, vm->page_size); in vm_userspace_mem_region_add()
827 TEST_ASSERT((((guest_paddr >> vm->page_shift) + npages) - 1) in vm_userspace_mem_region_add()
828 <= vm->max_gfn, "Physical range beyond maximum " in vm_userspace_mem_region_add()
831 " vm->max_gfn: 0x%lx vm->page_size: 0x%x", in vm_userspace_mem_region_add()
832 guest_paddr, npages, vm->max_gfn, vm->page_size); in vm_userspace_mem_region_add()
839 vm, guest_paddr, (guest_paddr + npages * vm->page_size) - 1); in vm_userspace_mem_region_add()
846 guest_paddr, npages, vm->page_size, in vm_userspace_mem_region_add()
851 hash_for_each_possible(vm->regions.slot_hash, region, slot_node, in vm_userspace_mem_region_add()
869 region->mmap_size = npages * vm->page_size; in vm_userspace_mem_region_add()
919 ret = madvise(region->host_mem, npages * vm->page_size, in vm_userspace_mem_region_add()
922 region->host_mem, npages * vm->page_size, in vm_userspace_mem_region_add()
928 guest_paddr >> vm->page_shift, npages); in vm_userspace_mem_region_add()
932 region->region.memory_size = npages * vm->page_size; in vm_userspace_mem_region_add()
934 ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, &region->region); in vm_userspace_mem_region_add()
943 vm_userspace_mem_region_gpa_insert(&vm->regions.gpa_tree, region); in vm_userspace_mem_region_add()
944 vm_userspace_mem_region_hva_insert(&vm->regions.hva_tree, region); in vm_userspace_mem_region_add()
945 hash_add(vm->regions.slot_hash, &region->slot_node, slot); in vm_userspace_mem_region_add()
965 * vm - Virtual Machine
977 memslot2region(struct kvm_vm *vm, uint32_t memslot) in memslot2region() argument
981 hash_for_each_possible(vm->regions.slot_hash, region, slot_node, in memslot2region()
988 fputs("---- vm dump ----\n", stderr); in memslot2region()
989 vm_dump(stderr, vm, 2); in memslot2region()
995 * VM Memory Region Flags Set
998 * vm - Virtual Machine
1008 void vm_mem_region_set_flags(struct kvm_vm *vm, uint32_t slot, uint32_t flags) in vm_mem_region_set_flags() argument
1013 region = memslot2region(vm, slot); in vm_mem_region_set_flags()
1017 ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, &region->region); in vm_mem_region_set_flags()
1025 * VM Memory Region Move
1028 * vm - Virtual Machine
1038 void vm_mem_region_move(struct kvm_vm *vm, uint32_t slot, uint64_t new_gpa) in vm_mem_region_move() argument
1043 region = memslot2region(vm, slot); in vm_mem_region_move()
1047 ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, &region->region); in vm_mem_region_move()
1055 * VM Memory Region Delete
1058 * vm - Virtual Machine
1067 void vm_mem_region_delete(struct kvm_vm *vm, uint32_t slot) in vm_mem_region_delete() argument
1069 __vm_mem_region_delete(vm, memslot2region(vm, slot), true); in vm_mem_region_delete()
1102 * VM VCPU Add
1105 * vm - Virtual Machine
1112 * Adds a virtual CPU to the VM specified by vm with the ID given by vcpuid.
1115 void vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid) in vm_vcpu_add() argument
1120 vcpu = vcpu_find(vm, vcpuid); in vm_vcpu_add()
1132 vcpu->fd = ioctl(vm->fd, KVM_CREATE_VCPU, vcpuid); in vm_vcpu_add()
1145 list_add(&vcpu->list, &vm->vcpus); in vm_vcpu_add()
1149 * VM Virtual Address Unused Gap
1152 * vm - Virtual Machine
1163 * Within the VM specified by vm, locates the lowest starting virtual
1168 static vm_vaddr_t vm_vaddr_unused_gap(struct kvm_vm *vm, size_t sz, in vm_vaddr_unused_gap() argument
1171 uint64_t pages = (sz + vm->page_size - 1) >> vm->page_shift; in vm_vaddr_unused_gap()
1174 uint64_t pgidx_start = (vaddr_min + vm->page_size - 1) >> vm->page_shift; in vm_vaddr_unused_gap()
1175 if ((pgidx_start * vm->page_size) < vaddr_min) in vm_vaddr_unused_gap()
1179 if (!sparsebit_is_set_num(vm->vpages_valid, in vm_vaddr_unused_gap()
1181 pgidx_start = sparsebit_next_set_num(vm->vpages_valid, in vm_vaddr_unused_gap()
1190 if (sparsebit_is_clear_num(vm->vpages_mapped, in vm_vaddr_unused_gap()
1193 pgidx_start = sparsebit_next_clear_num(vm->vpages_mapped, in vm_vaddr_unused_gap()
1202 if (!sparsebit_is_set_num(vm->vpages_valid, in vm_vaddr_unused_gap()
1205 vm->vpages_valid, pgidx_start, pages); in vm_vaddr_unused_gap()
1218 TEST_ASSERT(sparsebit_is_set_num(vm->vpages_valid, in vm_vaddr_unused_gap()
1224 TEST_ASSERT(sparsebit_is_clear_num(vm->vpages_mapped, in vm_vaddr_unused_gap()
1231 return pgidx_start * vm->page_size; in vm_vaddr_unused_gap()
1235 * VM Virtual Address Allocate
1238 * vm - Virtual Machine
1249 * Allocates at least sz bytes within the virtual address space of the vm
1250 * given by vm. The allocated bytes are mapped to a virtual address >=
1255 vm_vaddr_t vm_vaddr_alloc(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_min) in vm_vaddr_alloc() argument
1257 uint64_t pages = (sz >> vm->page_shift) + ((sz % vm->page_size) != 0); in vm_vaddr_alloc()
1259 virt_pgd_alloc(vm); in vm_vaddr_alloc()
1260 vm_paddr_t paddr = vm_phy_pages_alloc(vm, pages, in vm_vaddr_alloc()
1261 KVM_UTIL_MIN_PFN * vm->page_size, 0); in vm_vaddr_alloc()
1267 vm_vaddr_t vaddr_start = vm_vaddr_unused_gap(vm, sz, vaddr_min); in vm_vaddr_alloc()
1271 pages--, vaddr += vm->page_size, paddr += vm->page_size) { in vm_vaddr_alloc()
1273 virt_pg_map(vm, vaddr, paddr); in vm_vaddr_alloc()
1275 sparsebit_set(vm->vpages_mapped, in vm_vaddr_alloc()
1276 vaddr >> vm->page_shift); in vm_vaddr_alloc()
1283 * VM Virtual Address Allocate Pages
1286 * vm - Virtual Machine
1294 * space of the vm.
1296 vm_vaddr_t vm_vaddr_alloc_pages(struct kvm_vm *vm, int nr_pages) in vm_vaddr_alloc_pages() argument
1298 return vm_vaddr_alloc(vm, nr_pages * getpagesize(), KVM_UTIL_MIN_VADDR); in vm_vaddr_alloc_pages()
1302 * VM Virtual Address Allocate Page
1305 * vm - Virtual Machine
1313 * space of the vm.
1315 vm_vaddr_t vm_vaddr_alloc_page(struct kvm_vm *vm) in vm_vaddr_alloc_page() argument
1317 return vm_vaddr_alloc_pages(vm, 1); in vm_vaddr_alloc_page()
1321 * Map a range of VM virtual address to the VM's physical address
1324 * vm - Virtual Machine
1326 * paddr - VM Physical Address
1334 * Within the VM given by @vm, creates a virtual translation for
1337 void virt_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr, in virt_map() argument
1340 size_t page_size = vm->page_size; in virt_map()
1347 virt_pg_map(vm, vaddr, paddr); in virt_map()
1354 * Address VM Physical to Host Virtual
1357 * vm - Virtual Machine
1358 * gpa - VM physical address
1365 * Locates the memory region containing the VM physical address given
1366 * by gpa, within the VM given by vm. When found, the host virtual
1367 * address providing the memory to the vm physical address is returned.
1370 void *addr_gpa2hva(struct kvm_vm *vm, vm_paddr_t gpa) in addr_gpa2hva() argument
1374 region = userspace_mem_region_find(vm, gpa, gpa); in addr_gpa2hva()
1376 TEST_FAIL("No vm physical memory at 0x%lx", gpa); in addr_gpa2hva()
1385 * Address Host Virtual to VM Physical
1388 * vm - Virtual Machine
1394 * Equivalent VM physical address
1397 * by hva, within the VM given by vm. When found, the equivalent
1398 * VM physical address is returned. A TEST_ASSERT failure occurs if no
1401 vm_paddr_t addr_hva2gpa(struct kvm_vm *vm, void *hva) in addr_hva2gpa() argument
1405 for (node = vm->regions.hva_tree.rb_node; node; ) { in addr_hva2gpa()
1426 * Address VM physical to Host Virtual *alias*.
1429 * vm - Virtual Machine
1430 * gpa - VM physical address
1445 void *addr_gpa2alias(struct kvm_vm *vm, vm_paddr_t gpa) in addr_gpa2alias() argument
1450 region = userspace_mem_region_find(vm, gpa, gpa); in addr_gpa2alias()
1462 * VM Create IRQ Chip
1465 * vm - Virtual Machine
1471 * Creates an interrupt controller chip for the VM specified by vm.
1473 void vm_create_irqchip(struct kvm_vm *vm) in vm_create_irqchip() argument
1477 ret = ioctl(vm->fd, KVM_CREATE_IRQCHIP, 0); in vm_create_irqchip()
1481 vm->has_irqchip = true; in vm_create_irqchip()
1485 * VM VCPU State
1488 * vm - Virtual Machine
1499 struct kvm_run *vcpu_state(struct kvm_vm *vm, uint32_t vcpuid) in vcpu_state() argument
1501 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_state()
1508 * VM VCPU Run
1511 * vm - Virtual Machine
1518 * Switch to executing the code for the VCPU given by vcpuid, within the VM
1519 * given by vm.
1521 void vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) in vcpu_run() argument
1523 int ret = _vcpu_run(vm, vcpuid); in vcpu_run()
1528 int _vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) in _vcpu_run() argument
1530 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in _vcpu_run()
1538 assert_on_unhandled_exception(vm, vcpuid); in _vcpu_run()
1543 int vcpu_get_fd(struct kvm_vm *vm, uint32_t vcpuid) in vcpu_get_fd() argument
1545 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_get_fd()
1552 void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t vcpuid) in vcpu_run_complete_io() argument
1554 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_run_complete_io()
1568 void vcpu_set_guest_debug(struct kvm_vm *vm, uint32_t vcpuid, in vcpu_set_guest_debug() argument
1571 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_set_guest_debug()
1578 * VM VCPU Set MP State
1581 * vm - Virtual Machine
1592 void vcpu_set_mp_state(struct kvm_vm *vm, uint32_t vcpuid, in vcpu_set_mp_state() argument
1595 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_set_mp_state()
1606 * VM VCPU Get Reg List
1609 * vm - Virtual Machine
1621 struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vm *vm, uint32_t vcpuid) in vcpu_get_reg_list() argument
1626 ret = _vcpu_ioctl(vm, vcpuid, KVM_GET_REG_LIST, &reg_list_n); in vcpu_get_reg_list()
1630 vcpu_ioctl(vm, vcpuid, KVM_GET_REG_LIST, reg_list); in vcpu_get_reg_list()
1635 * VM VCPU Regs Get
1638 * vm - Virtual Machine
1649 void vcpu_regs_get(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_regs *regs) in vcpu_regs_get() argument
1651 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_regs_get()
1662 * VM VCPU Regs Set
1665 * vm - Virtual Machine
1676 void vcpu_regs_set(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_regs *regs) in vcpu_regs_set() argument
1678 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_regs_set()
1689 void vcpu_events_get(struct kvm_vm *vm, uint32_t vcpuid, in vcpu_events_get() argument
1692 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_events_get()
1702 void vcpu_events_set(struct kvm_vm *vm, uint32_t vcpuid, in vcpu_events_set() argument
1705 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_events_set()
1717 void vcpu_nested_state_get(struct kvm_vm *vm, uint32_t vcpuid, in vcpu_nested_state_get() argument
1720 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_nested_state_get()
1731 int vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpuid, in vcpu_nested_state_set() argument
1734 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_nested_state_set()
1751 * VM VCPU System Regs Get
1754 * vm - Virtual Machine
1765 void vcpu_sregs_get(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_sregs *sregs) in vcpu_sregs_get() argument
1767 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_sregs_get()
1778 * VM VCPU System Regs Set
1781 * vm - Virtual Machine
1792 void vcpu_sregs_set(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_sregs *sregs) in vcpu_sregs_set() argument
1794 int ret = _vcpu_sregs_set(vm, vcpuid, sregs); in vcpu_sregs_set()
1799 int _vcpu_sregs_set(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_sregs *sregs) in _vcpu_sregs_set() argument
1801 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in _vcpu_sregs_set()
1808 void vcpu_fpu_get(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_fpu *fpu) in vcpu_fpu_get() argument
1812 ret = _vcpu_ioctl(vm, vcpuid, KVM_GET_FPU, fpu); in vcpu_fpu_get()
1817 void vcpu_fpu_set(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_fpu *fpu) in vcpu_fpu_set() argument
1821 ret = _vcpu_ioctl(vm, vcpuid, KVM_SET_FPU, fpu); in vcpu_fpu_set()
1826 void vcpu_get_reg(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_one_reg *reg) in vcpu_get_reg() argument
1830 ret = _vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, reg); in vcpu_get_reg()
1835 void vcpu_set_reg(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_one_reg *reg) in vcpu_set_reg() argument
1839 ret = _vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, reg); in vcpu_set_reg()
1848 * vm - Virtual Machine
1857 void vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, in vcpu_ioctl() argument
1862 ret = _vcpu_ioctl(vm, vcpuid, cmd, arg); in vcpu_ioctl()
1867 int _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, in _vcpu_ioctl() argument
1870 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in _vcpu_ioctl()
1880 void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t vcpuid) in vcpu_map_dirty_ring() argument
1883 uint32_t size = vm->dirty_ring_size; in vcpu_map_dirty_ring()
1887 vcpu = vcpu_find(vm, vcpuid); in vcpu_map_dirty_ring()
1896 vm->page_size * KVM_DIRTY_LOG_PAGE_OFFSET); in vcpu_map_dirty_ring()
1901 vm->page_size * KVM_DIRTY_LOG_PAGE_OFFSET); in vcpu_map_dirty_ring()
1906 vm->page_size * KVM_DIRTY_LOG_PAGE_OFFSET); in vcpu_map_dirty_ring()
1917 * VM Ioctl
1920 * vm - Virtual Machine
1926 * Issues an arbitrary ioctl on a VM fd.
1928 void vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) in vm_ioctl() argument
1932 ret = _vm_ioctl(vm, cmd, arg); in vm_ioctl()
1933 TEST_ASSERT(ret == 0, "vm ioctl %lu failed, rc: %i errno: %i (%s)", in vm_ioctl()
1937 int _vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) in _vm_ioctl() argument
1939 return ioctl(vm->fd, cmd, arg); in _vm_ioctl()
1946 * vm - Virtual Machine
1954 void kvm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) in kvm_ioctl() argument
1958 ret = ioctl(vm->kvm_fd, cmd, arg); in kvm_ioctl()
1963 int _kvm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) in _kvm_ioctl() argument
1965 return ioctl(vm->kvm_fd, cmd, arg); in _kvm_ioctl()
1991 int _kvm_create_device(struct kvm_vm *vm, uint64_t type, bool test, int *fd) in _kvm_create_device() argument
1999 ret = ioctl(vm_get_fd(vm), KVM_CREATE_DEVICE, &create_dev); in _kvm_create_device()
2004 int kvm_create_device(struct kvm_vm *vm, uint64_t type, bool test) in kvm_create_device() argument
2008 ret = _kvm_create_device(vm, type, test, &fd); in kvm_create_device()
2044 * VM Dump
2047 * vm - Virtual Machine
2055 * Dumps the current state of the VM given by vm, to the FILE stream
2058 void vm_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) in vm_dump() argument
2064 fprintf(stream, "%*smode: 0x%x\n", indent, "", vm->mode); in vm_dump()
2065 fprintf(stream, "%*sfd: %i\n", indent, "", vm->fd); in vm_dump()
2066 fprintf(stream, "%*spage_size: 0x%x\n", indent, "", vm->page_size); in vm_dump()
2068 hash_for_each(vm->regions.slot_hash, ctr, region, slot_node) { in vm_dump()
2078 sparsebit_dump(stream, vm->vpages_mapped, indent + 2); in vm_dump()
2080 vm->pgd_created); in vm_dump()
2081 if (vm->pgd_created) { in vm_dump()
2084 virt_dump(stream, vm, indent + 4); in vm_dump()
2087 list_for_each_entry(vcpu, &vm->vcpus, list) in vm_dump()
2088 vcpu_dump(stream, vm, vcpu->id, indent + 2); in vm_dump()
2156 * vm - Virtual Machine
2166 * Within the VM specified by vm, locates a range of available physical
2171 vm_paddr_t vm_phy_pages_alloc(struct kvm_vm *vm, size_t num, in vm_phy_pages_alloc() argument
2179 TEST_ASSERT((paddr_min % vm->page_size) == 0, "Min physical address " in vm_phy_pages_alloc()
2182 paddr_min, vm->page_size); in vm_phy_pages_alloc()
2184 region = memslot2region(vm, memslot); in vm_phy_pages_alloc()
2185 base = pg = paddr_min >> vm->page_shift; in vm_phy_pages_alloc()
2199 paddr_min, vm->page_size, memslot); in vm_phy_pages_alloc()
2200 fputs("---- vm dump ----\n", stderr); in vm_phy_pages_alloc()
2201 vm_dump(stderr, vm, 2); in vm_phy_pages_alloc()
2208 return base * vm->page_size; in vm_phy_pages_alloc()
2211 vm_paddr_t vm_phy_page_alloc(struct kvm_vm *vm, vm_paddr_t paddr_min, in vm_phy_page_alloc() argument
2214 return vm_phy_pages_alloc(vm, 1, paddr_min, memslot); in vm_phy_page_alloc()
2220 vm_paddr_t vm_alloc_page_table(struct kvm_vm *vm) in vm_alloc_page_table() argument
2222 return vm_phy_page_alloc(vm, KVM_GUEST_PAGE_TABLE_MIN_PADDR, 0); in vm_alloc_page_table()
2229 * vm - Virtual Machine
2230 * gva - VM virtual address
2237 void *addr_gva2hva(struct kvm_vm *vm, vm_vaddr_t gva) in addr_gva2hva() argument
2239 return addr_gpa2hva(vm, addr_gva2gpa(vm, gva)); in addr_gva2hva()
2246 * vm - Virtual Machine
2254 bool vm_is_unrestricted_guest(struct kvm_vm *vm) in vm_is_unrestricted_guest() argument
2260 if (vm == NULL) { in vm_is_unrestricted_guest()
2275 unsigned int vm_get_page_size(struct kvm_vm *vm) in vm_get_page_size() argument
2277 return vm->page_size; in vm_get_page_size()
2280 unsigned int vm_get_page_shift(struct kvm_vm *vm) in vm_get_page_shift() argument
2282 return vm->page_shift; in vm_get_page_shift()
2285 uint64_t vm_get_max_gfn(struct kvm_vm *vm) in vm_get_max_gfn() argument
2287 return vm->max_gfn; in vm_get_max_gfn()
2290 int vm_get_fd(struct kvm_vm *vm) in vm_get_fd() argument
2292 return vm->fd; in vm_get_fd()
2335 int vm_get_stats_fd(struct kvm_vm *vm) in vm_get_stats_fd() argument
2337 return ioctl(vm->fd, KVM_GET_STATS_FD, NULL); in vm_get_stats_fd()
2340 int vcpu_get_stats_fd(struct kvm_vm *vm, uint32_t vcpuid) in vcpu_get_stats_fd() argument
2342 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_get_stats_fd()