• Christoffer Dall's avatar
    KVM: arm/arm64: Remove struct vgic_irq pending field · 8694e4da
    Christoffer Dall authored
    One of the goals behind the VGIC redesign was to get rid of cached or
    intermediate state in the data structures, but we decided to allow
    ourselves to precompute the pending value of an IRQ based on the line
    level and pending latch state.  However, this has now become difficult
    to base proper GICv3 save/restore on, because there is a potential to
    modify the pending state without knowing if an interrupt is edge or
    level configured.
    
    See the following post and related message for more background:
    https://lists.cs.columbia.edu/pipermail/kvmarm/2017-January/023195.html
    
    This commit gets rid of the precomputed pending field in favor of a
    function that calculates the value when needed, irq_is_pending().
    
    The soft_pending field is renamed to pending_latch to represent that
    this latch is the equivalent hardware latch which gets manipulated by
    the input signal for edge-triggered interrupts and when writing to the
    SPENDR/CPENDR registers.
    
    After this commit save/restore code should be able to simply restore the
    pending_latch state, line_level state, and config state in any order and
    get the desired result.
    Reviewed-by: default avatarAndre Przywara <andre.przywara@arm.com>
    Reviewed-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Tested-by: default avatarAndre Przywara <andre.przywara@arm.com>
    Signed-off-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
    8694e4da
vgic-mmio-v3.c 18.8 KB