aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/hugetlb.h1
-rw-r--r--kernel/sysctl.c8
-rw-r--r--mm/hugetlb.c5
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
34extern unsigned long max_huge_pages; 34extern unsigned long max_huge_pages;
35extern unsigned long hugepages_treat_as_movable; 35extern unsigned long hugepages_treat_as_movable;
36extern int hugetlb_dynamic_pool;
36extern const unsigned long hugetlb_zero, hugetlb_infinity; 37extern const unsigned long hugetlb_zero, hugetlb_infinity;
37extern int sysctl_hugetlb_shm_group; 38extern 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];
31static unsigned int surplus_huge_pages_node[MAX_NUMNODES]; 31static unsigned int surplus_huge_pages_node[MAX_NUMNODES];
32static gfp_t htlb_alloc_mask = GFP_HIGHUSER; 32static gfp_t htlb_alloc_mask = GFP_HIGHUSER;
33unsigned long hugepages_treat_as_movable; 33unsigned long hugepages_treat_as_movable;
34int 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) {