Thread (45 messages) flat view 45 messages, 8 authors, 3d ago

Re: [PATCH v2 10/20] KVM: selftests: Add a wrapper API to allocate multiple page table pages

From: Anup Patel <anup@brainfault.org>
Date: 2026-09-07 08:24:07
Also in: kvm, kvm-riscv, kvmarm, linux-riscv, lkml, loongarch

On Wed, Sep 2, 2026 at 10:11 PM Sean Christopherson [off-list ref] wrote:
Add vm_alloc_page_table_pages() and use it throughout arch code to replace
open coded equivalents.

No functional change intended.

Reviewed-by: Itaru Kitayama <redacted>
Tested-by: Itaru Kitayama <redacted>
Signed-off-by: Sean Christopherson <seanjc@google.com>
LGTM.

For KVM RISC-V:
Acked-by: Anup Patel <anup@brainfault.org>

Regards,
Anup

quoted hunk ↗ jump to hunk
---
 tools/testing/selftests/kvm/include/kvm_util.h    | 9 +++++++--
 tools/testing/selftests/kvm/lib/arm64/processor.c | 4 +---
 tools/testing/selftests/kvm/lib/riscv/processor.c | 4 +---
 tools/testing/selftests/kvm/lib/s390/processor.c  | 8 ++------
 4 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h
index d9d39a8894e2..c56f342b16fd 100644
--- a/tools/testing/selftests/kvm/include/kvm_util.h
+++ b/tools/testing/selftests/kvm/include/kvm_util.h
@@ -1013,10 +1013,15 @@ static inline gpa_t vm_phy_page_alloc(struct kvm_vm *vm, gpa_t min_gpa,
        return vm_phy_pages_alloc(vm, 1, min_gpa, memslot);
 }

+static inline gpa_t vm_alloc_page_table_pages(struct kvm_vm *vm, size_t nr_pages)
+{
+       return vm_phy_pages_alloc(vm, nr_pages, KVM_GUEST_PAGE_TABLE_MIN_PADDR,
+                                 vm->memslots[MEM_REGION_PT]);
+}
+
 static inline gpa_t vm_alloc_page_table(struct kvm_vm *vm)
 {
-       return vm_phy_page_alloc(vm, KVM_GUEST_PAGE_TABLE_MIN_PADDR,
-                                vm->memslots[MEM_REGION_PT]);
+       return vm_alloc_page_table_pages(vm, 1);
 }

 /*
diff --git a/tools/testing/selftests/kvm/lib/arm64/processor.c b/tools/testing/selftests/kvm/lib/arm64/processor.c
index 01325bf4d36f..2dcaa2c4a038 100644
--- a/tools/testing/selftests/kvm/lib/arm64/processor.c
+++ b/tools/testing/selftests/kvm/lib/arm64/processor.c
@@ -115,9 +115,7 @@ void virt_arch_pgd_alloc(struct kvm_vm *vm)
        if (vm->mmu.pgd_created)
                return;

-       vm->mmu.pgd = vm_phy_pages_alloc(vm, nr_pages,
-                                        KVM_GUEST_PAGE_TABLE_MIN_PADDR,
-                                        vm->memslots[MEM_REGION_PT]);
+       vm->mmu.pgd = vm_alloc_page_table_pages(vm, nr_pages);
        vm->mmu.pgd_created = true;
 }
diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/testing/selftests/kvm/lib/riscv/processor.c
index ded5429f3448..c175dcd14114 100644
--- a/tools/testing/selftests/kvm/lib/riscv/processor.c
+++ b/tools/testing/selftests/kvm/lib/riscv/processor.c
@@ -69,9 +69,7 @@ void virt_arch_pgd_alloc(struct kvm_vm *vm)
        if (vm->mmu.pgd_created)
                return;

-       vm->mmu.pgd = vm_phy_pages_alloc(vm, nr_pages,
-                                        KVM_GUEST_PAGE_TABLE_MIN_PADDR,
-                                        vm->memslots[MEM_REGION_PT]);
+       vm->mmu.pgd = vm_alloc_page_table_pages(vm, nr_pages);
        vm->mmu.pgd_created = true;
 }
diff --git a/tools/testing/selftests/kvm/lib/s390/processor.c b/tools/testing/selftests/kvm/lib/s390/processor.c
index fb9dab92d4d1..33f49d743b5f 100644
--- a/tools/testing/selftests/kvm/lib/s390/processor.c
+++ b/tools/testing/selftests/kvm/lib/s390/processor.c
@@ -20,9 +20,7 @@ void virt_arch_pgd_alloc(struct kvm_vm *vm)
        if (vm->mmu.pgd_created)
                return;

-       gpa = vm_phy_pages_alloc(vm, PAGES_PER_REGION,
-                                  KVM_GUEST_PAGE_TABLE_MIN_PADDR,
-                                  vm->memslots[MEM_REGION_PT]);
+       gpa = vm_alloc_page_table_pages(vm, PAGES_PER_REGION);
        memset(addr_gpa2hva(vm, gpa), 0xff, PAGES_PER_REGION * vm->page_size);

        vm->mmu.pgd = gpa;
@@ -38,9 +36,7 @@ static u64 virt_alloc_region(struct kvm_vm *vm, int ri)
 {
        u64 taddr;

-       taddr = vm_phy_pages_alloc(vm,  ri < 4 ? PAGES_PER_REGION : 1,
-                                  KVM_GUEST_PAGE_TABLE_MIN_PADDR,
-                                  vm->memslots[MEM_REGION_PT]);
+       taddr = vm_alloc_page_table_pages(vm, ri < 4 ? PAGES_PER_REGION : 1);
        memset(addr_gpa2hva(vm, taddr), 0xff, PAGES_PER_REGION * vm->page_size);

        return (taddr & REGION_ENTRY_ORIGIN)
--
2.55.0.966.g6673acef38-goog
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help