• Mike Kravetz's avatar
    hugetlb: add demote bool to gigantic page routines · 34d9e35b
    Mike Kravetz authored
    The routines remove_hugetlb_page and destroy_compound_gigantic_page will
    remove a gigantic page and make the set of base pages ready to be
    returned to a lower level allocator.  In the process of doing this, they
    make all base pages reference counted.
    
    The routine prep_compound_gigantic_page creates a gigantic page from a
    set of base pages.  It assumes that all these base pages are reference
    counted.
    
    During demotion, a gigantic page will be split into huge pages of a
    smaller size.  This logically involves use of the routines,
    remove_hugetlb_page, and destroy_compound_gigantic_page followed by
    prep_compound*_page for each smaller huge page.
    
    When pages are reference counted (ref count >= 0), additional
    speculative ref counts could be taken as described in previous commits
    [1] and [2].  This could result in errors while demoting a huge page.
    Quite a bit of code would need to be created to handle all possible
    issues.
    
    Instead of dealing with the possibility of speculative ref counts, avoid
    the possibility by keeping ref counts at zero during the demote process.
    Add a boolean 'demote' to the routines remove_hugetlb_page,
    destroy_compound_gigantic_page and prep_compound_gigantic_page.  If the
    boolean is set, the remove and destroy routines will not reference count
    pages and the prep routine will not expect reference counted pages.
    
    '*_for_demote' wrappers of the routines will be added in a subsequent
    patch where this functionality is used.
    
    [1] https://lore.kernel.org/linux-mm/20210622021423.154662-3-mike.kravetz@oracle.com/
    [2] https://lore.kernel.org/linux-mm/20210809184832.18342-3-mike.kravetz@oracle.com/
    
    Link: https://lkml.kernel.org/r/20211007181918.136982-5-mike.kravetz@oracle.comSigned-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: default avatarOscar Salvador <osalvador@suse.de>
    Cc: "Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Naoya Horiguchi <naoya.horiguchi@linux.dev>
    Cc: Nghia Le <nghialm78@gmail.com>
    Cc: Zi Yan <ziy@nvidia.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    34d9e35b
hugetlb.c 182 KB