From d8bf88fa79324c46b5cdecb065428abeee18b6f4 Mon Sep 17 00:00:00 2001 From: Marc Zyngier Date: Thu, 6 Jan 2022 10:01:01 +0000 Subject: [PATCH] ANDROID: KVM: arm64: Expose topup_hyp_memcache() to the rest of KVM In order to simplify the implementation of an EL2-only version of MMIO guard, expose topup_hyp_memcache() and simplify its usage by only requiring a vcpu. Bug: 209580772 Change-Id: I4f54c57a9693cf7a3450f99fedc15ae32af09a31 Signed-off-by: Marc Zyngier [tabba@: original patch did the same for free_hyp_memcache(), but it's already exposed] Signed-off-by: Fuad Tabba Signed-off-by: Quentin Perret --- arch/arm64/include/asm/kvm_host.h | 2 +- arch/arm64/kvm/mmu.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index bac1038ace93..b7d175e73a1b 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -128,7 +128,7 @@ static inline void __free_hyp_memcache(struct kvm_hyp_memcache *mc, } void free_hyp_memcache(struct kvm_hyp_memcache *mc); -int topup_hyp_memcache(struct kvm_hyp_memcache *mc, unsigned long min_pages); +int topup_hyp_memcache(struct kvm_vcpu *vcpu); struct kvm_vmid { atomic64_t id; diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 946145a93d85..b23af71ebef6 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -878,12 +878,14 @@ void free_hyp_memcache(struct kvm_hyp_memcache *mc) kvm_host_va, NULL); } -int topup_hyp_memcache(struct kvm_hyp_memcache *mc, unsigned long min_pages) +int topup_hyp_memcache(struct kvm_vcpu *vcpu) { if (!is_protected_kvm_enabled()) return 0; - return __topup_hyp_memcache(mc, min_pages, hyp_mc_alloc_fn, + return __topup_hyp_memcache(&vcpu->arch.pkvm_memcache, + kvm_mmu_cache_min_pages(vcpu->kvm), + hyp_mc_alloc_fn, kvm_host_pa, NULL); } @@ -1234,7 +1236,6 @@ static int insert_ppage(struct kvm *kvm, struct kvm_pinned_page *ppage) static int pkvm_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, unsigned long hva) { - struct kvm_hyp_memcache *hyp_memcache = &vcpu->arch.pkvm_memcache; struct mm_struct *mm = current->mm; unsigned int flags = FOLL_HWPOISON | FOLL_LONGTERM | FOLL_WRITE; struct kvm_pinned_page *ppage; @@ -1243,7 +1244,7 @@ static int pkvm_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, u64 pfn; int ret; - ret = topup_hyp_memcache(hyp_memcache, kvm_mmu_cache_min_pages(kvm)); + ret = topup_hyp_memcache(vcpu); if (ret) return -ENOMEM;