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
76 if (irqchip_in_kernel(kvm)) in kvm_vgic_create()
90 if (!lock_all_vcpus(kvm)) in kvm_vgic_create()
93 kvm_for_each_vcpu(i, vcpu, kvm) { in kvm_vgic_create()
100 kvm->arch.max_vcpus = VGIC_V2_MAX_CPUS; in kvm_vgic_create()
102 kvm->arch.max_vcpus = VGIC_V3_MAX_CPUS; in kvm_vgic_create()
104 if (atomic_read(&kvm->online_vcpus) > kvm->arch.max_vcpus) { in kvm_vgic_create()
109 kvm->arch.vgic.in_kernel = true; in kvm_vgic_create()
110 kvm->arch.vgic.vgic_model = type; in kvm_vgic_create()
112 kvm->arch.vgic.vgic_dist_base = VGIC_ADDR_UNDEF; in kvm_vgic_create()
115 kvm->arch.vgic.vgic_cpu_base = VGIC_ADDR_UNDEF; in kvm_vgic_create()
117 INIT_LIST_HEAD(&kvm->arch.vgic.rd_regions); in kvm_vgic_create()
120 unlock_all_vcpus(kvm); in kvm_vgic_create()
131 static int kvm_vgic_dist_init(struct kvm *kvm, unsigned int nr_spis) in kvm_vgic_dist_init() argument
133 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_dist_init()
134 struct kvm_vcpu *vcpu0 = kvm_get_vcpu(kvm, 0); in kvm_vgic_dist_init()
188 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in kvm_vgic_vcpu_init()
221 if (!irqchip_in_kernel(vcpu->kvm)) in kvm_vgic_vcpu_init()
229 mutex_lock(&vcpu->kvm->lock); in kvm_vgic_vcpu_init()
231 mutex_unlock(&vcpu->kvm->lock); in kvm_vgic_vcpu_init()
254 int vgic_init(struct kvm *kvm) in vgic_init() argument
256 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_init()
260 if (vgic_initialized(kvm)) in vgic_init()
264 if (kvm->created_vcpus != atomic_read(&kvm->online_vcpus)) in vgic_init()
271 ret = kvm_vgic_dist_init(kvm, dist->nr_spis); in vgic_init()
276 kvm_for_each_vcpu(idx, vcpu, kvm) { in vgic_init()
297 if (vgic_has_its(kvm)) in vgic_init()
298 vgic_lpi_translation_cache_init(kvm); in vgic_init()
305 if (vgic_supports_direct_msis(kvm)) { in vgic_init()
306 ret = vgic_v4_init(kvm); in vgic_init()
311 kvm_for_each_vcpu(i, vcpu, kvm) in vgic_init()
314 ret = kvm_vgic_setup_default_irq_routing(kvm); in vgic_init()
318 vgic_debug_init(kvm); in vgic_init()
327 static void kvm_vgic_dist_destroy(struct kvm *kvm) in kvm_vgic_dist_destroy() argument
329 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_dist_destroy()
348 if (vgic_has_its(kvm)) in kvm_vgic_dist_destroy()
349 vgic_lpi_translation_cache_destroy(kvm); in kvm_vgic_dist_destroy()
351 if (vgic_supports_direct_msis(kvm)) in kvm_vgic_dist_destroy()
352 vgic_v4_teardown(kvm); in kvm_vgic_dist_destroy()
370 static void __kvm_vgic_destroy(struct kvm *kvm) in __kvm_vgic_destroy() argument
375 vgic_debug_destroy(kvm); in __kvm_vgic_destroy()
377 kvm_for_each_vcpu(i, vcpu, kvm) in __kvm_vgic_destroy()
380 kvm_vgic_dist_destroy(kvm); in __kvm_vgic_destroy()
383 void kvm_vgic_destroy(struct kvm *kvm) in kvm_vgic_destroy() argument
385 mutex_lock(&kvm->lock); in kvm_vgic_destroy()
386 __kvm_vgic_destroy(kvm); in kvm_vgic_destroy()
387 mutex_unlock(&kvm->lock); in kvm_vgic_destroy()
396 int vgic_lazy_init(struct kvm *kvm) in vgic_lazy_init() argument
400 if (unlikely(!vgic_initialized(kvm))) { in vgic_lazy_init()
407 if (kvm->arch.vgic.vgic_model != KVM_DEV_TYPE_ARM_VGIC_V2) in vgic_lazy_init()
410 mutex_lock(&kvm->lock); in vgic_lazy_init()
411 ret = vgic_init(kvm); in vgic_lazy_init()
412 mutex_unlock(&kvm->lock); in vgic_lazy_init()
429 int kvm_vgic_map_resources(struct kvm *kvm) in kvm_vgic_map_resources() argument
431 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_map_resources()
434 if (likely(vgic_ready(kvm))) in kvm_vgic_map_resources()
437 mutex_lock(&kvm->lock); in kvm_vgic_map_resources()
438 if (vgic_ready(kvm)) in kvm_vgic_map_resources()
441 if (!irqchip_in_kernel(kvm)) in kvm_vgic_map_resources()
445 ret = vgic_v2_map_resources(kvm); in kvm_vgic_map_resources()
447 ret = vgic_v3_map_resources(kvm); in kvm_vgic_map_resources()
450 __kvm_vgic_destroy(kvm); in kvm_vgic_map_resources()
455 mutex_unlock(&kvm->lock); in kvm_vgic_map_resources()