Re: [RFC PATCH v2 29/51] mm: guestmem_hugetlb: Wrap HugeTLB as an allocator for guest_memfd

From: Ackerley Tng
Date: Fri May 16 2025 - 10:07:48 EST


Ackerley Tng <ackerleytng@xxxxxxxxxx> writes:

> guestmem_hugetlb is an allocator for guest_memfd. It wraps HugeTLB to
> provide huge folios for guest_memfd.
>
> This patch also introduces guestmem_allocator_operations as a set of
> operations that allocators for guest_memfd can provide. In a later
> patch, guest_memfd will use these operations to manage pages from an
> allocator.
>
> The allocator operations are memory-management specific and are placed
> in mm/ so key mm-specific functions do not have to be exposed
> unnecessarily.
>
> Signed-off-by: Ackerley Tng <ackerleytng@xxxxxxxxxx>
>
> Change-Id: I3cafe111ea7b3c84755d7112ff8f8c541c11136d
> ---
> include/linux/guestmem.h | 20 +++++
> include/uapi/linux/guestmem.h | 29 +++++++
> mm/Kconfig | 5 +-
> mm/guestmem_hugetlb.c | 159 ++++++++++++++++++++++++++++++++++
> 4 files changed, 212 insertions(+), 1 deletion(-)
> create mode 100644 include/linux/guestmem.h
> create mode 100644 include/uapi/linux/guestmem.h
>
> <snip>
>
> diff --git a/mm/Kconfig b/mm/Kconfig
> index 131adc49f58d..bb6e39e37245 100644
> --- a/mm/Kconfig
> +++ b/mm/Kconfig
> @@ -1218,7 +1218,10 @@ config SECRETMEM
>
> config GUESTMEM_HUGETLB
> bool "Enable guestmem_hugetlb allocator for guest_memfd"
> - depends on HUGETLBFS
> + select GUESTMEM
> + select HUGETLBFS
> + select HUGETLB_PAGE
> + select HUGETLB_PAGE_OPTIMIZE_VMEMMAP

My bad. I left out CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON=y in
my testing and just found that when it is set, I hit

BUG_ON(pte_page(ptep_get(pte)) != walk->reuse_page);

with the basic guest_memfd_test on splitting pages on allocation.

I'll follow up with the fix soon.

Another note about testing: I've been testing in a nested VM for the
development process:

1. Host
2. VM for development
3. Nested VM running kernel being developed
4. Nested nested VMs created during selftests

This series has not yet been tested on a physical host.

> help
> Enable this to make HugeTLB folios available to guest_memfd
> (KVM virtualization) as backing memory.
>
> <snip>
>