]> git.baikalelectronics.ru Git - kernel.git/commit
KVM: arm/arm64: Move VGIC APR save/restore to vgic put/load
authorChristoffer Dall <christoffer.dall@linaro.org>
Wed, 4 Oct 2017 22:18:07 +0000 (00:18 +0200)
committerMarc Zyngier <marc.zyngier@arm.com>
Mon, 19 Mar 2018 10:53:21 +0000 (10:53 +0000)
commitfd315b24bb124a4613d3f202345b6ceddef44909
tree93d52068d4114a54cc5fe92c6eaca3b0be5d9223
parent26ba71f1e126ccb36cf781376d5b9e2039e909c2
KVM: arm/arm64: Move VGIC APR save/restore to vgic put/load

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: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
arch/arm/include/asm/kvm_hyp.h
arch/arm64/include/asm/kvm_hyp.h
virt/kvm/arm/hyp/vgic-v3-sr.c
virt/kvm/arm/vgic/vgic-v2.c
virt/kvm/arm/vgic/vgic-v3.c