• Christoffer Dall's avatar
    KVM: arm/arm64: Move VGIC APR save/restore to vgic put/load · 923a2e30
    Christoffer Dall authored
    The APRs can only have bits set when the guest acknowledges an interrupt
    in the LR and can only have a bit cleared when the guest EOIs an
    interrupt in the LR.  Therefore, if we have no LRs with any
    pending/active interrupts, the APR cannot change value and there is no
    need to clear it on every exit from the VM (hint: it will have already
    been cleared when we exited the guest the last time with the LRs all
    EOIed).
    
    The only case we need to take care of is when we migrate the VCPU away
    from a CPU or migrate a new VCPU onto a CPU, or when we return to
    userspace to capture the state of the VCPU for migration.  To make sure
    this works, factor out the APR save/restore functionality into separate
    functions called from the VCPU (and by extension VGIC) put/load hooks.
    Reviewed-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    923a2e30
vgic-v3-sr.c 23.5 KB