Commit b4718e62 authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds
Browse files

x86: add hugepagesz option on 64-bit



Add an hugepagesz=...  option similar to IA64, PPC etc.  to x86-64.

This finally allows to select GB pages for hugetlbfs in x86 now that all
the infrastructure is in place.

Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 39c11e6c
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -774,8 +774,15 @@ and is between 256 and 4096 characters. It is defined in the file
	hisax=		[HW,ISDN]
			See Documentation/isdn/README.HiSax.

	hugepages=	[HW,X86-32,IA-64] Maximal number of HugeTLB pages.
	hugepagesz=	[HW,IA-64,PPC] The size of the HugeTLB pages.
	hugepages=	[HW,X86-32,IA-64] HugeTLB pages to allocate at boot.
	hugepagesz=	[HW,IA-64,PPC,X86-64] The size of the HugeTLB pages.
			On x86 this option can be specified multiple times
			interleaved with hugepages= to reserve huge pages
			of different sizes. Valid pages sizes on x86-64
			are 2M (when the CPU supports "pse") and 1G (when the
			CPU supports the "pdpe1gb" cpuinfo flag)
			Note that 1GB pages can only be allocated at boot time
			using hugepages= and not freed afterwards.

	i8042.direct	[HW] Put keyboard port into non-translated mode
	i8042.dumbkbd	[HW] Pretend that controller can only read data from
+17 −0
Original line number Diff line number Diff line
@@ -425,3 +425,20 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,

#endif /*HAVE_ARCH_HUGETLB_UNMAPPED_AREA*/

#ifdef CONFIG_X86_64
static __init int setup_hugepagesz(char *opt)
{
	unsigned long ps = memparse(opt, &opt);
	if (ps == PMD_SIZE) {
		hugetlb_add_hstate(PMD_SHIFT - PAGE_SHIFT);
	} else if (ps == PUD_SIZE && cpu_has_gbpages) {
		hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
	} else {
		printk(KERN_ERR "hugepagesz: Unsupported page size %lu M\n",
			ps >> 20);
		return 0;
	}
	return 1;
}
__setup("hugepagesz=", setup_hugepagesz);
#endif
+2 −0
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@
#define HPAGE_MASK		(~(HPAGE_SIZE - 1))
#define HUGETLB_PAGE_ORDER	(HPAGE_SHIFT - PAGE_SHIFT)

#define HUGE_MAX_HSTATE 2

/* to align the pointer to the (next) page boundary */
#define PAGE_ALIGN(addr)	(((addr)+PAGE_SIZE-1)&PAGE_MASK)