• 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/20240802155524.517137-3-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: Alexander Gordeev <agordeev@linux.ibm.com>
    Cc: Christian Borntraeger <borntraeger@linux.ibm.com>
    Cc: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Janosch Frank <frankja@linux.ibm.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Sven Schnelle <svens@linux.ibm.com>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Zi Yan <ziy@nvidia.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    aa39ca69
pagewalk.c 23.3 KB