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
88 lockdep_assert_held(&kvm->lock); in kvm_vgic_create()
91 if (!lock_all_vcpus(kvm)) in kvm_vgic_create()
94 mutex_lock(&kvm->arch.config_lock); in kvm_vgic_create()
96 if (irqchip_in_kernel(kvm)) { in kvm_vgic_create()
101 kvm_for_each_vcpu(i, vcpu, kvm) { in kvm_vgic_create()
108 kvm->max_vcpus = VGIC_V2_MAX_CPUS; in kvm_vgic_create()
110 kvm->max_vcpus = VGIC_V3_MAX_CPUS; in kvm_vgic_create()
112 if (atomic_read(&kvm->online_vcpus) > kvm->max_vcpus) { in kvm_vgic_create()
117 kvm->arch.vgic.in_kernel = true; in kvm_vgic_create()
118 kvm->arch.vgic.vgic_model = type; in kvm_vgic_create()
120 kvm->arch.vgic.vgic_dist_base = VGIC_ADDR_UNDEF; in kvm_vgic_create()
123 kvm->arch.vgic.vgic_cpu_base = VGIC_ADDR_UNDEF; in kvm_vgic_create()
125 INIT_LIST_HEAD(&kvm->arch.vgic.rd_regions); in kvm_vgic_create()
128 mutex_unlock(&kvm->arch.config_lock); in kvm_vgic_create()
129 unlock_all_vcpus(kvm); in kvm_vgic_create()
140 static int kvm_vgic_dist_init(struct kvm *kvm, unsigned int nr_spis) in kvm_vgic_dist_init() argument
142 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_dist_init()
143 struct kvm_vcpu *vcpu0 = kvm_get_vcpu(kvm, 0); in kvm_vgic_dist_init()
197 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in kvm_vgic_vcpu_init()
230 if (!irqchip_in_kernel(vcpu->kvm)) in kvm_vgic_vcpu_init()
238 mutex_lock(&vcpu->kvm->slots_lock); in kvm_vgic_vcpu_init()
240 mutex_unlock(&vcpu->kvm->slots_lock); in kvm_vgic_vcpu_init()
262 int vgic_init(struct kvm *kvm) in vgic_init() argument
264 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_init()
269 lockdep_assert_held(&kvm->arch.config_lock); in vgic_init()
271 if (vgic_initialized(kvm)) in vgic_init()
275 if (kvm->created_vcpus != atomic_read(&kvm->online_vcpus)) in vgic_init()
282 ret = kvm_vgic_dist_init(kvm, dist->nr_spis); in vgic_init()
287 kvm_for_each_vcpu(idx, vcpu, kvm) { in vgic_init()
308 if (vgic_has_its(kvm)) in vgic_init()
309 vgic_lpi_translation_cache_init(kvm); in vgic_init()
316 if (vgic_supports_direct_msis(kvm)) { in vgic_init()
317 ret = vgic_v4_init(kvm); in vgic_init()
322 kvm_for_each_vcpu(idx, vcpu, kvm) in vgic_init()
325 ret = kvm_vgic_setup_default_irq_routing(kvm); in vgic_init()
329 vgic_debug_init(kvm); in vgic_init()
343 static void kvm_vgic_dist_destroy(struct kvm *kvm) in kvm_vgic_dist_destroy() argument
345 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_dist_destroy()
364 if (vgic_has_its(kvm)) in kvm_vgic_dist_destroy()
365 vgic_lpi_translation_cache_destroy(kvm); in kvm_vgic_dist_destroy()
367 if (vgic_supports_direct_msis(kvm)) in kvm_vgic_dist_destroy()
368 vgic_v4_teardown(kvm); in kvm_vgic_dist_destroy()
385 static void __kvm_vgic_destroy(struct kvm *kvm) in __kvm_vgic_destroy() argument
390 lockdep_assert_held(&kvm->arch.config_lock); in __kvm_vgic_destroy()
392 vgic_debug_destroy(kvm); in __kvm_vgic_destroy()
394 kvm_for_each_vcpu(i, vcpu, kvm) in __kvm_vgic_destroy()
397 kvm_vgic_dist_destroy(kvm); in __kvm_vgic_destroy()
400 void kvm_vgic_destroy(struct kvm *kvm) in kvm_vgic_destroy() argument
402 mutex_lock(&kvm->arch.config_lock); in kvm_vgic_destroy()
403 __kvm_vgic_destroy(kvm); in kvm_vgic_destroy()
404 mutex_unlock(&kvm->arch.config_lock); in kvm_vgic_destroy()
413 int vgic_lazy_init(struct kvm *kvm) in vgic_lazy_init() argument
417 if (unlikely(!vgic_initialized(kvm))) { in vgic_lazy_init()
424 if (kvm->arch.vgic.vgic_model != KVM_DEV_TYPE_ARM_VGIC_V2) in vgic_lazy_init()
427 mutex_lock(&kvm->arch.config_lock); in vgic_lazy_init()
428 ret = vgic_init(kvm); in vgic_lazy_init()
429 mutex_unlock(&kvm->arch.config_lock); in vgic_lazy_init()
446 int kvm_vgic_map_resources(struct kvm *kvm) in kvm_vgic_map_resources() argument
448 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_map_resources()
453 if (likely(vgic_ready(kvm))) in kvm_vgic_map_resources()
456 mutex_lock(&kvm->slots_lock); in kvm_vgic_map_resources()
457 mutex_lock(&kvm->arch.config_lock); in kvm_vgic_map_resources()
458 if (vgic_ready(kvm)) in kvm_vgic_map_resources()
461 if (!irqchip_in_kernel(kvm)) in kvm_vgic_map_resources()
465 ret = vgic_v2_map_resources(kvm); in kvm_vgic_map_resources()
468 ret = vgic_v3_map_resources(kvm); in kvm_vgic_map_resources()
473 __kvm_vgic_destroy(kvm); in kvm_vgic_map_resources()
478 mutex_unlock(&kvm->arch.config_lock); in kvm_vgic_map_resources()
480 ret = vgic_register_dist_iodev(kvm, dist_base, type); in kvm_vgic_map_resources()
483 kvm_vgic_destroy(kvm); in kvm_vgic_map_resources()
485 mutex_unlock(&kvm->slots_lock); in kvm_vgic_map_resources()
489 mutex_unlock(&kvm->arch.config_lock); in kvm_vgic_map_resources()
490 mutex_unlock(&kvm->slots_lock); in kvm_vgic_map_resources()