hugepages using the CMA allocator. If enabled, the
                        boot-time allocation of gigantic hugepages is skipped.
 
+       hugetlb_cma_only=
+                       [HW,CMA,EARLY] When allocating new HugeTLB pages, only
+                       try to allocate from the CMA areas.
+
+                       This option does nothing if hugetlb_cma= is not also
+                       specified.
+
        hugetlb_free_vmemmap=
                        [KNL] Requires CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP
                        enabled.
 
 static struct cma *hugetlb_cma[MAX_NUMNODES];
 static unsigned long hugetlb_cma_size_in_node[MAX_NUMNODES] __initdata;
 #endif
+static bool hugetlb_cma_only;
 static unsigned long hugetlb_cma_size __initdata;
 
 __initdata struct list_head huge_boot_pages[MAX_NUMNODES];
        }
 #endif
        if (!folio) {
+               if (hugetlb_cma_only)
+                       return NULL;
+
                folio = folio_alloc_gigantic(order, gfp_mask, nid, nodemask);
                if (!folio)
                        return NULL;
 
                hcp->setup(hcp->val);
        }
+
+       if (!hugetlb_cma_size)
+               hugetlb_cma_only = false;
 }
 
 /*
 
 early_param("hugetlb_cma", cmdline_parse_hugetlb_cma);
 
+static int __init cmdline_parse_hugetlb_cma_only(char *p)
+{
+       return kstrtobool(p, &hugetlb_cma_only);
+}
+
+early_param("hugetlb_cma_only", cmdline_parse_hugetlb_cma_only);
+
 void __init hugetlb_cma_reserve(int order)
 {
        unsigned long size, reserved, per_node;