]> www.infradead.org Git - users/hch/misc.git/commitdiff
KVM: arm64: Add flags to kvm_hyp_memcache
authorVincent Donnefort <vdonnefort@google.com>
Thu, 13 Mar 2025 11:40:36 +0000 (11:40 +0000)
committerOliver Upton <oliver.upton@linux.dev>
Fri, 14 Mar 2025 07:56:29 +0000 (00:56 -0700)
Add flags to kvm_hyp_memcache and propagate the latter to the allocation
and free callbacks. This will later allow to account for memory, based
on the memcache configuration.

Signed-off-by: Vincent Donnefort <vdonnefort@google.com>
Acked-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20250313114038.1502357-2-vdonnefort@google.com
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/include/asm/kvm_host.h
arch/arm64/kvm/mmu.c

index 3a7ec98ef123807bf76a5dce86839acae3d577e0..12691ae23d4cfc9ec593518729d11fca33f9c429 100644 (file)
@@ -86,6 +86,7 @@ struct kvm_hyp_memcache {
        phys_addr_t head;
        unsigned long nr_pages;
        struct pkvm_mapping *mapping; /* only used from EL1 */
+       unsigned long flags;
 };
 
 static inline void push_hyp_memcache(struct kvm_hyp_memcache *mc,
index 1f55b0c7b11d942836917cda4c1c6c9d73804dd0..6107a3c8ccf63e8ef671dcbae898b3b79aa74fa7 100644 (file)
@@ -1086,12 +1086,12 @@ void kvm_free_stage2_pgd(struct kvm_s2_mmu *mmu)
        }
 }
 
-static void hyp_mc_free_fn(void *addr, void *unused)
+static void hyp_mc_free_fn(void *addr, void *mc)
 {
        free_page((unsigned long)addr);
 }
 
-static void *hyp_mc_alloc_fn(void *unused)
+static void *hyp_mc_alloc_fn(void *mc)
 {
        return (void *)__get_free_page(GFP_KERNEL_ACCOUNT);
 }
@@ -1102,7 +1102,7 @@ void free_hyp_memcache(struct kvm_hyp_memcache *mc)
                return;
 
        kfree(mc->mapping);
-       __free_hyp_memcache(mc, hyp_mc_free_fn, kvm_host_va, NULL);
+       __free_hyp_memcache(mc, hyp_mc_free_fn, kvm_host_va, mc);
 }
 
 int topup_hyp_memcache(struct kvm_hyp_memcache *mc, unsigned long min_pages)
@@ -1117,7 +1117,7 @@ int topup_hyp_memcache(struct kvm_hyp_memcache *mc, unsigned long min_pages)
        }
 
        return __topup_hyp_memcache(mc, min_pages, hyp_mc_alloc_fn,
-                                   kvm_host_pa, NULL);
+                                   kvm_host_pa, mc);
 }
 
 /**