Userspace needs to know how big the CPU and distrbutor interfaces are in order to map them at non overlapping addresses. Move both definitions to kvm.h. Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx> --- arch/arm/include/uapi/asm/kvm.h | 3 +++ arch/arm/kvm/vgic.c | 15 ++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/arch/arm/include/uapi/asm/kvm.h b/arch/arm/include/uapi/asm/kvm.h index b1c7871..769c3c8 100644 --- a/arch/arm/include/uapi/asm/kvm.h +++ b/arch/arm/include/uapi/asm/kvm.h @@ -54,6 +54,9 @@ struct kvm_regs { #define KVM_VGIC_V2_ADDR_TYPE_DIST 0 #define KVM_VGIC_V2_ADDR_TYPE_CPU 1 +#define KVM_VGIC_V2_DIST_SIZE 0x1000 +#define KVM_VGIC_V2_CPU_SIZE 0x2000 + struct kvm_vcpu_init { __u32 target; __u32 features[7]; diff --git a/arch/arm/kvm/vgic.c b/arch/arm/kvm/vgic.c index 6a51e0b..184652b 100644 --- a/arch/arm/kvm/vgic.c +++ b/arch/arm/kvm/vgic.c @@ -68,9 +68,6 @@ #define VGIC_ADDR_UNDEF (-1) #define IS_VGIC_ADDR_UNDEF(_x) ((_x) == VGIC_ADDR_UNDEF) -#define VGIC_DIST_SIZE 0x1000 -#define VGIC_CPU_SIZE 0x2000 - /* Physical address of vgic virtual cpu interface */ static phys_addr_t vgic_vcpu_base; @@ -685,7 +682,7 @@ bool vgic_handle_mmio(struct kvm_vcpu *vcpu, struct kvm_run *run, if (!irqchip_in_kernel(vcpu->kvm) || mmio->phys_addr < base || - (mmio->phys_addr + mmio->len) > (base + VGIC_DIST_SIZE)) + (mmio->phys_addr + mmio->len) > (base + KVM_VGIC_V2_DIST_SIZE)) return false; range = find_matching_range(vgic_ranges, mmio, base); @@ -1315,7 +1312,7 @@ int kvm_vgic_init(struct kvm *kvm) } ret = kvm_phys_addr_ioremap(kvm, kvm->arch.vgic.vgic_cpu_base, - vgic_vcpu_base, VGIC_CPU_SIZE); + vgic_vcpu_base, KVM_VGIC_V2_CPU_SIZE); if (ret) { kvm_err("Unable to remap VGIC CPU to VCPU\n"); goto out; @@ -1360,8 +1357,8 @@ static bool vgic_ioaddr_overlap(struct kvm *kvm) if (IS_VGIC_ADDR_UNDEF(dist) || IS_VGIC_ADDR_UNDEF(cpu)) return false; - if ((dist <= cpu && dist + VGIC_DIST_SIZE > cpu) || - (cpu <= dist && cpu + VGIC_CPU_SIZE > dist)) + if ((dist <= cpu && dist + KVM_VGIC_V2_DIST_SIZE > cpu) || + (cpu <= dist && cpu + KVM_VGIC_V2_CPU_SIZE > dist)) return true; return false; } @@ -1382,14 +1379,14 @@ int kvm_vgic_set_addr(struct kvm *kvm, unsigned long type, u64 addr) case KVM_VGIC_V2_ADDR_TYPE_DIST: if (!IS_VGIC_ADDR_UNDEF(vgic->vgic_dist_base)) return -EEXIST; - if (addr + VGIC_DIST_SIZE < addr) + if (addr + KVM_VGIC_V2_DIST_SIZE < addr) return -EINVAL; kvm->arch.vgic.vgic_dist_base = addr; break; case KVM_VGIC_V2_ADDR_TYPE_CPU: if (!IS_VGIC_ADDR_UNDEF(vgic->vgic_cpu_base)) return -EEXIST; - if (addr + VGIC_CPU_SIZE < addr) + if (addr + KVM_VGIC_V2_CPU_SIZE < addr) return -EINVAL; kvm->arch.vgic.vgic_cpu_base = addr; break; -- 1.8.0.1 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm