summaryrefslogtreecommitdiffstats
path: root/virt
diff options
context:
space:
mode:
authorMarc Zyngier <marc.zyngier@arm.com>2017-12-07 06:46:15 -0500
committerChristoffer Dall <christoffer.dall@linaro.org>2017-12-18 04:53:23 -0500
commitf384dcfe4d918c1d80477d290c22ce0093823771 (patch)
tree4f91db4a2617519c0f61da33971fa2f4cff61a75 /virt
parent7839c672e58bf62da8f2f0197fefb442c02ba1dd (diff)
KVM: arm/arm64: timer: Don't set irq as forwarded if no usable GIC
If we don't have a usable GIC, do not try to set the vcpu affinity as this is guaranteed to fail. Reported-by: Andre Przywara <andre.przywara@arm.com> Reviewed-by: Andre Przywara <andre.przywara@arm.com> Tested-by: Andre Przywara <andre.przywara@arm.com> Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Diffstat (limited to 'virt')
-rw-r--r--virt/kvm/arm/arch_timer.c13
-rw-r--r--virt/kvm/arm/arm.c2
2 files changed, 9 insertions, 6 deletions
diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c
index f9555b1e7f15..aa9adfafe12b 100644
--- a/virt/kvm/arm/arch_timer.c
+++ b/virt/kvm/arm/arch_timer.c
@@ -720,7 +720,7 @@ static int kvm_timer_dying_cpu(unsigned int cpu)
720 return 0; 720 return 0;
721} 721}
722 722
723int kvm_timer_hyp_init(void) 723int kvm_timer_hyp_init(bool has_gic)
724{ 724{
725 struct arch_timer_kvm_info *info; 725 struct arch_timer_kvm_info *info;
726 int err; 726 int err;
@@ -756,10 +756,13 @@ int kvm_timer_hyp_init(void)
756 return err; 756 return err;
757 } 757 }
758 758
759 err = irq_set_vcpu_affinity(host_vtimer_irq, kvm_get_running_vcpus()); 759 if (has_gic) {
760 if (err) { 760 err = irq_set_vcpu_affinity(host_vtimer_irq,
761 kvm_err("kvm_arch_timer: error setting vcpu affinity\n"); 761 kvm_get_running_vcpus());
762 goto out_free_irq; 762 if (err) {
763 kvm_err("kvm_arch_timer: error setting vcpu affinity\n");
764 goto out_free_irq;
765 }
763 } 766 }
764 767
765 kvm_info("virtual timer IRQ%d\n", host_vtimer_irq); 768 kvm_info("virtual timer IRQ%d\n", host_vtimer_irq);
diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c
index 6b60c98a6e22..2e43f9d42bd5 100644
--- a/virt/kvm/arm/arm.c
+++ b/virt/kvm/arm/arm.c
@@ -1326,7 +1326,7 @@ static int init_subsystems(void)
1326 /* 1326 /*
1327 * Init HYP architected timer support 1327 * Init HYP architected timer support
1328 */ 1328 */
1329 err = kvm_timer_hyp_init(); 1329 err = kvm_timer_hyp_init(vgic_present);
1330 if (err) 1330 if (err)
1331 goto out; 1331 goto out;
1332 1332