• Muchun Song's avatar
    mm: hugetlb: free the vmemmap pages associated with each HugeTLB page · f41f2ed4
    Muchun Song authored
    Every HugeTLB has more than one struct page structure.  We __know__ that
    we only use the first 4 (__NR_USED_SUBPAGE) struct page structures to
    store metadata associated with each HugeTLB.
    
    There are a lot of struct page structures associated with each HugeTLB
    page.  For tail pages, the value of compound_head is the same.  So we can
    reuse first page of tail page structures.  We map the virtual addresses of
    the remaining pages of tail page structures to the first tail page struct,
    and then free these page frames.  Therefore, we need to reserve two pages
    as vmemmap areas.
    
    When we allocate a HugeTLB page from the buddy, we can free some vmemmap
    pages associated with each HugeTLB page.  It is more appropriate to do it
    in the prep_new_huge_page().
    
    The free_vmemmap_pages_per_hpage(), which indicates how many vmemmap pages
    associated with a HugeTLB page can be freed, returns zero for now, which
    means the feature is disabled.  We will enable it once all the
    infrastructure is there.
    
    [willy@infradead.org: fix documentation warning]
      Link: https://lkml.kernel.org/r/20210615200242.1716568-5-willy@infradead.org
    
    Link: https://lkml.kernel.org/r/20210510030027.56044-5-songmuchun@bytedance.comSigned-off-by: default avatarMuchun Song <songmuchun@bytedance.com>
    Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: default avatarOscar Salvador <osalvador@suse.de>
    Tested-by: default avatarChen Huang <chenhuang5@huawei.com>
    Tested-by: default avatarBodeddula Balasubramaniam <bodeddub@amazon.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Reviewed-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Cc: Balbir Singh <bsingharora@gmail.com>
    Cc: Barry Song <song.bao.hua@hisilicon.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: HORIGUCHI NAOYA <naoya.horiguchi@nec.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Joao Martins <joao.m.martins@oracle.com>
    Cc: Joerg Roedel <jroedel@suse.de>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Mina Almasry <almasrymina@google.com>
    Cc: Oliver Neukum <oneukum@suse.com>
    Cc: Paul E. McKenney <paulmck@kernel.org>
    Cc: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Xiongchun Duan <duanxiongchun@bytedance.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f41f2ed4
hugetlb.c 167 KB