summaryrefslogtreecommitdiffstats
path: root/virt
diff options
context:
space:
mode:
authorChristoffer Dall <christoffer.dall@linaro.org>2017-11-10 03:34:54 -0500
committerChristoffer Dall <christoffer.dall@linaro.org>2017-11-10 03:59:20 -0500
commit95b110ab9a093b5baf3a72e51f71279368d618e2 (patch)
treefa6139d0d7e8f904313731d73257e403db342810 /virt
parent3d1ad640f8c94a9ae9c7c8bbb311614bc0332a7e (diff)
KVM: arm/arm64: Don't queue VLPIs on INV/INVALL
Since VLPIs are injected directly by the hardware there's no need to mark these as pending in software and queue them on the AP list. Reviewed-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.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c
index c93ecd4a903b..a3754ec719c4 100644
--- a/virt/kvm/arm/vgic/vgic-its.c
+++ b/virt/kvm/arm/vgic/vgic-its.c
@@ -292,11 +292,14 @@ static int update_lpi_config(struct kvm *kvm, struct vgic_irq *irq,
292 irq->priority = LPI_PROP_PRIORITY(prop); 292 irq->priority = LPI_PROP_PRIORITY(prop);
293 irq->enabled = LPI_PROP_ENABLE_BIT(prop); 293 irq->enabled = LPI_PROP_ENABLE_BIT(prop);
294 294
295 vgic_queue_irq_unlock(kvm, irq, flags); 295 if (!irq->hw) {
296 } else { 296 vgic_queue_irq_unlock(kvm, irq, flags);
297 spin_unlock_irqrestore(&irq->irq_lock, flags); 297 return 0;
298 }
298 } 299 }
299 300
301 spin_unlock_irqrestore(&irq->irq_lock, flags);
302
300 if (irq->hw) 303 if (irq->hw)
301 return its_prop_update_vlpi(irq->host_irq, prop, needs_inv); 304 return its_prop_update_vlpi(irq->host_irq, prop, needs_inv);
302 305