Skip to content
  • Michal Hocko's avatar
    mm, hugetlb: get rid of surplus page accounting tricks · 9980d744
    Michal Hocko authored
    alloc_surplus_huge_page increases the pool size and the number of
    surplus pages opportunistically to prevent from races with the pool size
    change.  See commit d1c3fb1f ("hugetlb: introduce
    nr_overcommit_hugepages sysctl") for more details.
    
    The resulting code is unnecessarily hairy, cause code duplication and
    doesn't allow to share the allocation paths.  Moreover pool size changes
    tend to be very seldom so optimizing for them is not really reasonable.
    Simplify the code and allow to allocate a fresh surplus page as long as
    we are under the overcommit limit and then recheck the condition after
    the allocation and drop the new page if the situation has changed.  This
    should provide a reasonable guarantee that an abrupt allocation requests
    will not go way off the limit.
    
    If we consider races with the pool shrinking and enlarging then we
    should be reasonably safe as well.  In the first case we are off by one
    in the worst case and the second case should work OK because the page is
    not yet visible.  We can waste CPU cycles for the allocation but that
    should be acceptable for a relatively rare condition.
    
    Link: http://lkml.kernel.org/r/20180103093213.26329-5-mhocko@kernel.org
    
    
    Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
    Reviewed-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: default avatarNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Cc: Andrea Reale <ar@linux.vnet.ibm.com>
    Cc: Anshuman Khandual <khandual@linux.vnet.ibm.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Zi Yan <zi.yan@cs.rutgers.edu>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9980d744