| Message ID | 20260106092425.1529428-5-tabba@google.com |
|---|---|
| State | Handled Elsewhere |
| Headers | show |
| Series | KVM: selftests: Alignment fixes and arm64 MMU cleanup | expand |
On Tue, Jan 06, 2026, Fuad Tabba wrote: > To avoid code duplication, move page_align() to the shared `kvm_util.h` > header file. > > No functional change intended. > > Reviewed-by: Andrew Jones <andrew.jones@linux.dev> > Signed-off-by: Fuad Tabba <tabba@google.com> > --- > tools/testing/selftests/kvm/include/kvm_util.h | 5 +++++ > tools/testing/selftests/kvm/lib/arm64/processor.c | 5 ----- > tools/testing/selftests/kvm/lib/riscv/processor.c | 5 ----- > 3 files changed, 5 insertions(+), 10 deletions(-) > > diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h > index 81f4355ff28a..dabbe4c3b93f 100644 > --- a/tools/testing/selftests/kvm/include/kvm_util.h > +++ b/tools/testing/selftests/kvm/include/kvm_util.h > @@ -1258,6 +1258,11 @@ static inline int __vm_disable_nx_huge_pages(struct kvm_vm *vm) > return __vm_enable_cap(vm, KVM_CAP_VM_DISABLE_NX_HUGE_PAGES, 0); > } > > +static inline uint64_t page_align(struct kvm_vm *vm, uint64_t v) Maybe vm_page_align()? So that it's a bit more obvious when reading call sites that the alignment is done with respect to the guest's "base" page size, not the host's page size. > +{ > + return (v + vm->page_size - 1) & ~(vm->page_size - 1); > +} > + > /* > * Arch hook that is invoked via a constructor, i.e. before exeucting main(), > * to allow for arch-specific setup that is common to all tests, e.g. computing > diff --git a/tools/testing/selftests/kvm/lib/arm64/processor.c b/tools/testing/selftests/kvm/lib/arm64/processor.c > index 607a4e462984..143632917766 100644 > --- a/tools/testing/selftests/kvm/lib/arm64/processor.c > +++ b/tools/testing/selftests/kvm/lib/arm64/processor.c > @@ -21,11 +21,6 @@ > > static vm_vaddr_t exception_handlers; > > -static uint64_t page_align(struct kvm_vm *vm, uint64_t v) > -{ > - return (v + vm->page_size - 1) & ~(vm->page_size - 1); > -} > - > static uint64_t pgd_index(struct kvm_vm *vm, vm_vaddr_t gva) > { > unsigned int shift = (vm->pgtable_levels - 1) * (vm->page_shift - 3) + vm->page_shift; > diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/testing/selftests/kvm/lib/riscv/processor.c > index d5e8747b5e69..f8ff4bf938d9 100644 > --- a/tools/testing/selftests/kvm/lib/riscv/processor.c > +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c > @@ -26,11 +26,6 @@ bool __vcpu_has_ext(struct kvm_vcpu *vcpu, uint64_t ext) > return !ret && !!value; > } > > -static uint64_t page_align(struct kvm_vm *vm, uint64_t v) > -{ > - return (v + vm->page_size - 1) & ~(vm->page_size - 1); > -} > - > static uint64_t pte_addr(struct kvm_vm *vm, uint64_t entry) > { > return ((entry & PGTBL_PTE_ADDR_MASK) >> PGTBL_PTE_ADDR_SHIFT) << > -- > 2.52.0.351.gbe84eed79e-goog >
On Tue, 6 Jan 2026 at 19:46, Sean Christopherson <seanjc@google.com> wrote: > > On Tue, Jan 06, 2026, Fuad Tabba wrote: > > To avoid code duplication, move page_align() to the shared `kvm_util.h` > > header file. > > > > No functional change intended. > > > > Reviewed-by: Andrew Jones <andrew.jones@linux.dev> > > Signed-off-by: Fuad Tabba <tabba@google.com> > > --- > > tools/testing/selftests/kvm/include/kvm_util.h | 5 +++++ > > tools/testing/selftests/kvm/lib/arm64/processor.c | 5 ----- > > tools/testing/selftests/kvm/lib/riscv/processor.c | 5 ----- > > 3 files changed, 5 insertions(+), 10 deletions(-) > > > > diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h > > index 81f4355ff28a..dabbe4c3b93f 100644 > > --- a/tools/testing/selftests/kvm/include/kvm_util.h > > +++ b/tools/testing/selftests/kvm/include/kvm_util.h > > @@ -1258,6 +1258,11 @@ static inline int __vm_disable_nx_huge_pages(struct kvm_vm *vm) > > return __vm_enable_cap(vm, KVM_CAP_VM_DISABLE_NX_HUGE_PAGES, 0); > > } > > > > +static inline uint64_t page_align(struct kvm_vm *vm, uint64_t v) > > Maybe vm_page_align()? So that it's a bit more obvious when reading call sites > that the alignment is done with respect to the guest's "base" page size, not the > host's page size. Yes, that's clearer. I'll fix this. Thanks, /fuad > > +{ > > + return (v + vm->page_size - 1) & ~(vm->page_size - 1); > > +} > > + > > /* > > * Arch hook that is invoked via a constructor, i.e. before exeucting main(), > > * to allow for arch-specific setup that is common to all tests, e.g. computing > > diff --git a/tools/testing/selftests/kvm/lib/arm64/processor.c b/tools/testing/selftests/kvm/lib/arm64/processor.c > > index 607a4e462984..143632917766 100644 > > --- a/tools/testing/selftests/kvm/lib/arm64/processor.c > > +++ b/tools/testing/selftests/kvm/lib/arm64/processor.c > > @@ -21,11 +21,6 @@ > > > > static vm_vaddr_t exception_handlers; > > > > -static uint64_t page_align(struct kvm_vm *vm, uint64_t v) > > -{ > > - return (v + vm->page_size - 1) & ~(vm->page_size - 1); > > -} > > - > > static uint64_t pgd_index(struct kvm_vm *vm, vm_vaddr_t gva) > > { > > unsigned int shift = (vm->pgtable_levels - 1) * (vm->page_shift - 3) + vm->page_shift; > > diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/testing/selftests/kvm/lib/riscv/processor.c > > index d5e8747b5e69..f8ff4bf938d9 100644 > > --- a/tools/testing/selftests/kvm/lib/riscv/processor.c > > +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c > > @@ -26,11 +26,6 @@ bool __vcpu_has_ext(struct kvm_vcpu *vcpu, uint64_t ext) > > return !ret && !!value; > > } > > > > -static uint64_t page_align(struct kvm_vm *vm, uint64_t v) > > -{ > > - return (v + vm->page_size - 1) & ~(vm->page_size - 1); > > -} > > - > > static uint64_t pte_addr(struct kvm_vm *vm, uint64_t entry) > > { > > return ((entry & PGTBL_PTE_ADDR_MASK) >> PGTBL_PTE_ADDR_SHIFT) << > > -- > > 2.52.0.351.gbe84eed79e-goog > >
diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h index 81f4355ff28a..dabbe4c3b93f 100644 --- a/tools/testing/selftests/kvm/include/kvm_util.h +++ b/tools/testing/selftests/kvm/include/kvm_util.h @@ -1258,6 +1258,11 @@ static inline int __vm_disable_nx_huge_pages(struct kvm_vm *vm) return __vm_enable_cap(vm, KVM_CAP_VM_DISABLE_NX_HUGE_PAGES, 0); } +static inline uint64_t page_align(struct kvm_vm *vm, uint64_t v) +{ + return (v + vm->page_size - 1) & ~(vm->page_size - 1); +} + /* * Arch hook that is invoked via a constructor, i.e. before exeucting main(), * to allow for arch-specific setup that is common to all tests, e.g. computing diff --git a/tools/testing/selftests/kvm/lib/arm64/processor.c b/tools/testing/selftests/kvm/lib/arm64/processor.c index 607a4e462984..143632917766 100644 --- a/tools/testing/selftests/kvm/lib/arm64/processor.c +++ b/tools/testing/selftests/kvm/lib/arm64/processor.c @@ -21,11 +21,6 @@ static vm_vaddr_t exception_handlers; -static uint64_t page_align(struct kvm_vm *vm, uint64_t v) -{ - return (v + vm->page_size - 1) & ~(vm->page_size - 1); -} - static uint64_t pgd_index(struct kvm_vm *vm, vm_vaddr_t gva) { unsigned int shift = (vm->pgtable_levels - 1) * (vm->page_shift - 3) + vm->page_shift; diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/testing/selftests/kvm/lib/riscv/processor.c index d5e8747b5e69..f8ff4bf938d9 100644 --- a/tools/testing/selftests/kvm/lib/riscv/processor.c +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c @@ -26,11 +26,6 @@ bool __vcpu_has_ext(struct kvm_vcpu *vcpu, uint64_t ext) return !ret && !!value; } -static uint64_t page_align(struct kvm_vm *vm, uint64_t v) -{ - return (v + vm->page_size - 1) & ~(vm->page_size - 1); -} - static uint64_t pte_addr(struct kvm_vm *vm, uint64_t entry) { return ((entry & PGTBL_PTE_ADDR_MASK) >> PGTBL_PTE_ADDR_SHIFT) <<