• Christoffer Dall's avatar
    KVM: arm/arm64: Don't cache the timer IRQ level · 70450a9f
    Christoffer Dall authored
    The timer logic was designed after a strict idea of modeling an
    interrupt line level in software, meaning that only transitions in the
    level need to be reported to the VGIC.  This works well for the timer,
    because the arch timer code is in complete control of the device and can
    track the transitions of the line.
    
    However, as we are about to support using the HW bit in the VGIC not
    just for the timer, but also for VFIO which cannot track transitions of
    the interrupt line, we have to decide on an interface between the GIC
    and other subsystems for level triggered mapped interrupts, which both
    the timer and VFIO can use.
    
    VFIO only sees an asserting transition of the physical interrupt line,
    and tells the VGIC when that happens.  That means that part of the
    interrupt flow is offloaded to the hardware.
    
    To use the same interface for VFIO devices and the timer, we therefore
    have to change the timer (we cannot change VFIO because it doesn't know
    the details of the device it is assigning to a VM).
    
    Luckily, changing the timer is simple, we just need to stop 'caching'
    the line level, but instead let the VGIC know the state of the timer
    every time there is a potential change in the line level, and when the
    line level should be asserted from the timer ISR.  The VGIC can ignore
    extra notifications using its validate mechanism.
    Reviewed-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Reviewed-by: default avatarAndre Przywara <andre.przywara@arm.com>
    Reviewed-by: default avatarJulien Thierry <julien.thierry@arm.com>
    Signed-off-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
    70450a9f
arch_timer.c 24.7 KB