Lines Matching refs:kvm

113 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)  in kvm_arch_init_vm()  argument
120 ret = kvm_alloc_stage2_pgd(kvm); in kvm_arch_init_vm()
124 ret = create_hyp_mappings(kvm, kvm + 1); in kvm_arch_init_vm()
128 kvm_timer_init(kvm); in kvm_arch_init_vm()
131 kvm->arch.vmid_gen = 0; in kvm_arch_init_vm()
134 kvm->arch.max_vcpus = kvm_vgic_get_max_vcpus(); in kvm_arch_init_vm()
138 kvm_free_stage2_pgd(kvm); in kvm_arch_init_vm()
153 void kvm_arch_destroy_vm(struct kvm *kvm) in kvm_arch_destroy_vm() argument
157 kvm_free_stage2_pgd(kvm); in kvm_arch_destroy_vm()
160 if (kvm->vcpus[i]) { in kvm_arch_destroy_vm()
161 kvm_arch_vcpu_free(kvm->vcpus[i]); in kvm_arch_destroy_vm()
162 kvm->vcpus[i] = NULL; in kvm_arch_destroy_vm()
166 kvm_vgic_destroy(kvm); in kvm_arch_destroy_vm()
169 int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) in kvm_vm_ioctl_check_extension() argument
213 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id) in kvm_arch_vcpu_create() argument
218 if (irqchip_in_kernel(kvm) && vgic_initialized(kvm)) { in kvm_arch_vcpu_create()
223 if (id >= kvm->arch.max_vcpus) { in kvm_arch_vcpu_create()
234 err = kvm_vcpu_init(vcpu, kvm, id); in kvm_arch_vcpu_create()
374 static bool need_new_vmid_gen(struct kvm *kvm) in need_new_vmid_gen() argument
376 return unlikely(kvm->arch.vmid_gen != atomic64_read(&kvm_vmid_gen)); in need_new_vmid_gen()
387 static void update_vttbr(struct kvm *kvm) in update_vttbr() argument
392 if (!need_new_vmid_gen(kvm)) in update_vttbr()
402 if (!need_new_vmid_gen(kvm)) { in update_vttbr()
426 kvm->arch.vmid_gen = atomic64_read(&kvm_vmid_gen); in update_vttbr()
427 kvm->arch.vmid = kvm_next_vmid; in update_vttbr()
431 pgd_phys = virt_to_phys(kvm_get_hwpgd(kvm)); in update_vttbr()
433 vmid = ((u64)(kvm->arch.vmid) << VTTBR_VMID_SHIFT) & VTTBR_VMID_MASK; in update_vttbr()
434 kvm->arch.vttbr = pgd_phys | vmid; in update_vttbr()
441 struct kvm *kvm = vcpu->kvm; in kvm_vcpu_first_run_init() local
453 if (unlikely(irqchip_in_kernel(kvm) && !vgic_ready(kvm))) { in kvm_vcpu_first_run_init()
454 ret = kvm_vgic_map_resources(kvm); in kvm_vcpu_first_run_init()
464 if (irqchip_in_kernel(kvm) && vgic_initialized(kvm)) in kvm_vcpu_first_run_init()
465 kvm_timer_enable(kvm); in kvm_vcpu_first_run_init()
470 bool kvm_arch_intc_initialized(struct kvm *kvm) in kvm_arch_intc_initialized() argument
472 return vgic_initialized(kvm); in kvm_arch_intc_initialized()
527 update_vttbr(vcpu->kvm); in kvm_arch_vcpu_ioctl_run()
545 if (ret <= 0 || need_new_vmid_gen(vcpu->kvm)) { in kvm_arch_vcpu_ioctl_run()
624 int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level, in kvm_vm_ioctl_irq_line() argument
629 int nrcpus = atomic_read(&kvm->online_vcpus); in kvm_vm_ioctl_irq_line()
641 if (irqchip_in_kernel(kvm)) in kvm_vm_ioctl_irq_line()
647 vcpu = kvm_get_vcpu(kvm, vcpu_idx); in kvm_vm_ioctl_irq_line()
656 if (!irqchip_in_kernel(kvm)) in kvm_vm_ioctl_irq_line()
662 vcpu = kvm_get_vcpu(kvm, vcpu_idx); in kvm_vm_ioctl_irq_line()
669 return kvm_vgic_inject_irq(kvm, vcpu->vcpu_id, irq_num, level); in kvm_vm_ioctl_irq_line()
671 if (!irqchip_in_kernel(kvm)) in kvm_vm_ioctl_irq_line()
677 return kvm_vgic_inject_irq(kvm, 0, irq_num, level); in kvm_vm_ioctl_irq_line()
739 stage2_unmap_vm(vcpu->kvm); in kvm_arch_vcpu_ioctl_vcpu_init()
825 int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log) in kvm_vm_ioctl_get_dirty_log() argument
830 mutex_lock(&kvm->slots_lock); in kvm_vm_ioctl_get_dirty_log()
832 r = kvm_get_dirty_log_protect(kvm, log, &is_dirty); in kvm_vm_ioctl_get_dirty_log()
835 kvm_flush_remote_tlbs(kvm); in kvm_vm_ioctl_get_dirty_log()
837 mutex_unlock(&kvm->slots_lock); in kvm_vm_ioctl_get_dirty_log()
841 static int kvm_vm_ioctl_set_device_addr(struct kvm *kvm, in kvm_vm_ioctl_set_device_addr() argument
853 return kvm_vgic_addr(kvm, type, &dev_addr->addr, true); in kvm_vm_ioctl_set_device_addr()
862 struct kvm *kvm = filp->private_data; in kvm_arch_vm_ioctl() local
867 return kvm_vgic_create(kvm, KVM_DEV_TYPE_ARM_VGIC_V2); in kvm_arch_vm_ioctl()
874 return kvm_vm_ioctl_set_device_addr(kvm, &dev_addr); in kvm_arch_vm_ioctl()
1085 struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr) in kvm_mpidr_to_vcpu() argument
1091 kvm_for_each_vcpu(i, vcpu, kvm) { in kvm_mpidr_to_vcpu()