1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Free some vmemmap pages of HugeTLB 4 * 5 * Copyright (c) 2020, Bytedance. All rights reserved. 6 * 7 * Author: Muchun Song <songmuchun@bytedance.com> 8 */ 9 #ifndef _LINUX_HUGETLB_VMEMMAP_H 10 #define _LINUX_HUGETLB_VMEMMAP_H 11 #include <linux/hugetlb.h> 12 13 #ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP 14 int alloc_huge_page_vmemmap(struct hstate *h, struct page *head); 15 void free_huge_page_vmemmap(struct hstate *h, struct page *head); 16 void hugetlb_vmemmap_init(struct hstate *h); 17 18 /* 19 * How many vmemmap pages associated with a HugeTLB page that can be freed 20 * to the buddy allocator. 21 */ 22 static inline unsigned int free_vmemmap_pages_per_hpage(struct hstate *h) 23 { 24 return h->nr_free_vmemmap_pages; 25 } 26 #else 27 static inline int alloc_huge_page_vmemmap(struct hstate *h, struct page *head) 28 { 29 return 0; 30 } 31 32 static inline void free_huge_page_vmemmap(struct hstate *h, struct page *head) 33 { 34 } 35 36 static inline void hugetlb_vmemmap_init(struct hstate *h) 37 { 38 } 39 40 static inline unsigned int free_vmemmap_pages_per_hpage(struct hstate *h) 41 { 42 return 0; 43 } 44 #endif /* CONFIG_HUGETLB_PAGE_FREE_VMEMMAP */ 45 #endif /* _LINUX_HUGETLB_VMEMMAP_H */ 46