|
@@ -51,6 +51,7 @@ __initdata LIST_HEAD(huge_boot_pages);
|
|
|
static struct hstate * __initdata parsed_hstate;
|
|
|
static unsigned long __initdata default_hstate_max_huge_pages;
|
|
|
static unsigned long __initdata default_hstate_size;
|
|
|
+static bool __initdata parsed_valid_hugepagesz = true;
|
|
|
|
|
|
/*
|
|
|
* Protects updates to hugepage_freelists, hugepage_activelist, nr_huge_pages,
|
|
@@ -2659,6 +2660,11 @@ static int __init hugetlb_init(void)
|
|
|
subsys_initcall(hugetlb_init);
|
|
|
|
|
|
/* Should be called on processing a hugepagesz=... option */
|
|
|
+void __init hugetlb_bad_size(void)
|
|
|
+{
|
|
|
+ parsed_valid_hugepagesz = false;
|
|
|
+}
|
|
|
+
|
|
|
void __init hugetlb_add_hstate(unsigned int order)
|
|
|
{
|
|
|
struct hstate *h;
|
|
@@ -2691,11 +2697,17 @@ static int __init hugetlb_nrpages_setup(char *s)
|
|
|
unsigned long *mhp;
|
|
|
static unsigned long *last_mhp;
|
|
|
|
|
|
+ if (!parsed_valid_hugepagesz) {
|
|
|
+ pr_warn("hugepages = %s preceded by "
|
|
|
+ "an unsupported hugepagesz, ignoring\n", s);
|
|
|
+ parsed_valid_hugepagesz = true;
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
/*
|
|
|
* !hugetlb_max_hstate means we haven't parsed a hugepagesz= parameter yet,
|
|
|
* so this hugepages= parameter goes to the "default hstate".
|
|
|
*/
|
|
|
- if (!hugetlb_max_hstate)
|
|
|
+ else if (!hugetlb_max_hstate)
|
|
|
mhp = &default_hstate_max_huge_pages;
|
|
|
else
|
|
|
mhp = &parsed_hstate->max_huge_pages;
|