diff options
author | Marc Zyngier <marc.zyngier@arm.com> | 2017-12-07 06:46:15 -0500 |
---|---|---|
committer | Christoffer Dall <christoffer.dall@linaro.org> | 2017-12-18 04:53:23 -0500 |
commit | f384dcfe4d918c1d80477d290c22ce0093823771 (patch) | |
tree | 4f91db4a2617519c0f61da33971fa2f4cff61a75 /virt | |
parent | 7839c672e58bf62da8f2f0197fefb442c02ba1dd (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.c | 13 | ||||
-rw-r--r-- | virt/kvm/arm/arm.c | 2 |
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 | ||
723 | int kvm_timer_hyp_init(void) | 723 | int 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 | ||