Thread (7 messages) 7 messages, 3 authors, 2022-09-05

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

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2022-09-04 11:49:50
Also in: linux-mm, lkml

Christophe Leroy [off-list ref] writes:
+Resending with valid powerpc list address

Le 02/09/2022 à 20:52, David Hildenbrand a écrit :
quoted
quoted
quoted
quoted
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.
Yes.

Though historically it's pXd_huge() which is used to test that, which is
gated by CONFIG_HUGETLB_PAGE.

The leaf versions are newer and test whether the entry is a PTE
regardless of whether CONFIG_HUGETLB_PAGE is enabled. Which is needed
for PTDUMP if the kernel mapping uses huge pages independently of
CONFIG_HUGETLB_PAGE, which is true on at least powerpc.
quoted
quoted
quoted
quoted
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.
quoted
quoted
quoted
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")
64-bit also uses huge pages for the kernel linear mapping (aka. direct
mapping), and on newer systems (>= Power9) those also appear in the
kernel page tables.

cheers
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help