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 */ free_vmemmap_pages_per_hpage(struct hstate * h)22static inline unsigned int free_vmemmap_pages_per_hpage(struct hstate *h) 23 { 24 return h->nr_free_vmemmap_pages; 25 } 26 #else alloc_huge_page_vmemmap(struct hstate * h,struct page * head)27static inline int alloc_huge_page_vmemmap(struct hstate *h, struct page *head) 28 { 29 return 0; 30 } 31 free_huge_page_vmemmap(struct hstate * h,struct page * head)32static inline void free_huge_page_vmemmap(struct hstate *h, struct page *head) 33 { 34 } 35 hugetlb_vmemmap_init(struct hstate * h)36static inline void hugetlb_vmemmap_init(struct hstate *h) 37 { 38 } 39 free_vmemmap_pages_per_hpage(struct hstate * h)40static 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