Skip to content
  • Steve Capper's avatar
    mm: exclude HugeTLB pages from THP page_mapped() logic · 66ee95d1
    Steve Capper authored
    HugeTLB pages cannot be split, so we use the compound_mapcount to track
    rmaps.
    
    Currently page_mapped() will check the compound_mapcount, but will also
    go through the constituent pages of a THP compound page and query the
    individual _mapcount's too.
    
    Unfortunately, page_mapped() does not distinguish between HugeTLB and
    THP compound pages and assumes that a compound page always needs to have
    HPAGE_PMD_NR pages querying.
    
    For most cases when dealing with HugeTLB this is just inefficient, but
    for scenarios where the HugeTLB page size is less than the pmd block
    size (e.g.  when using contiguous bit on ARM) this can lead to crashes.
    
    This patch adjusts the page_mapped function such that we skip the
    unnecessary THP reference checks for HugeTLB pages.
    
    Fixes: e1534ae9
    
     ("mm: differentiate page_mapped() from page_mapcount() for compound pages")
    Signed-off-by: default avatarSteve Capper <steve.capper@arm.com>
    Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    66ee95d1