Re: [RFC PATCH 01/57] mm: add pte_folio()
Kiryl Shutsemau <[email protected]>
| Newsgroups | org.kernel.vger.linux-trace-kernel,org.kernel.vger.bpf,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kvack.linux-mm |
|---|---|
| Message-ID | <aobZECx2aTUHP6n3@thinkstation> |
On Tue, Aug 18, 2026 at 07:09:48PM +0200, David Hildenbrand (Arm) wrote: > On 8/17/26 00:45, Kiryl Shutsemau wrote: > > From: "Kiryl Shutsemau (Meta)" <[email protected]> > > > > Callers that want the folio behind a present PTE spell it out as > > page_folio(pte_page(pte)). > > > > Add pte_folio() as the folio companion to pte_page(), and convert the > > callers in fs/proc/task_mmu.c and mm/hugetlb.c. > > > > Preparation for the anonymous collapse engine, which reads the folio > > behind a PTE in several places. > > [...] > > > > > +/** > > + * pte_folio - Return the folio mapped by a present PTE. > > + * @pte: A present page table entry. > > + * > > + * The folio companion to pte_page(); only meaningful for a present PTE > > + * that maps a struct-page-backed folio. > > + * > > + * Return: The folio containing the page @pte maps. > > + */ > > +static inline struct folio *pte_folio(pte_t pte) > > +{ > > + return page_folio(pte_page(pte)); > > +} > > There is a reason why most code doesn't need that: because they should be using > vm_normal_page() / vm_normal_folio(), or need the exact page and handle special > ptes differently (see gup.c that uses pte_page()). > > And other code that uses pte_page() doesn't really operate on folios AFAIKs. Fair. pte_folio() does not fit the abstraction as it stands, so I will drop it. I thought that maybe we can rework vm_normal_*() to be a predicate on a page table entry, so if it returns true the caller can safely use pxx_folio(). It would be a cleaner interface in my opinion. vm_ops->find_normal_page() breaks the idea, though. Xen (being the single user of the vm_op) wants the special bit to indicate a custom translation to the page here. A bool cannot describe this. Ugh.. -- Kiryl Shutsemau / Kirill A. Shutemov