Lines Matching defs:kvm
9 #include <kvm/arm_vgic.h>
17 int vgic_check_iorange(struct kvm *kvm, phys_addr_t ioaddr,
30 if (addr & ~kvm_phys_mask(kvm) || addr + size > kvm_phys_size(kvm))
36 static int vgic_check_type(struct kvm *kvm, int type_needed)
38 if (kvm->arch.vgic.vgic_model != type_needed)
44 int kvm_set_legacy_vgic_v2_addr(struct kvm *kvm, struct kvm_arm_device_addr *dev_addr)
46 struct vgic_dist *vgic = &kvm->arch.vgic;
49 mutex_lock(&kvm->arch.config_lock);
52 r = vgic_check_type(kvm, KVM_DEV_TYPE_ARM_VGIC_V2);
54 r = vgic_check_iorange(kvm, vgic->vgic_dist_base, dev_addr->addr,
60 r = vgic_check_type(kvm, KVM_DEV_TYPE_ARM_VGIC_V2);
62 r = vgic_check_iorange(kvm, vgic->vgic_cpu_base, dev_addr->addr,
71 mutex_unlock(&kvm->arch.config_lock);
78 * @kvm: pointer to the vm struct
91 static int kvm_vgic_addr(struct kvm *kvm, struct kvm_device_attr *attr, bool write)
94 struct vgic_dist *vgic = &kvm->arch.vgic;
109 mutex_lock(&kvm->slots_lock);
112 r = vgic_check_type(kvm, KVM_DEV_TYPE_ARM_VGIC_V2);
118 r = vgic_check_type(kvm, KVM_DEV_TYPE_ARM_VGIC_V2);
124 r = vgic_check_type(kvm, KVM_DEV_TYPE_ARM_VGIC_V3);
132 r = vgic_check_type(kvm, KVM_DEV_TYPE_ARM_VGIC_V3);
136 r = vgic_v3_set_redist_base(kvm, 0, addr, 0);
152 r = vgic_check_type(kvm, KVM_DEV_TYPE_ARM_VGIC_V3);
166 r = vgic_v3_set_redist_base(kvm, index,
171 rdreg = vgic_v3_rdist_region_from_index(kvm, index);
189 mutex_lock(&kvm->arch.config_lock);
191 r = vgic_check_iorange(kvm, *addr_ptr, addr, alignment, size);
197 mutex_unlock(&kvm->arch.config_lock);
200 mutex_unlock(&kvm->slots_lock);
215 r = kvm_vgic_addr(dev->kvm, attr, true);
236 mutex_lock(&dev->kvm->arch.config_lock);
238 if (vgic_ready(dev->kvm) || dev->kvm->arch.vgic.nr_spis)
241 dev->kvm->arch.vgic.nr_spis =
244 mutex_unlock(&dev->kvm->arch.config_lock);
251 mutex_lock(&dev->kvm->arch.config_lock);
252 r = vgic_init(dev->kvm);
253 mutex_unlock(&dev->kvm->arch.config_lock);
261 if (vgic_check_type(dev->kvm, KVM_DEV_TYPE_ARM_VGIC_V3))
263 mutex_lock(&dev->kvm->lock);
265 if (!lock_all_vcpus(dev->kvm)) {
266 mutex_unlock(&dev->kvm->lock);
270 mutex_lock(&dev->kvm->arch.config_lock);
271 r = vgic_v3_save_pending_tables(dev->kvm);
272 mutex_unlock(&dev->kvm->arch.config_lock);
273 unlock_all_vcpus(dev->kvm);
274 mutex_unlock(&dev->kvm->lock);
291 r = kvm_vgic_addr(dev->kvm, attr, false);
296 r = put_user(dev->kvm->arch.vgic.nr_spis +
307 return kvm_vgic_create(dev->kvm, type);
345 if (cpuid >= atomic_read(&dev->kvm->online_vcpus))
348 reg_attr->vcpu = kvm_get_vcpu(dev->kvm, cpuid);
357 * @dev: kvm device handle
358 * @attr: kvm device attribute
383 mutex_lock(&dev->kvm->lock);
385 if (!lock_all_vcpus(dev->kvm)) {
386 mutex_unlock(&dev->kvm->lock);
390 mutex_lock(&dev->kvm->arch.config_lock);
392 ret = vgic_init(dev->kvm);
409 mutex_unlock(&dev->kvm->arch.config_lock);
410 unlock_all_vcpus(dev->kvm);
411 mutex_unlock(&dev->kvm->lock);
469 .name = "kvm-arm-vgic-v2",
491 reg_attr->vcpu = kvm_mpidr_to_vcpu(dev->kvm, mpidr_reg);
493 reg_attr->vcpu = kvm_get_vcpu(dev->kvm, 0);
507 * @dev: kvm device handle
508 * @attr: kvm device attribute
544 mutex_lock(&dev->kvm->lock);
546 if (!lock_all_vcpus(dev->kvm)) {
547 mutex_unlock(&dev->kvm->lock);
551 mutex_lock(&dev->kvm->arch.config_lock);
553 if (unlikely(!vgic_initialized(dev->kvm))) {
589 mutex_unlock(&dev->kvm->arch.config_lock);
590 unlock_all_vcpus(dev->kvm);
591 mutex_unlock(&dev->kvm->lock);
666 .name = "kvm-arm-vgic-v3",