diff options
-rw-r--r-- | include/linux/hugetlb.h | 1 | ||||
-rw-r--r-- | kernel/sysctl.c | 8 | ||||
-rw-r--r-- | mm/hugetlb.c | 5 |
3 files changed, 14 insertions, 0 deletions
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 3a19b032c0eb..ea0f50bfbe03 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -33,6 +33,7 @@ void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed); | |||
33 | 33 | ||
34 | extern unsigned long max_huge_pages; | 34 | extern unsigned long max_huge_pages; |
35 | extern unsigned long hugepages_treat_as_movable; | 35 | extern unsigned long hugepages_treat_as_movable; |
36 | extern int hugetlb_dynamic_pool; | ||
36 | extern const unsigned long hugetlb_zero, hugetlb_infinity; | 37 | extern const unsigned long hugetlb_zero, hugetlb_infinity; |
37 | extern int sysctl_hugetlb_shm_group; | 38 | extern int sysctl_hugetlb_shm_group; |
38 | 39 | ||
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index ec14aa8ac51f..96efbb859997 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -880,6 +880,14 @@ static ctl_table vm_table[] = { | |||
880 | .mode = 0644, | 880 | .mode = 0644, |
881 | .proc_handler = &hugetlb_treat_movable_handler, | 881 | .proc_handler = &hugetlb_treat_movable_handler, |
882 | }, | 882 | }, |
883 | { | ||
884 | .ctl_name = CTL_UNNUMBERED, | ||
885 | .procname = "hugetlb_dynamic_pool", | ||
886 | .data = &hugetlb_dynamic_pool, | ||
887 | .maxlen = sizeof(hugetlb_dynamic_pool), | ||
888 | .mode = 0644, | ||
889 | .proc_handler = &proc_dointvec, | ||
890 | }, | ||
883 | #endif | 891 | #endif |
884 | { | 892 | { |
885 | .ctl_name = VM_LOWMEM_RESERVE_RATIO, | 893 | .ctl_name = VM_LOWMEM_RESERVE_RATIO, |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 31bbca6b2c90..efd78527ad1e 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -31,6 +31,7 @@ static unsigned int free_huge_pages_node[MAX_NUMNODES]; | |||
31 | static unsigned int surplus_huge_pages_node[MAX_NUMNODES]; | 31 | static unsigned int surplus_huge_pages_node[MAX_NUMNODES]; |
32 | static gfp_t htlb_alloc_mask = GFP_HIGHUSER; | 32 | static gfp_t htlb_alloc_mask = GFP_HIGHUSER; |
33 | unsigned long hugepages_treat_as_movable; | 33 | unsigned long hugepages_treat_as_movable; |
34 | int hugetlb_dynamic_pool; | ||
34 | 35 | ||
35 | /* | 36 | /* |
36 | * Protects updates to hugepage_freelists, nr_huge_pages, and free_huge_pages | 37 | * Protects updates to hugepage_freelists, nr_huge_pages, and free_huge_pages |
@@ -201,6 +202,10 @@ static struct page *alloc_buddy_huge_page(struct vm_area_struct *vma, | |||
201 | { | 202 | { |
202 | struct page *page; | 203 | struct page *page; |
203 | 204 | ||
205 | /* Check if the dynamic pool is enabled */ | ||
206 | if (!hugetlb_dynamic_pool) | ||
207 | return NULL; | ||
208 | |||
204 | page = alloc_pages(htlb_alloc_mask|__GFP_COMP|__GFP_NOWARN, | 209 | page = alloc_pages(htlb_alloc_mask|__GFP_COMP|__GFP_NOWARN, |
205 | HUGETLB_PAGE_ORDER); | 210 | HUGETLB_PAGE_ORDER); |
206 | if (page) { | 211 | if (page) { |