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> >