Skip to content
  • Yang Shi's avatar
    mm: thp: fix false negative of shmem vma's THP eligibility · c0630669
    Yang Shi authored
    Commit 7635d9cb ("mm, thp, proc: report THP eligibility for each
    vma") introduced THPeligible bit for processes' smaps.  But, when
    checking the eligibility for shmem vma, __transparent_hugepage_enabled()
    is called to override the result from shmem_huge_enabled().  It may
    result in the anonymous vma's THP flag override shmem's.  For example,
    running a simple test which create THP for shmem, but with anonymous THP
    disabled, when reading the process's smaps, it may show:
    
      7fc92ec00000-7fc92f000000 rw-s 00000000 00:14 27764 /dev/shm/test
      Size:               4096 kB
      ...
      [snip]
      ...
      ShmemPmdMapped:     4096 kB
      ...
      [snip]
      ...
      THPeligible:    0
    
    And, /proc/meminfo does show THP allocated and PMD mapped too:
    
      ShmemHugePages:     4096 kB
      ShmemPmdMapped:     4096 kB
    
    This doesn't make too much sense.  The shmem objects should be treated
    separately from anonymous THP.  Calling shmem_huge_enabled() with
    checking MMF_DISABLE_THP sounds good enough.  And, we could skip stack
    and dax vma check since we already checked if the vma is shmem already.
    
    Also check if vma is suitable for THP by calling
    transhuge_vma_suitable().
    
    And minor fix to smaps output format and documentation.
    
    Link: http://lkml.kernel.org/r/1560401041-32207-3-git-send-email-yang.shi@linux.alibaba.com
    Fixes: 7635d9cb
    
     ("mm, thp, proc: report THP eligibility for each vma")
    Signed-off-by: default avatarYang Shi <yang.shi@linux.alibaba.com>
    Acked-by: default avatarHugh Dickins <hughd@google.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c0630669