From bf76ea0a21ea967c40cea17703daf82d01dd831e Mon Sep 17 00:00:00 2001 From: Vincent Donnefort Date: Wed, 26 Oct 2022 17:44:14 +0100 Subject: [PATCH] ANDROID: KVM: arm64: Flush nVHE hyp_vcpu memcache When using nVHE in protected mode, the host donates pages through an arch specific memcache the hyp can then pours in its local vcpu copy. The latter should be flushed on VM teardown. Bug: 237506543 Change-Id: Ic37d794ac33e9f844fa6ae1b4943febcdad5b033 Signed-off-by: Vincent Donnefort Signed-off-by: Quentin Perret --- arch/arm64/kvm/hyp/nvhe/pkvm.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/arm64/kvm/hyp/nvhe/pkvm.c b/arch/arm64/kvm/hyp/nvhe/pkvm.c index 18fc2d0a6e70..b684671d1f7d 100644 --- a/arch/arm64/kvm/hyp/nvhe/pkvm.c +++ b/arch/arm64/kvm/hyp/nvhe/pkvm.c @@ -830,6 +830,15 @@ int __pkvm_teardown_vm(pkvm_handle_t handle) for (idx = 0; idx < hyp_vm->nr_vcpus; ++idx) { struct pkvm_hyp_vcpu *hyp_vcpu = hyp_vm->vcpus[idx]; + struct kvm_hyp_memcache *vcpu_mc; + void *addr; + + vcpu_mc = &hyp_vcpu->vcpu.arch.pkvm_memcache; + while (vcpu_mc->nr_pages) { + addr = pop_hyp_memcache(vcpu_mc, hyp_phys_to_virt); + push_hyp_memcache(mc, addr, hyp_virt_to_phys); + unmap_donated_memory_noclear(addr, PAGE_SIZE); + } teardown_donated_memory(mc, hyp_vcpu, sizeof(*hyp_vcpu)); }