From c32849c569a93bfa71a7727b28ce2a1a7db2239c Mon Sep 17 00:00:00 2001 From: Vincent Donnefort Date: Wed, 1 May 2024 11:48:46 +0100 Subject: [PATCH] ANDROID: KVM: arm64: Fix missing KVM stats accounting The KVM stat protected_hyp_mem give an insight into the hypervisor memory footprint. Sadly, some donations were omitted. Bug: 357781595 Bug: 222044477 Bug: 337946560 Change-Id: I96f97781886b11845c6db798fc39f5389f96375c Signed-off-by: Vincent Donnefort --- arch/arm64/kvm/handle_exit.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c index 47fe2269f4be..33b5e0bc32fa 100644 --- a/arch/arm64/kvm/handle_exit.c +++ b/arch/arm64/kvm/handle_exit.c @@ -373,12 +373,21 @@ static int handle_trap_exceptions(struct kvm_vcpu *vcpu) static int handle_hyp_req_mem(struct kvm_vcpu *vcpu, struct kvm_hyp_req *req) { + struct kvm *kvm = vcpu->kvm; + unsigned long nr_pages; + int ret; + switch (req->mem.dest) { case REQ_MEM_DEST_HYP_ALLOC: return __pkvm_topup_hyp_alloc(req->mem.nr_pages); case REQ_MEM_DEST_VCPU_MEMCACHE: - return topup_hyp_memcache(&vcpu->arch.stage2_mc, - req->mem.nr_pages, 0); + nr_pages = vcpu->arch.stage2_mc.nr_pages; + ret = topup_hyp_memcache(&vcpu->arch.stage2_mc, + req->mem.nr_pages, 0); + nr_pages = vcpu->arch.stage2_mc.nr_pages - nr_pages; + atomic64_add(nr_pages << PAGE_SHIFT, &kvm->stat.protected_hyp_mem); + + return ret; }; pr_warn("Unknown kvm_hyp_req mem dest: %d\n", req->mem.dest);