Commit cced50c9280ef7ca1af48080707a170efa1adfa0
1 parent
dbf20f9d81
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
arm/arm64: KVM: vgic: Clear queued flags on unqueue
If we unqueue a level-triggered interrupt completely, and the LR does not stick around in the active state (and will therefore no longer generate a maintenance interrupt), then we should clear the queued flag so that the vgic can actually queue this level-triggered interrupt at a later time and deal with its pending state then. Note: This should actually be properly fixed to handle the active state on the distributor. Acked-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Showing 1 changed file with 3 additions and 1 deletions Side-by-side Diff
virt/kvm/arm/vgic.c
... | ... | @@ -667,8 +667,10 @@ |
667 | 667 | * active), then the LR does not hold any useful info and can |
668 | 668 | * be marked as free for other use. |
669 | 669 | */ |
670 | - if (!(lr.state & LR_STATE_MASK)) | |
670 | + if (!(lr.state & LR_STATE_MASK)) { | |
671 | 671 | vgic_retire_lr(i, lr.irq, vcpu); |
672 | + vgic_irq_clear_queued(vcpu, lr.irq); | |
673 | + } | |
672 | 674 | |
673 | 675 | /* Finally update the VGIC state. */ |
674 | 676 | vgic_update_state(vcpu->kvm); |