diff options
author | Christoffer Dall <christoffer.dall@linaro.org> | 2017-11-10 03:34:54 -0500 |
---|---|---|
committer | Christoffer Dall <christoffer.dall@linaro.org> | 2017-11-10 03:59:20 -0500 |
commit | 95b110ab9a093b5baf3a72e51f71279368d618e2 (patch) | |
tree | fa6139d0d7e8f904313731d73257e403db342810 /virt | |
parent | 3d1ad640f8c94a9ae9c7c8bbb311614bc0332a7e (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.c | 9 |
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 | ||