Lines Matching refs:kvm

52 void kvm_vgic_early_init(struct kvm *kvm)  in kvm_vgic_early_init()  argument
54 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_early_init()
71 int kvm_vgic_create(struct kvm *kvm, u32 type) in kvm_vgic_create() argument
77 if (irqchip_in_kernel(kvm)) in kvm_vgic_create()
91 if (!lock_all_vcpus(kvm)) in kvm_vgic_create()
94 kvm_for_each_vcpu(i, vcpu, kvm) { in kvm_vgic_create()
101 kvm->max_vcpus = VGIC_V2_MAX_CPUS; in kvm_vgic_create()
103 kvm->max_vcpus = VGIC_V3_MAX_CPUS; in kvm_vgic_create()
105 if (atomic_read(&kvm->online_vcpus) > kvm->max_vcpus) { in kvm_vgic_create()
110 kvm->arch.vgic.in_kernel = true; in kvm_vgic_create()
111 kvm->arch.vgic.vgic_model = type; in kvm_vgic_create()
113 kvm->arch.vgic.vgic_dist_base = VGIC_ADDR_UNDEF; in kvm_vgic_create()
116 kvm->arch.vgic.vgic_cpu_base = VGIC_ADDR_UNDEF; in kvm_vgic_create()
118 INIT_LIST_HEAD(&kvm->arch.vgic.rd_regions); in kvm_vgic_create()
121 unlock_all_vcpus(kvm); in kvm_vgic_create()
132 static int kvm_vgic_dist_init(struct kvm *kvm, unsigned int nr_spis) in kvm_vgic_dist_init() argument
134 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_dist_init()
135 struct kvm_vcpu *vcpu0 = kvm_get_vcpu(kvm, 0); in kvm_vgic_dist_init()
189 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in kvm_vgic_vcpu_init()
222 if (!irqchip_in_kernel(vcpu->kvm)) in kvm_vgic_vcpu_init()
230 mutex_lock(&vcpu->kvm->lock); in kvm_vgic_vcpu_init()
232 mutex_unlock(&vcpu->kvm->lock); in kvm_vgic_vcpu_init()
255 int vgic_init(struct kvm *kvm) in vgic_init() argument
257 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_init()
262 if (vgic_initialized(kvm)) in vgic_init()
266 if (kvm->created_vcpus != atomic_read(&kvm->online_vcpus)) in vgic_init()
273 ret = kvm_vgic_dist_init(kvm, dist->nr_spis); in vgic_init()
278 kvm_for_each_vcpu(idx, vcpu, kvm) { in vgic_init()
299 if (vgic_has_its(kvm)) in vgic_init()
300 vgic_lpi_translation_cache_init(kvm); in vgic_init()
307 if (vgic_supports_direct_msis(kvm)) { in vgic_init()
308 ret = vgic_v4_init(kvm); in vgic_init()
313 kvm_for_each_vcpu(idx, vcpu, kvm) in vgic_init()
316 ret = kvm_vgic_setup_default_irq_routing(kvm); in vgic_init()
320 vgic_debug_init(kvm); in vgic_init()
334 static void kvm_vgic_dist_destroy(struct kvm *kvm) in kvm_vgic_dist_destroy() argument
336 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_dist_destroy()
355 if (vgic_has_its(kvm)) in kvm_vgic_dist_destroy()
356 vgic_lpi_translation_cache_destroy(kvm); in kvm_vgic_dist_destroy()
358 if (vgic_supports_direct_msis(kvm)) in kvm_vgic_dist_destroy()
359 vgic_v4_teardown(kvm); in kvm_vgic_dist_destroy()
377 static void __kvm_vgic_destroy(struct kvm *kvm) in __kvm_vgic_destroy() argument
382 vgic_debug_destroy(kvm); in __kvm_vgic_destroy()
384 kvm_for_each_vcpu(i, vcpu, kvm) in __kvm_vgic_destroy()
387 kvm_vgic_dist_destroy(kvm); in __kvm_vgic_destroy()
390 void kvm_vgic_destroy(struct kvm *kvm) in kvm_vgic_destroy() argument
392 mutex_lock(&kvm->lock); in kvm_vgic_destroy()
393 __kvm_vgic_destroy(kvm); in kvm_vgic_destroy()
394 mutex_unlock(&kvm->lock); in kvm_vgic_destroy()
403 int vgic_lazy_init(struct kvm *kvm) in vgic_lazy_init() argument
407 if (unlikely(!vgic_initialized(kvm))) { in vgic_lazy_init()
414 if (kvm->arch.vgic.vgic_model != KVM_DEV_TYPE_ARM_VGIC_V2) in vgic_lazy_init()
417 mutex_lock(&kvm->lock); in vgic_lazy_init()
418 ret = vgic_init(kvm); in vgic_lazy_init()
419 mutex_unlock(&kvm->lock); in vgic_lazy_init()
436 int kvm_vgic_map_resources(struct kvm *kvm) in kvm_vgic_map_resources() argument
438 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_map_resources()
441 if (likely(vgic_ready(kvm))) in kvm_vgic_map_resources()
444 mutex_lock(&kvm->lock); in kvm_vgic_map_resources()
445 if (vgic_ready(kvm)) in kvm_vgic_map_resources()
448 if (!irqchip_in_kernel(kvm)) in kvm_vgic_map_resources()
452 ret = vgic_v2_map_resources(kvm); in kvm_vgic_map_resources()
454 ret = vgic_v3_map_resources(kvm); in kvm_vgic_map_resources()
457 __kvm_vgic_destroy(kvm); in kvm_vgic_map_resources()
462 mutex_unlock(&kvm->lock); in kvm_vgic_map_resources()