[PATCH 09/15] ARM: KVM: vgic: make CPU and DIST sizes available to userspace

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux