• Home
  • Raw
  • Download

Lines Matching refs:vm

229 void virt_pgd_alloc(struct kvm_vm *vm, uint32_t pgd_memslot)  in virt_pgd_alloc()  argument
231 TEST_ASSERT(vm->mode == VM_MODE_PXXV48_4K, "Attempt to use " in virt_pgd_alloc()
232 "unknown or unsupported guest mode, mode: 0x%x", vm->mode); in virt_pgd_alloc()
235 if (!vm->pgd_created) { in virt_pgd_alloc()
236 vm_paddr_t paddr = vm_phy_page_alloc(vm, in virt_pgd_alloc()
238 vm->pgd = paddr; in virt_pgd_alloc()
239 vm->pgd_created = true; in virt_pgd_alloc()
258 void virt_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr, in virt_pg_map() argument
264 TEST_ASSERT(vm->mode == VM_MODE_PXXV48_4K, "Attempt to use " in virt_pg_map()
265 "unknown or unsupported guest mode, mode: 0x%x", vm->mode); in virt_pg_map()
267 TEST_ASSERT((vaddr % vm->page_size) == 0, in virt_pg_map()
270 vaddr, vm->page_size); in virt_pg_map()
271 TEST_ASSERT(sparsebit_is_set(vm->vpages_valid, in virt_pg_map()
272 (vaddr >> vm->page_shift)), in virt_pg_map()
275 TEST_ASSERT((paddr % vm->page_size) == 0, in virt_pg_map()
278 paddr, vm->page_size); in virt_pg_map()
279 TEST_ASSERT((paddr >> vm->page_shift) <= vm->max_gfn, in virt_pg_map()
282 paddr, vm->max_gfn, vm->page_size); in virt_pg_map()
290 pml4e = addr_gpa2hva(vm, vm->pgd); in virt_pg_map()
292 pml4e[index[3]].address = vm_phy_page_alloc(vm, in virt_pg_map()
294 >> vm->page_shift; in virt_pg_map()
301 pdpe = addr_gpa2hva(vm, pml4e[index[3]].address * vm->page_size); in virt_pg_map()
303 pdpe[index[2]].address = vm_phy_page_alloc(vm, in virt_pg_map()
305 >> vm->page_shift; in virt_pg_map()
312 pde = addr_gpa2hva(vm, pdpe[index[2]].address * vm->page_size); in virt_pg_map()
314 pde[index[1]].address = vm_phy_page_alloc(vm, in virt_pg_map()
316 >> vm->page_shift; in virt_pg_map()
323 pte = addr_gpa2hva(vm, pde[index[1]].address * vm->page_size); in virt_pg_map()
324 pte[index[0]].address = paddr >> vm->page_shift; in virt_pg_map()
343 void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) in virt_dump() argument
350 if (!vm->pgd_created) in virt_dump()
358 pml4e_start = (struct pageMapL4Entry *) addr_gpa2hva(vm, in virt_dump()
359 vm->pgd); in virt_dump()
368 addr_hva2gpa(vm, pml4e), (uint64_t) pml4e->address, in virt_dump()
371 pdpe_start = addr_gpa2hva(vm, pml4e->address in virt_dump()
372 * vm->page_size); in virt_dump()
381 addr_hva2gpa(vm, pdpe), in virt_dump()
385 pde_start = addr_gpa2hva(vm, in virt_dump()
386 pdpe->address * vm->page_size); in virt_dump()
394 addr_hva2gpa(vm, pde), in virt_dump()
398 pte_start = addr_gpa2hva(vm, in virt_dump()
399 pde->address * vm->page_size); in virt_dump()
409 addr_hva2gpa(vm, pte), in virt_dump()
441 static void kvm_seg_fill_gdt_64bit(struct kvm_vm *vm, struct kvm_segment *segp) in kvm_seg_fill_gdt_64bit() argument
443 void *gdt = addr_gva2hva(vm, vm->gdt); in kvm_seg_fill_gdt_64bit()
477 static void kvm_seg_set_kernel_code_64bit(struct kvm_vm *vm, uint16_t selector, in kvm_seg_set_kernel_code_64bit() argument
490 if (vm) in kvm_seg_set_kernel_code_64bit()
491 kvm_seg_fill_gdt_64bit(vm, segp); in kvm_seg_set_kernel_code_64bit()
508 static void kvm_seg_set_kernel_data_64bit(struct kvm_vm *vm, uint16_t selector, in kvm_seg_set_kernel_data_64bit() argument
520 if (vm) in kvm_seg_set_kernel_data_64bit()
521 kvm_seg_fill_gdt_64bit(vm, segp); in kvm_seg_set_kernel_data_64bit()
542 vm_paddr_t addr_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) in addr_gva2gpa() argument
550 TEST_ASSERT(vm->mode == VM_MODE_PXXV48_4K, "Attempt to use " in addr_gva2gpa()
551 "unknown or unsupported guest mode, mode: 0x%x", vm->mode); in addr_gva2gpa()
558 if (!vm->pgd_created) in addr_gva2gpa()
560 pml4e = addr_gpa2hva(vm, vm->pgd); in addr_gva2gpa()
564 pdpe = addr_gpa2hva(vm, pml4e[index[3]].address * vm->page_size); in addr_gva2gpa()
568 pde = addr_gpa2hva(vm, pdpe[index[2]].address * vm->page_size); in addr_gva2gpa()
572 pte = addr_gpa2hva(vm, pde[index[1]].address * vm->page_size); in addr_gva2gpa()
576 return (pte[index[0]].address * vm->page_size) + (gva & 0xfffu); in addr_gva2gpa()
584 static void kvm_setup_gdt(struct kvm_vm *vm, struct kvm_dtable *dt, int gdt_memslot, in kvm_setup_gdt() argument
587 if (!vm->gdt) in kvm_setup_gdt()
588 vm->gdt = vm_vaddr_alloc(vm, getpagesize(), in kvm_setup_gdt()
591 dt->base = vm->gdt; in kvm_setup_gdt()
595 static void kvm_setup_tss_64bit(struct kvm_vm *vm, struct kvm_segment *segp, in kvm_setup_tss_64bit() argument
599 if (!vm->tss) in kvm_setup_tss_64bit()
600 vm->tss = vm_vaddr_alloc(vm, getpagesize(), in kvm_setup_tss_64bit()
604 segp->base = vm->tss; in kvm_setup_tss_64bit()
609 kvm_seg_fill_gdt_64bit(vm, segp); in kvm_setup_tss_64bit()
612 static void vcpu_setup(struct kvm_vm *vm, int vcpuid, int pgd_memslot, int gdt_memslot) in vcpu_setup() argument
617 vcpu_sregs_get(vm, vcpuid, &sregs); in vcpu_setup()
621 kvm_setup_gdt(vm, &sregs.gdt, gdt_memslot, pgd_memslot); in vcpu_setup()
623 switch (vm->mode) { in vcpu_setup()
630 kvm_seg_set_kernel_code_64bit(vm, 0x8, &sregs.cs); in vcpu_setup()
631 kvm_seg_set_kernel_data_64bit(vm, 0x10, &sregs.ds); in vcpu_setup()
632 kvm_seg_set_kernel_data_64bit(vm, 0x10, &sregs.es); in vcpu_setup()
633 kvm_setup_tss_64bit(vm, &sregs.tr, 0x18, gdt_memslot, pgd_memslot); in vcpu_setup()
637 TEST_ASSERT(false, "Unknown guest mode, mode: 0x%x", vm->mode); in vcpu_setup()
640 sregs.cr3 = vm->pgd; in vcpu_setup()
641 vcpu_sregs_set(vm, vcpuid, &sregs); in vcpu_setup()
649 void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code) in vm_vcpu_add_default() argument
654 stack_vaddr = vm_vaddr_alloc(vm, DEFAULT_STACK_PGS * getpagesize(), in vm_vcpu_add_default()
658 vm_vcpu_add(vm, vcpuid); in vm_vcpu_add_default()
659 vcpu_setup(vm, vcpuid, 0, 0); in vm_vcpu_add_default()
662 vcpu_regs_get(vm, vcpuid, &regs); in vm_vcpu_add_default()
666 vcpu_regs_set(vm, vcpuid, &regs); in vm_vcpu_add_default()
670 vcpu_set_mp_state(vm, vcpuid, &mp_state); in vm_vcpu_add_default()
782 void vcpu_set_cpuid(struct kvm_vm *vm, in vcpu_set_cpuid() argument
785 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_set_cpuid()
813 struct kvm_vm *vm; in vm_create_default() local
824 vm = vm_create(VM_MODE_DEFAULT, in vm_create_default()
829 kvm_vm_elf_load(vm, program_invocation_name, 0, 0); in vm_create_default()
832 vm_create_irqchip(vm); in vm_create_default()
835 vm_vcpu_add_default(vm, vcpuid, guest_code); in vm_create_default()
837 return vm; in vm_create_default()
853 uint64_t vcpu_get_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_index) in vcpu_get_msr() argument
855 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_get_msr()
886 void vcpu_set_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_index, in vcpu_set_msr() argument
889 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_set_msr()
922 void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, ...) in vcpu_args_set() argument
932 vcpu_regs_get(vm, vcpuid, &regs); in vcpu_args_set()
952 vcpu_regs_set(vm, vcpuid, &regs); in vcpu_args_set()
972 void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint8_t indent) in vcpu_dump() argument
980 vcpu_regs_get(vm, vcpuid, &regs); in vcpu_dump()
984 vcpu_sregs_get(vm, vcpuid, &sregs); in vcpu_dump()
1003 static int kvm_get_num_msrs(struct kvm_vm *vm) in kvm_get_num_msrs() argument
1009 r = ioctl(vm->kvm_fd, KVM_GET_MSR_INDEX_LIST, &nmsrs); in kvm_get_num_msrs()
1016 struct kvm_x86_state *vcpu_save_state(struct kvm_vm *vm, uint32_t vcpuid) in vcpu_save_state() argument
1018 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_save_state()
1037 vcpu_run_complete_io(vm, vcpuid); in vcpu_save_state()
1039 nmsrs = kvm_get_num_msrs(vm); in vcpu_save_state()
1042 r = ioctl(vm->kvm_fd, KVM_GET_MSR_INDEX_LIST, list); in vcpu_save_state()
1099 void vcpu_load_state(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_x86_state *state) in vcpu_load_state() argument
1101 struct vcpu *vcpu = vcpu_find(vm, vcpuid); in vcpu_load_state()