Commit 359f2544 authored by Mike Kravetz's avatar Mike Kravetz Committed by Linus Torvalds
Browse files

hugetlbfs: move hugepagesz= parsing to arch independent code



Now that architectures provide arch_hugetlb_valid_size(), parsing of
"hugepagesz=" can be done in architecture independent code.  Create a
single routine to handle hugepagesz= parsing and remove all arch specific
routines.  We can also remove the interface hugetlb_bad_size() as this is
no longer used outside arch independent code.

This also provides consistent behavior of hugetlbfs command line options.
The hugepagesz= option should only be specified once for a specific size,
but some architectures allow multiple instances.  This appears to be more
of an oversight when code was added by some architectures to set up ALL
huge pages sizes.

Signed-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Tested-by: default avatarSandipan Das <sandipan@linux.ibm.com>
Reviewed-by: default avatarPeter Xu <peterx@redhat.com>
Acked-by: default avatarMina Almasry <almasrymina@google.com>
Acked-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>	[s390]
Acked-by: default avatarWill Deacon <will@kernel.org>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Christophe Leroy <christophe.leroy@c-s.fr>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Longpeng <longpeng2@huawei.com>
Cc: Nitesh Narayan Lal <nitesh@redhat.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Randy Dunlap <rdunlap@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Anders Roxell <anders.roxell@linaro.org>
Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
Cc: Qian Cai <cai@lca.pw>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Link: http://lkml.kernel.org/r/20200417185049.275845-3-mike.kravetz@oracle.com
Link: http://lkml.kernel.org/r/20200428205614.246260-3-mike.kravetz@oracle.com


Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ae94da89
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -478,18 +478,3 @@ bool __init arch_hugetlb_valid_size(unsigned long size)

	return false;
}

static __init int setup_hugepagesz(char *opt)
{
	unsigned long ps = memparse(opt, &opt);

	if (arch_hugetlb_valid_size(ps)) {
		add_huge_page_size(ps);
		return 1;
	}

	hugetlb_bad_size();
	pr_err("hugepagesz: Unsupported page size %lu K\n", ps >> 10);
	return 0;
}
__setup("hugepagesz=", setup_hugepagesz);
+0 −15
Original line number Diff line number Diff line
@@ -589,21 +589,6 @@ static int __init add_huge_page_size(unsigned long long size)
	return 0;
}

static int __init hugepage_setup_sz(char *str)
{
	unsigned long long size;

	size = memparse(str, &str);

	if (add_huge_page_size(size) != 0) {
		hugetlb_bad_size();
		pr_err("Invalid huge page size specified(%llu)\n", size);
	}

	return 1;
}
__setup("hugepagesz=", hugepage_setup_sz);

static int __init hugetlbpage_init(void)
{
	bool configured = false;
+0 −16
Original line number Diff line number Diff line
@@ -22,22 +22,6 @@ bool __init arch_hugetlb_valid_size(unsigned long size)
		return false;
}

static __init int setup_hugepagesz(char *opt)
{
	unsigned long ps = memparse(opt, &opt);

	if (arch_hugetlb_valid_size(ps)) {
		hugetlb_add_hstate(ilog2(ps) - PAGE_SHIFT);
		return 1;
	}

	hugetlb_bad_size();
	pr_err("hugepagesz: Unsupported page size %lu M\n", ps >> 20);
	return 0;

}
__setup("hugepagesz=", setup_hugepagesz);

#ifdef CONFIG_CONTIG_ALLOC
static __init int gigantic_pages_init(void)
{
+0 −18
Original line number Diff line number Diff line
@@ -264,24 +264,6 @@ bool __init arch_hugetlb_valid_size(unsigned long size)
		return false;
}

static __init int setup_hugepagesz(char *opt)
{
	unsigned long size;
	char *string = opt;

	size = memparse(opt, &opt);
	if (arch_hugetlb_valid_size(size)) {
		hugetlb_add_hstate(ilog2(size) - PAGE_SHIFT);
	} else {
		hugetlb_bad_size();
		pr_err("hugepagesz= specifies an unsupported page size %s\n",
			string);
		return 0;
	}
	return 1;
}
__setup("hugepagesz=", setup_hugepagesz);

static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *file,
		unsigned long addr, unsigned long len,
		unsigned long pgoff, unsigned long flags)
+0 −22
Original line number Diff line number Diff line
@@ -397,28 +397,6 @@ bool __init arch_hugetlb_valid_size(unsigned long size)

	return true;
}

static int __init setup_hugepagesz(char *string)
{
	unsigned long long hugepage_size;
	int rc = 0;

	hugepage_size = memparse(string, &string);

	if (!arch_hugetlb_valid_size((unsigned long)hugepage_size)) {
		hugetlb_bad_size();
		pr_err("hugepagesz=%llu not supported by MMU.\n",
			hugepage_size);
		goto out;
	}

	add_huge_page_size(hugepage_size);
	rc = 1;

out:
	return rc;
}
__setup("hugepagesz=", setup_hugepagesz);
#endif	/* CONFIG_HUGETLB_PAGE */

void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t *ptep)
Loading