Lines Matching refs:kvm

15 static void unlock_vcpus(struct kvm *kvm, int vcpu_lock_idx)  in unlock_vcpus()  argument
20 tmp_vcpu = kvm_get_vcpu(kvm, vcpu_lock_idx); in unlock_vcpus()
25 static void unlock_all_vcpus(struct kvm *kvm) in unlock_all_vcpus() argument
27 unlock_vcpus(kvm, atomic_read(&kvm->online_vcpus) - 1); in unlock_all_vcpus()
30 static bool lock_all_vcpus(struct kvm *kvm) in lock_all_vcpus() argument
35 kvm_for_each_vcpu(c, tmp_vcpu, kvm) { in lock_all_vcpus()
37 unlock_vcpus(kvm, c - 1); in lock_all_vcpus()
49 struct kvm *kvm = dev->kvm; in aia_create() local
52 if (irqchip_in_kernel(kvm)) in aia_create()
56 if (!lock_all_vcpus(kvm)) in aia_create()
59 kvm_for_each_vcpu(i, vcpu, kvm) { in aia_create()
65 kvm->arch.aia.in_kernel = true; in aia_create()
68 unlock_all_vcpus(kvm); in aia_create()
77 static int aia_config(struct kvm *kvm, unsigned long type, in aia_config() argument
80 struct kvm_aia *aia = &kvm->arch.aia; in aia_config()
83 if (write && kvm_riscv_aia_initialized(kvm)) in aia_config()
171 static int aia_aplic_addr(struct kvm *kvm, u64 *addr, bool write) in aia_aplic_addr() argument
173 struct kvm_aia *aia = &kvm->arch.aia; in aia_aplic_addr()
177 if (kvm_riscv_aia_initialized(kvm)) in aia_aplic_addr()
190 static int aia_imsic_addr(struct kvm *kvm, u64 *addr, in aia_imsic_addr() argument
196 vcpu = kvm_get_vcpu(kvm, vcpu_idx); in aia_imsic_addr()
203 if (kvm_riscv_aia_initialized(kvm)) in aia_imsic_addr()
251 static int aia_init(struct kvm *kvm) in aia_init() argument
257 struct kvm_aia *aia = &kvm->arch.aia; in aia_init()
261 if (kvm_riscv_aia_initialized(kvm)) in aia_init()
265 if (kvm->created_vcpus != atomic_read(&kvm->online_vcpus)) in aia_init()
277 ret = kvm_riscv_aia_aplic_init(kvm); in aia_init()
282 kvm_for_each_vcpu(idx, vcpu, kvm) { in aia_init()
310 kvm->arch.aia.initialized = true; in aia_init()
316 vcpu = kvm_get_vcpu(kvm, i); in aia_init()
321 kvm_riscv_aia_aplic_cleanup(kvm); in aia_init()
338 mutex_lock(&dev->kvm->lock); in aia_set_attr()
339 r = aia_config(dev->kvm, type, &nr, true); in aia_set_attr()
340 mutex_unlock(&dev->kvm->lock); in aia_set_attr()
348 nr_vcpus = atomic_read(&dev->kvm->online_vcpus); in aia_set_attr()
349 mutex_lock(&dev->kvm->lock); in aia_set_attr()
351 r = aia_aplic_addr(dev->kvm, &addr, true); in aia_set_attr()
353 r = aia_imsic_addr(dev->kvm, &addr, in aia_set_attr()
355 mutex_unlock(&dev->kvm->lock); in aia_set_attr()
362 mutex_lock(&dev->kvm->lock); in aia_set_attr()
363 r = aia_init(dev->kvm); in aia_set_attr()
364 mutex_unlock(&dev->kvm->lock); in aia_set_attr()
373 mutex_lock(&dev->kvm->lock); in aia_set_attr()
374 r = kvm_riscv_aia_aplic_set_attr(dev->kvm, type, nr); in aia_set_attr()
375 mutex_unlock(&dev->kvm->lock); in aia_set_attr()
382 mutex_lock(&dev->kvm->lock); in aia_set_attr()
383 r = kvm_riscv_aia_imsic_rw_attr(dev->kvm, type, true, &v); in aia_set_attr()
384 mutex_unlock(&dev->kvm->lock); in aia_set_attr()
405 mutex_lock(&dev->kvm->lock); in aia_get_attr()
406 r = aia_config(dev->kvm, type, &nr, false); in aia_get_attr()
407 mutex_unlock(&dev->kvm->lock); in aia_get_attr()
419 nr_vcpus = atomic_read(&dev->kvm->online_vcpus); in aia_get_attr()
420 mutex_lock(&dev->kvm->lock); in aia_get_attr()
422 r = aia_aplic_addr(dev->kvm, &addr, false); in aia_get_attr()
424 r = aia_imsic_addr(dev->kvm, &addr, in aia_get_attr()
426 mutex_unlock(&dev->kvm->lock); in aia_get_attr()
438 mutex_lock(&dev->kvm->lock); in aia_get_attr()
439 r = kvm_riscv_aia_aplic_get_attr(dev->kvm, type, &nr); in aia_get_attr()
440 mutex_unlock(&dev->kvm->lock); in aia_get_attr()
452 mutex_lock(&dev->kvm->lock); in aia_get_attr()
453 r = kvm_riscv_aia_imsic_rw_attr(dev->kvm, type, false, &v); in aia_get_attr()
454 mutex_unlock(&dev->kvm->lock); in aia_get_attr()
485 nr_vcpus = atomic_read(&dev->kvm->online_vcpus); in aia_has_attr()
498 return kvm_riscv_aia_aplic_has_attr(dev->kvm, attr->attr); in aia_has_attr()
500 return kvm_riscv_aia_imsic_has_attr(dev->kvm, attr->attr); in aia_has_attr()
518 if (!kvm_riscv_aia_initialized(vcpu->kvm)) in kvm_riscv_vcpu_aia_update()
536 if (!kvm_riscv_aia_initialized(vcpu->kvm)) in kvm_riscv_vcpu_aia_reset()
567 if (!kvm_riscv_aia_initialized(vcpu->kvm)) in kvm_riscv_vcpu_aia_deinit()
574 int kvm_riscv_aia_inject_msi_by_id(struct kvm *kvm, u32 hart_index, in kvm_riscv_aia_inject_msi_by_id() argument
581 if (!kvm_riscv_aia_initialized(kvm)) in kvm_riscv_aia_inject_msi_by_id()
585 kvm_for_each_vcpu(idx, vcpu, kvm) { in kvm_riscv_aia_inject_msi_by_id()
595 int kvm_riscv_aia_inject_msi(struct kvm *kvm, struct kvm_msi *msi) in kvm_riscv_aia_inject_msi() argument
601 struct kvm_aia *aia = &kvm->arch.aia; in kvm_riscv_aia_inject_msi()
605 if (!kvm_riscv_aia_initialized(kvm)) in kvm_riscv_aia_inject_msi()
616 kvm_for_each_vcpu(idx, vcpu, kvm) { in kvm_riscv_aia_inject_msi()
629 int kvm_riscv_aia_inject_irq(struct kvm *kvm, unsigned int irq, bool level) in kvm_riscv_aia_inject_irq() argument
632 if (!kvm_riscv_aia_initialized(kvm)) in kvm_riscv_aia_inject_irq()
636 return kvm_riscv_aia_aplic_inject(kvm, irq, level); in kvm_riscv_aia_inject_irq()
639 void kvm_riscv_aia_init_vm(struct kvm *kvm) in kvm_riscv_aia_init_vm() argument
641 struct kvm_aia *aia = &kvm->arch.aia; in kvm_riscv_aia_init_vm()
665 void kvm_riscv_aia_destroy_vm(struct kvm *kvm) in kvm_riscv_aia_destroy_vm() argument
668 if (!kvm_riscv_aia_initialized(kvm)) in kvm_riscv_aia_destroy_vm()
672 kvm_riscv_aia_aplic_cleanup(kvm); in kvm_riscv_aia_destroy_vm()