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