• Christoffer Dall's avatar
    arm/arm64: KVM: Clear map->active on pend/active clear · 544c572e
    Christoffer Dall authored
    When a guest reboots or offlines/onlines CPUs, it is not uncommon for it
    to clear the pending and active states of an interrupt through the
    emulated VGIC distributor.  However, since the architected timers are
    defined by the architecture to be level triggered and the guest
    rightfully expects them to be that, but we emulate them as
    edge-triggered, we have to mimic level-triggered behavior for an
    edge-triggered virtual implementation.
    
    We currently do not signal the VGIC when the map->active field is true,
    because it indicates that the guest has already been signalled of the
    interrupt as required.  Normally this field is set to false when the
    guest deactivates the virtual interrupt through the sync path.
    
    We also need to catch the case where the guest deactivates the interrupt
    through the emulated distributor, again allowing guests to boot even if
    the original virtual timer signal hit before the guest's GIC
    initialization sequence is run.
    Reviewed-by: default avatarEric Auger <eric.auger@linaro.org>
    Signed-off-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
    544c572e
vgic.c 64.5 KB