• Mike Kravetz's avatar
    mm: hugetlb: proc: check for hugetlb shared PMD in /proc/PID/smaps · 3489dbb6
    Mike Kravetz authored
    Patch series "Fixes for hugetlb mapcount at most 1 for shared PMDs".
    
    This issue of mapcount in hugetlb pages referenced by shared PMDs was
    discussed in [1].  The following two patches address user visible behavior
    caused by this issue.
    
    [1] https://lore.kernel.org/linux-mm/Y9BF+OCdWnCSilEu@monkey/
    
    
    This patch (of 2):
    
    A hugetlb page will have a mapcount of 1 if mapped by multiple processes
    via a shared PMD.  This is because only the first process increases the
    map count, and subsequent processes just add the shared PMD page to their
    page table.
    
    page_mapcount is being used to decide if a hugetlb page is shared or
    private in /proc/PID/smaps.  Pages referenced via a shared PMD were
    incorrectly being counted as private.
    
    To fix, check for a shared PMD if mapcount is 1.  If a shared PMD is found
    count the hugetlb page as shared.  A new helper to check for a shared PMD
    is added.
    
    [akpm@linux-foundation.org: simplification, per David]
    [akpm@linux-foundation.org: hugetlb.h: include page_ref.h for page_count()]
    Link: https://lkml.kernel.org/r/20230126222721.222195-2-mike.kravetz@oracle.com
    Fixes: 25ee01a2 ("mm: hugetlb: proc: add hugetlb-related fields to /proc/PID/smaps")
    Signed-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Acked-by: default avatarPeter Xu <peterx@redhat.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: James Houghton <jthoughton@google.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Naoya Horiguchi <naoya.horiguchi@linux.dev>
    Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com>
    Cc: Yang Shi <shy828301@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    3489dbb6
task_mmu.c 49.2 KB