• S
    mm: exclude HugeTLB pages from THP page_mapped() logic · 66ee95d1
    Steve Capper 提交于
    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: NSteve Capper <steve.capper@arm.com>
    Acked-by: NKirill 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: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    66ee95d1
mm.h 75.1 KB