aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Murzin <vladimir.murzin@arm.com>2016-09-12 10:49:18 -0400
committerChristoffer Dall <christoffer.dall@linaro.org>2016-09-22 07:21:47 -0400
commit7a1ff708286045a6664fbda716fd3cf8d63afadb (patch)
treee6d1273222732175e82e9f7ac7d94c90b6733300
parent19f0ece4395470b24826fc090de2795ecc9cf4a0 (diff)
KVM: arm64: vgic-its: Introduce config option to guard ITS specific code
By now ITS code guarded with KVM_ARM_VGIC_V3 config option which was introduced to hide everything specific to vgic-v3 from 32-bit world. We are going to support vgic-v3 in 32-bit world and KVM_ARM_VGIC_V3 will gone, but we don't have support for ITS there yet and we need to continue keeping ITS away. Introduce the new config option to prevent ITS code being build in 32-bit mode when support for vgic-v3 is done. Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com> Acked-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
-rw-r--r--arch/arm64/kvm/Kconfig4
-rw-r--r--virt/kvm/arm/vgic/vgic-kvm-device.c3
-rw-r--r--virt/kvm/arm/vgic/vgic-mmio-v3.c2
-rw-r--r--virt/kvm/arm/vgic/vgic.h4
4 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
index 9c9edc98d271..7ba91647d1c5 100644
--- a/arch/arm64/kvm/Kconfig
+++ b/arch/arm64/kvm/Kconfig
@@ -16,6 +16,9 @@ menuconfig VIRTUALIZATION
16 16
17if VIRTUALIZATION 17if VIRTUALIZATION
18 18
19config KVM_ARM_VGIC_V3_ITS
20 bool
21
19config KVM_ARM_VGIC_V3 22config KVM_ARM_VGIC_V3
20 bool 23 bool
21 24
@@ -35,6 +38,7 @@ config KVM
35 select HAVE_KVM_EVENTFD 38 select HAVE_KVM_EVENTFD
36 select HAVE_KVM_IRQFD 39 select HAVE_KVM_IRQFD
37 select KVM_ARM_VGIC_V3 40 select KVM_ARM_VGIC_V3
41 select KVM_ARM_VGIC_V3_ITS
38 select KVM_ARM_PMU if HW_PERF_EVENTS 42 select KVM_ARM_PMU if HW_PERF_EVENTS
39 select HAVE_KVM_MSI 43 select HAVE_KVM_MSI
40 select HAVE_KVM_IRQCHIP 44 select HAVE_KVM_IRQCHIP
diff --git a/virt/kvm/arm/vgic/vgic-kvm-device.c b/virt/kvm/arm/vgic/vgic-kvm-device.c
index 163b0578efc7..89ef9bcc6de6 100644
--- a/virt/kvm/arm/vgic/vgic-kvm-device.c
+++ b/virt/kvm/arm/vgic/vgic-kvm-device.c
@@ -223,9 +223,12 @@ int kvm_register_vgic_device(unsigned long type)
223 case KVM_DEV_TYPE_ARM_VGIC_V3: 223 case KVM_DEV_TYPE_ARM_VGIC_V3:
224 ret = kvm_register_device_ops(&kvm_arm_vgic_v3_ops, 224 ret = kvm_register_device_ops(&kvm_arm_vgic_v3_ops,
225 KVM_DEV_TYPE_ARM_VGIC_V3); 225 KVM_DEV_TYPE_ARM_VGIC_V3);
226
227#ifdef CONFIG_KVM_ARM_VGIC_V3_ITS
226 if (ret) 228 if (ret)
227 break; 229 break;
228 ret = kvm_vgic_register_its_device(); 230 ret = kvm_vgic_register_its_device();
231#endif
229 break; 232 break;
230#endif 233#endif
231 } 234 }
diff --git a/virt/kvm/arm/vgic/vgic-mmio-v3.c b/virt/kvm/arm/vgic/vgic-mmio-v3.c
index 90d81811fdda..acbe6915d657 100644
--- a/virt/kvm/arm/vgic/vgic-mmio-v3.c
+++ b/virt/kvm/arm/vgic/vgic-mmio-v3.c
@@ -42,6 +42,7 @@ u64 update_64bit_reg(u64 reg, unsigned int offset, unsigned int len,
42 return reg | ((u64)val << lower); 42 return reg | ((u64)val << lower);
43} 43}
44 44
45#ifdef CONFIG_KVM_ARM_VGIC_V3_ITS
45bool vgic_has_its(struct kvm *kvm) 46bool vgic_has_its(struct kvm *kvm)
46{ 47{
47 struct vgic_dist *dist = &kvm->arch.vgic; 48 struct vgic_dist *dist = &kvm->arch.vgic;
@@ -51,6 +52,7 @@ bool vgic_has_its(struct kvm *kvm)
51 52
52 return dist->has_its; 53 return dist->has_its;
53} 54}
55#endif
54 56
55static unsigned long vgic_mmio_read_v3_misc(struct kvm_vcpu *vcpu, 57static unsigned long vgic_mmio_read_v3_misc(struct kvm_vcpu *vcpu,
56 gpa_t addr, unsigned int len) 58 gpa_t addr, unsigned int len)
diff --git a/virt/kvm/arm/vgic/vgic.h b/virt/kvm/arm/vgic/vgic.h
index 6c4625c46368..100045f3d98a 100644
--- a/virt/kvm/arm/vgic/vgic.h
+++ b/virt/kvm/arm/vgic/vgic.h
@@ -84,11 +84,15 @@ void vgic_v3_enable(struct kvm_vcpu *vcpu);
84int vgic_v3_probe(const struct gic_kvm_info *info); 84int vgic_v3_probe(const struct gic_kvm_info *info);
85int vgic_v3_map_resources(struct kvm *kvm); 85int vgic_v3_map_resources(struct kvm *kvm);
86int vgic_register_redist_iodevs(struct kvm *kvm, gpa_t dist_base_address); 86int vgic_register_redist_iodevs(struct kvm *kvm, gpa_t dist_base_address);
87
88#ifdef CONFIG_KVM_ARM_VGIC_V3_ITS
87int vgic_register_its_iodevs(struct kvm *kvm); 89int vgic_register_its_iodevs(struct kvm *kvm);
88bool vgic_has_its(struct kvm *kvm); 90bool vgic_has_its(struct kvm *kvm);
89int kvm_vgic_register_its_device(void); 91int kvm_vgic_register_its_device(void);
90void vgic_enable_lpis(struct kvm_vcpu *vcpu); 92void vgic_enable_lpis(struct kvm_vcpu *vcpu);
91int vgic_its_inject_msi(struct kvm *kvm, struct kvm_msi *msi); 93int vgic_its_inject_msi(struct kvm *kvm, struct kvm_msi *msi);
94#endif
95
92#else 96#else
93static inline void vgic_v3_process_maintenance(struct kvm_vcpu *vcpu) 97static inline void vgic_v3_process_maintenance(struct kvm_vcpu *vcpu)
94{ 98{