• David Hildenbrand's avatar
    mm/pagewalk: introduce folio_walk_start() + folio_walk_end() · aa39ca69
    David Hildenbrand authored
    We want to get rid of follow_page(), and have a more reasonable way to
    just lookup a folio mapped at a certain address, perform some checks while
    still under PTL, and then only conditionally grab a folio reference if
    really required.
    
    Further, we might want to get rid of some walk_page_range*() users that
    really only want to temporarily lookup a single folio at a single address.
    
    So let's add a new page table walker that does exactly that, similarly to
    GUP also being able to walk hugetlb VMAs.
    
    Add folio_walk_end() as a macro for now: the compiler is not easy to
    please with the pte_unmap()->kunmap_local().
    
    Note that one difference between follow_page() and get_user_pages(1) is
    that follow_page() will not trigger faults to get something mapped.  So
    folio_walk is at least currently not a replacement for get_user_pages(1),
    but could likely be extended/reused to achieve something similar in the
    future.
    
    Link: https://lkml.kernel.org/r/2024080215552...
    aa39ca69
pagewalk.c 23.3 KB