• Christoffer Dall's avatar
    arm/arm64: KVM: Support edge-triggered forwarded interrupts · 8fe2f19e
    Christoffer Dall authored
    We mark edge-triggered interrupts with the HW bit set as queued to
    prevent the VGIC code from injecting LRs with both the Active and
    Pending bits set at the same time while also setting the HW bit,
    because the hardware does not support this.
    
    However, this means that we must also clear the queued flag when we sync
    back a LR where the state on the physical distributor went from active
    to inactive because the guest deactivated the interrupt.  At this point
    we must also check if the interrupt is pending on the distributor, and
    tell the VGIC to queue it again if it is.
    
    Since these actions on the sync path are extremely close to those for
    level-triggered interrupts, rename process_level_irq to
    process_queued_irq, allowing it to cater for both cases.
    Signed-off-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
    8fe2f19e
vgic.c 63.9 KB