Re: [PATCH] hugetlb: simplify hugetlb handling in follow_page_mask

From: David Hildenbrand
Date: Mon Sep 05 2022 - 04:39:10 EST


On 03.09.22 09:07, Christophe Leroy wrote:
+Resending with valid powerpc list address

Le 02/09/2022 à 20:52, David Hildenbrand a écrit :
Adding Christophe on Cc:

Christophe do you know if is_hugepd is true for all hugetlb entries, not
just hugepd?

is_hugepd() is true if and only if the directory entry points to a huge
page directory and not to the normal lower level directory.

As far as I understand if the directory entry is not pointing to any
lower directory but is a huge page entry, pXd_leaf() is true.



On systems without hugepd entries, I guess ptdump skips all hugetlb entries.
Sigh!

As far as I can see, ptdump_pXd_entry() handles the pXd_leaf() case.


IIUC, the idea of ptdump_walk_pgd() is to dump page tables even outside
VMAs (for debugging purposes?).

I cannot convince myself that that's a good idea when only holding the
mmap lock in read mode, because we can just see page tables getting
freed concurrently e.g., during concurrent munmap() ... while holding
the mmap lock in read we may only walk inside VMA boundaries.

That then raises the questions if we're only calling this on special MMs
(e.g., init_mm) whereby we cannot really see concurrent munmap() and
where we shouldn't have hugetlb mappings or hugepd entries.

At least on powerpc, PTDUMP handles only init_mm.

Hugepage are used at least on powerpc 8xx for linear memory mapping, see

commit 34536d780683 ("powerpc/8xx: Add a function to early map kernel
via huge pages")
commit cf209951fa7f ("powerpc/8xx: Map linear memory with huge pages")

hugepds may also be used in the future to use huge pages for vmap and
vmalloc, see commit a6a8f7c4aa7e ("powerpc/8xx: add support for huge
pages on VMAP and VMALLOC")

As far as I know, ppc64 also use huge pages for VMAP and VMALLOC, see

commit d909f9109c30 ("powerpc/64s/radix: Enable HAVE_ARCH_HUGE_VMAP")
commit 8abddd968a30 ("powerpc/64s/radix: Enable huge vmalloc mappings")

There is a difference between an ordinary huge mapping (e.g., as used for THP) and a a hugetlb mapping.

Our current understanding is that hugepd only applies to hugetlb. Wouldn't vmap/vmalloc user ordinary huge pmd entries instead of hugepd?

--
Thanks,

David / dhildenb