KVM: arm/arm64: GICv4: Handle INT command applied to a VLPI
authorMarc Zyngier <marc.zyngier@arm.com>
Fri, 27 Oct 2017 14:28:40 +0000 (15:28 +0100)
committerChristoffer Dall <christoffer.dall@linaro.org>
Fri, 10 Nov 2017 08:29:36 +0000 (09:29 +0100)
If the guest issues an INT command targetting a VLPI, let's
call into the irq_set_irqchip_state() helper to make it pending
on the physical side.

This works just as well if userspace decides to inject an interrupt
using the normal userspace API...

Acked-by: Christoffer Dall <cdall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
virt/kvm/arm/vgic/vgic-its.c

index 54f81eb24a0756080ecdb47017d6c91d451712b2..590f794b73308979d02c83c311985c213107eaf2 100644 (file)
@@ -581,6 +581,10 @@ static int vgic_its_trigger_msi(struct kvm *kvm, struct vgic_its *its,
        if (err)
                return err;
 
+       if (irq->hw)
+               return irq_set_irqchip_state(irq->host_irq,
+                                            IRQCHIP_STATE_PENDING, true);
+
        spin_lock_irqsave(&irq->irq_lock, flags);
        irq->pending_latch = true;
        vgic_queue_irq_unlock(kvm, irq, flags);