• David Hildenbrand's avatar
    mm/rmap: convert folio_add_file_rmap_range() into folio_add_file_rmap_[pte|ptes|pmd]() · 68f03208
    David Hildenbrand authored
    Let's get rid of the compound parameter and instead define explicitly
    which mappings we're adding.  That is more future proof, easier to read
    and harder to mess up.
    
    Use an enum to express the granularity internally.  Make the compiler
    always special-case on the granularity by using __always_inline.  Replace
    the "compound" check by a switch-case that will be removed by the compiler
    completely.
    
    Add plenty of sanity checks with CONFIG_DEBUG_VM.  Replace the
    folio_test_pmd_mappable() check by a config check in the caller and sanity
    checks.  Convert the single user of folio_add_file_rmap_range().
    
    While at it, consistently use "int" instead of "unisgned int" in rmap code
    when dealing with mapcounts and the number of pages.
    
    This function design can later easily be extended to PUDs and to batch
    PMDs.  Note that for now we don't support anything bigger than PMD-sized
    folios (as we cleanly separated hugetlb handling).  Sanity checks will
    catch if that ever changes.
    
    Next up is removing page_remove_rmap() along with its "compound" parameter
    and smilarly converting all other rmap functions.
    
    Link: https://lkml.kernel.org/r/20231220224504.646757-8-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarYin Fengwei <fengwei.yin@intel.com>
    Reviewed-by: default avatarRyan Roberts <ryan.roberts@arm.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Peter Xu <peterx@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    68f03208
rmap.c 77.3 KB