Hi, Shuah,
Any comment on this series?

Thanks,
don

On 4/24/2024 3:44 PM, Dongsheng Zhang wrote:
> From: donsheng <[email protected]>
> 
> If the host was booted with the "default_hugepagesz=1G" kernel command-line
> parameter, running the NX hugepage test will fail with error "Invalid 
> argument"
> at the TEST_ASSERT line in kvm_util.c's __vm_mem_region_delete() function:
> static void __vm_mem_region_delete(struct kvm_vm *vm,
>                    struct userspace_mem_region *region,
>                    bool unlink)
> {
>     int ret;
>     ...
>     ret = munmap(region->mmap_start, region->mmap_size);
>     TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("munmap()", ret));
>     ...
> }
> 
> NX hugepage test creates a VM with a data slot of 6M size backed with huge
> pages. If the default hugetlb page size is set to 1G, calling mmap() with
> MAP_HUGETLB and a length of 6M will succeed but calling its matching munmap()
> will fail. Documentation/admin-guide/mm/hugetlbpage.rst specifies this 
> behavior:
> 
> "Syscalls that operate on memory backed by hugetlb pages only have their 
> lengths
> aligned to the native page size of the processor; they will normally fail with
> errno set to EINVAL or exclude hugetlb pages that extend beyond the length if
> not hugepage aligned.  For example, munmap(2) will fail if memory is backed by
> a hugetlb page and the length is smaller than the hugepage size."
> 
> Explicitly use MAP_HUGE_2MB in conjunction with MAP_HUGETLB to fix the issue.
> 
> Signed-off-by: donsheng <[email protected]>
> Suggested-by: Zide Chen <[email protected]>
> ---
>  tools/testing/selftests/kvm/x86_64/nx_huge_pages_test.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/testing/selftests/kvm/x86_64/nx_huge_pages_test.c 
> b/tools/testing/selftests/kvm/x86_64/nx_huge_pages_test.c
> index 17bbb96fc4df..146e9033e206 100644
> --- a/tools/testing/selftests/kvm/x86_64/nx_huge_pages_test.c
> +++ b/tools/testing/selftests/kvm/x86_64/nx_huge_pages_test.c
> @@ -129,7 +129,7 @@ void run_test(int reclaim_period_ms, bool 
> disable_nx_huge_pages,
>  
>       vcpu = vm_vcpu_add(vm, 0, guest_code);
>  
> -     vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS_HUGETLB,
> +     vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS_HUGETLB_2MB,
>                                   HPAGE_GPA, HPAGE_SLOT,
>                                   HPAGE_SLOT_NPAGES, 0);
>  

Reply via email to