Lines Matching defs:kvm
10 #include <kvm/arm_vgic.h>
46 * @kvm: The VM whose VGIC districutor should be initialized
52 void kvm_vgic_early_init(struct kvm *kvm)
54 struct vgic_dist *dist = &kvm->arch.vgic;
68 * @kvm: kvm struct pointer
71 int kvm_vgic_create(struct kvm *kvm, u32 type)
76 if (irqchip_in_kernel(kvm))
90 if (!lock_all_vcpus(kvm))
93 kvm_for_each_vcpu(i, vcpu, kvm) {
100 kvm->arch.max_vcpus = VGIC_V2_MAX_CPUS;
102 kvm->arch.max_vcpus = VGIC_V3_MAX_CPUS;
104 if (atomic_read(&kvm->online_vcpus) > kvm->arch.max_vcpus) {
109 kvm->arch.vgic.in_kernel = true;
110 kvm->arch.vgic.vgic_model = type;
112 kvm->arch.vgic.vgic_dist_base = VGIC_ADDR_UNDEF;
115 kvm->arch.vgic.vgic_cpu_base = VGIC_ADDR_UNDEF;
117 INIT_LIST_HEAD(&kvm->arch.vgic.rd_regions);
120 unlock_all_vcpus(kvm);
128 * @kvm: kvm struct pointer
131 static int kvm_vgic_dist_init(struct kvm *kvm, unsigned int nr_spis)
133 struct vgic_dist *dist = &kvm->arch.vgic;
134 struct kvm_vcpu *vcpu0 = kvm_get_vcpu(kvm, 0);
188 struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
221 if (!irqchip_in_kernel(vcpu->kvm))
229 mutex_lock(&vcpu->kvm->lock);
231 mutex_unlock(&vcpu->kvm->lock);
252 * Must be called with kvm->lock held!
254 int vgic_init(struct kvm *kvm)
256 struct vgic_dist *dist = &kvm->arch.vgic;
260 if (vgic_initialized(kvm))
264 if (kvm->created_vcpus != atomic_read(&kvm->online_vcpus))
271 ret = kvm_vgic_dist_init(kvm, dist->nr_spis);
276 kvm_for_each_vcpu(idx, vcpu, kvm) {
297 if (vgic_has_its(kvm))
298 vgic_lpi_translation_cache_init(kvm);
305 if (vgic_supports_direct_msis(kvm)) {
306 ret = vgic_v4_init(kvm);
311 kvm_for_each_vcpu(i, vcpu, kvm)
314 ret = kvm_vgic_setup_default_irq_routing(kvm);
318 vgic_debug_init(kvm);
327 static void kvm_vgic_dist_destroy(struct kvm *kvm)
329 struct vgic_dist *dist = &kvm->arch.vgic;
339 if (kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) {
347 if (vgic_has_its(kvm))
348 vgic_lpi_translation_cache_destroy(kvm);
350 if (vgic_supports_direct_msis(kvm))
351 vgic_v4_teardown(kvm);
367 /* To be called with kvm->lock held */
368 static void __kvm_vgic_destroy(struct kvm *kvm)
373 vgic_debug_destroy(kvm);
375 kvm_for_each_vcpu(i, vcpu, kvm)
378 kvm_vgic_dist_destroy(kvm);
381 void kvm_vgic_destroy(struct kvm *kvm)
383 mutex_lock(&kvm->lock);
384 __kvm_vgic_destroy(kvm);
385 mutex_unlock(&kvm->lock);
392 * @kvm: kvm struct pointer
394 int vgic_lazy_init(struct kvm *kvm)
398 if (unlikely(!vgic_initialized(kvm))) {
405 if (kvm->arch.vgic.vgic_model != KVM_DEV_TYPE_ARM_VGIC_V2)
408 mutex_lock(&kvm->lock);
409 ret = vgic_init(kvm);
410 mutex_unlock(&kvm->lock);
424 * @kvm: kvm struct pointer
426 int kvm_vgic_map_resources(struct kvm *kvm)
428 struct vgic_dist *dist = &kvm->arch.vgic;
431 mutex_lock(&kvm->lock);
432 if (!irqchip_in_kernel(kvm))
436 ret = vgic_v2_map_resources(kvm);
438 ret = vgic_v3_map_resources(kvm);
441 __kvm_vgic_destroy(kvm);
444 mutex_unlock(&kvm->lock);
542 "kvm/arm/vgic:starting",