summaryrefslogtreecommitdiffstats
path: root/virt
diff options
context:
space:
mode:
authorMarc Zyngier <marc.zyngier@arm.com>2017-10-27 10:28:40 -0400
committerChristoffer Dall <christoffer.dall@linaro.org>2017-11-10 03:29:36 -0500
commit1b7fe468b0ca6a4b47a447cf583455e445bf0246 (patch)
tree47ace00a5e9782ca0e755092581f91af084ae9e3 /virt
parent196b136498b35f1cd787b84465f235e69dbc757c (diff)
KVM: arm/arm64: GICv4: Handle INT command applied to a VLPI
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>
Diffstat (limited to 'virt')
-rw-r--r--virt/kvm/arm/vgic/vgic-its.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c
index 54f81eb24a07..590f794b7330 100644
--- a/virt/kvm/arm/vgic/vgic-its.c
+++ b/virt/kvm/arm/vgic/vgic-its.c
@@ -581,6 +581,10 @@ static int vgic_its_trigger_msi(struct kvm *kvm, struct vgic_its *its,
581 if (err) 581 if (err)
582 return err; 582 return err;
583 583
584 if (irq->hw)
585 return irq_set_irqchip_state(irq->host_irq,
586 IRQCHIP_STATE_PENDING, true);
587
584 spin_lock_irqsave(&irq->irq_lock, flags); 588 spin_lock_irqsave(&irq->irq_lock, flags);
585 irq->pending_latch = true; 589 irq->pending_latch = true;
586 vgic_queue_irq_unlock(kvm, irq, flags); 590 vgic_queue_irq_unlock(kvm, irq, flags);