mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 14:43:16 +00:00
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>
This commit is contained in:
parent
dbf20f9d81
commit
cced50c928
@ -667,8 +667,10 @@ static void vgic_unqueue_irqs(struct kvm_vcpu *vcpu)
|
|||||||
* active), then the LR does not hold any useful info and can
|
* active), then the LR does not hold any useful info and can
|
||||||
* be marked as free for other use.
|
* be marked as free for other use.
|
||||||
*/
|
*/
|
||||||
if (!(lr.state & LR_STATE_MASK))
|
if (!(lr.state & LR_STATE_MASK)) {
|
||||||
vgic_retire_lr(i, lr.irq, vcpu);
|
vgic_retire_lr(i, lr.irq, vcpu);
|
||||||
|
vgic_irq_clear_queued(vcpu, lr.irq);
|
||||||
|
}
|
||||||
|
|
||||||
/* Finally update the VGIC state. */
|
/* Finally update the VGIC state. */
|
||||||
vgic_update_state(vcpu->kvm);
|
vgic_update_state(vcpu->kvm);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user