KVM: arm/arm64: Fixup userspace irqchip static key optimization
authorChristoffer Dall <christoffer.dall@linaro.org>
Fri, 26 Jan 2018 15:20:22 +0000 (16:20 +0100)
committerChristoffer Dall <christoffer.dall@linaro.org>
Wed, 31 Jan 2018 09:10:49 +0000 (10:10 +0100)
When I introduced a static key to avoid work in the critical path for
userspace irqchips which is very rarely used, I accidentally messed up
my logic and used && where I should have used ||, because the point was
to short-circuit the evaluation in case userspace irqchips weren't even
in use.

This fixes an issue when running in-kernel irqchip VMs alongside
userspace irqchip VMs.

Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Fixes: c44c232ee2d3 ("KVM: arm/arm64: Avoid work when userspace iqchips are not used")
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
virt/kvm/arm/arch_timer.c

index 63cf828..fb6bd9b 100644 (file)
@@ -286,7 +286,7 @@ static void kvm_timer_update_irq(struct kvm_vcpu *vcpu, bool new_level,
        trace_kvm_timer_update_irq(vcpu->vcpu_id, timer_ctx->irq.irq,
                                   timer_ctx->irq.level);
 
-       if (!static_branch_unlikely(&userspace_irqchip_in_use) &&
+       if (!static_branch_unlikely(&userspace_irqchip_in_use) ||
            likely(irqchip_in_kernel(vcpu->kvm))) {
                ret = kvm_vgic_inject_irq(vcpu->kvm, vcpu->vcpu_id,
                                          timer_ctx->irq.irq,