• Mike Kravetz's avatar
    hugetlb: change free_pool_huge_page to remove_pool_huge_page · 10c6ec49
    Mike Kravetz authored
    free_pool_huge_page was called with hugetlb_lock held.  It would remove
    a hugetlb page, and then free the corresponding pages to the lower level
    allocators such as buddy.  free_pool_huge_page was called in a loop to
    remove hugetlb pages and these loops could hold the hugetlb_lock for a
    considerable time.
    
    Create new routine remove_pool_huge_page to replace free_pool_huge_page.
    remove_pool_huge_page will remove the hugetlb page, and it must be
    called with the hugetlb_lock held.  It will return the removed page and
    it is the responsibility of the caller to free the page to the lower
    level allocators.  The hugetlb_lock is dropped before freeing to these
    allocators which results in shorter lock hold times.
    
    Add new helper routine to call update_and_free_page for a list of pages.
    
    Note: Some changes to the routine return_unused_surplus_pages are in
    need of explanation.  Commit e5bbc8a6 ("mm/hugetlb.c: fix
    reservation race when freeing surplus pages") modified this routine to
    address a race which could occur when dropping the hugetlb_lock in the
    loop that removes pool pages.  Accounting changes introduced in that
    commit were subtle and took some thought to understand.  This commit
    removes the cond_resched_lock() and the potential race.  Therefore,
    remove the subtle code and restore the more straight forward accounting
    effectively reverting the commit.
    
    Link: https://lkml.kernel.org/r/20210409205254.242291-7-mike.kravetz@oracle.comSigned-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: default avatarMuchun Song <songmuchun@bytedance.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Reviewed-by: default avatarOscar Salvador <osalvador@suse.de>
    Cc: "Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com>
    Cc: Barry Song <song.bao.hua@hisilicon.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Hillf Danton <hdanton@sina.com>
    Cc: HORIGUCHI NAOYA <naoya.horiguchi@nec.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Mina Almasry <almasrymina@google.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Roman Gushchin <guro@fb.com>
    Cc: Shakeel Butt <shakeelb@google.com>
    Cc: Waiman Long <longman@redhat.com>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    10c6ec49
hugetlb.c 160 KB