mm: add MAP_HUGETLB for mmaping pseudo-anonymous huge page regions
authorArnd Bergmann <arnd@arndb.de>
Tue, 22 Sep 2009 00:03:45 +0000 (17:03 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 22 Sep 2009 14:17:41 +0000 (07:17 -0700)
Add a flag for mmap that will be used to request a huge page region that
will look like anonymous memory to user space.  This is accomplished by
using a file on the internal vfsmount.  MAP_HUGETLB is a modifier of
MAP_ANONYMOUS and so must be specified with it.  The region will behave
the same as a MAP_ANONYMOUS region using small pages.

The patch also adds the MAP_STACK flag, which was previously defined only
on some architectures but not on others.  Since MAP_STACK is meant to be a
hint only, architectures can define it without assigning a specific
meaning to it.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Eric B Munson <ebmunson@us.ibm.com>
Cc: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Cc: David Rientjes <rientjes@google.com>
Cc: <linux-arch@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
17 files changed:
arch/alpha/include/asm/mman.h
arch/arm/include/asm/mman.h
arch/avr32/include/asm/mman.h
arch/cris/include/asm/mman.h
arch/frv/include/asm/mman.h
arch/h8300/include/asm/mman.h
arch/ia64/include/asm/mman.h
arch/m32r/include/asm/mman.h
arch/m68k/include/asm/mman.h
arch/mips/include/asm/mman.h
arch/mn10300/include/asm/mman.h
arch/parisc/include/asm/mman.h
arch/powerpc/include/asm/mman.h
arch/s390/include/asm/mman.h
arch/sparc/include/asm/mman.h
arch/xtensa/include/asm/mman.h
include/asm-generic/mman.h

index c77c55756a7c41bb8bdd3a76c6dc08a46009c28f..99c56d47879dfe52645604d55a4c32ce230e255a 100644 (file)
@@ -28,6 +28,8 @@
 #define MAP_NORESERVE  0x10000         /* don't check for reservations */
 #define MAP_POPULATE   0x20000         /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x40000         /* do not block on IO */
+#define MAP_STACK      0x80000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x100000        /* create a huge page mapping */
 
 #define MS_ASYNC       1               /* sync memory asynchronously */
 #define MS_SYNC                2               /* synchronous memory sync */
index fc26976d8e3a7090716e8f5624bee962ebcb283a..6464d471bc70f8e0dc59193af1edd907719974de 100644 (file)
@@ -10,6 +10,8 @@
 #define MAP_NORESERVE  0x4000          /* don't check for reservations */
 #define MAP_POPULATE   0x8000          /* populate (prefault) page tables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
index 9a92b15f6a66c19eeae0c9c42ecc964447608268..38cea1b597c2f15a08aa0e4b0a774c2dcdb32dd8 100644 (file)
@@ -10,6 +10,8 @@
 #define MAP_NORESERVE  0x4000          /* don't check for reservations */
 #define MAP_POPULATE   0x8000          /* populate (prefault) page tables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
index b7f0afba3ce052c515972d9c28d17ec264057243..de6b903b22cd6f27e72a155afefb72396d0ee515 100644 (file)
@@ -12,6 +12,8 @@
 #define MAP_NORESERVE  0x4000          /* don't check for reservations */
 #define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
index 58c1d11e2ac71fe225f7e2a05137d80e53dbc32a..1939343322bb2210e75f60c73d9be67deb0ae8f5 100644 (file)
@@ -10,6 +10,8 @@
 #define MAP_NORESERVE  0x4000          /* don't check for reservations */
 #define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
index cf35f0a6f12eee77729b51551f7a87bb3aeba477..eacacd04032e586f39c997a48837f5b82d37fdb6 100644 (file)
@@ -10,6 +10,8 @@
 #define MAP_NORESERVE  0x4000          /* don't check for reservations */
 #define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
index 48cf8b98a0b47bbb5eb4ff2c58ea837c6e56e623..cf55884e7f39ddef103c7f5e41019ca7376a031d 100644 (file)
@@ -18,6 +18,8 @@
 #define MAP_NORESERVE  0x04000         /* don't check for reservations */
 #define MAP_POPULATE   0x08000         /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
index 04a5f40aa401c988b9799e7362c99db07f2189e5..d191089808f42bc35e7d6f3148c108a9ac565065 100644 (file)
@@ -10,6 +10,8 @@
 #define MAP_NORESERVE  0x4000          /* don't check for reservations */
 #define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
index 9f5c4c4b3c7b20d37a4184e6d76a6888358d4510..c421fef55f5e5abe89f856a9d0a8ae4a63f60966 100644 (file)
@@ -10,6 +10,8 @@
 #define MAP_NORESERVE  0x4000          /* don't check for reservations */
 #define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
index f15554d1518a067d544380758d47ca28b7753e6d..a2250f390a292626e9fde6db8ab3edee41e9ea18 100644 (file)
@@ -46,6 +46,8 @@
 #define MAP_LOCKED     0x8000          /* pages are locked */
 #define MAP_POPULATE   0x10000         /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x20000         /* do not block on IO */
+#define MAP_STACK      0x40000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x80000         /* create a huge page mapping */
 
 /*
  * Flags for msync
index d04fac1da5aa80513f350afc18dd603fc0c0b4dd..94611c356bb4391dd89d5f16e2b1e0cbf1090c10 100644 (file)
@@ -21,6 +21,8 @@
 #define MAP_NORESERVE  0x4000          /* don't check for reservations */
 #define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
index a12d9d43f50797b5a59938a0356f0ae89ab06584..9749c8afe83ae6a5c198e0bb8520d0ffa71656fa 100644 (file)
@@ -22,6 +22,8 @@
 #define MAP_GROWSDOWN  0x8000          /* stack-like segment */
 #define MAP_POPULATE   0x10000         /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x20000         /* do not block on IO */
+#define MAP_STACK      0x40000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x80000         /* create a huge page mapping */
 
 #define MS_SYNC                1               /* synchronous memory sync */
 #define MS_ASYNC       2               /* sync memory asynchronously */
index 7b1c49811a2439cb195aa3d311da2e2493b612f9..d4a7f645c5db69155250a24e82a64c7974a49ec8 100644 (file)
@@ -25,6 +25,8 @@
 
 #define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #ifdef __KERNEL__
 #ifdef CONFIG_PPC64
index f63fe7b431ed4ee8a967305cb129b6b0ad8b0314..22714ca181ad6e0dc19d2538dfe3ae19643f3a88 100644 (file)
@@ -18,6 +18,8 @@
 #define MAP_NORESERVE  0x4000          /* don't check for reservations */
 #define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
index 988192e8e95657d366e558a97954dda6cfba027f..c3029ad6619a31d7984138a3183432b9a7f59a2b 100644 (file)
@@ -20,6 +20,8 @@
 
 #define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #ifdef __KERNEL__
 #ifndef __ASSEMBLY__
index 6e55b4d1f9c5ef9a37aee57c6626fee81f3d6b1a..fca4db425f6ec5a694e56c0972aa8f4f9875cf32 100644 (file)
@@ -53,6 +53,8 @@
 #define MAP_LOCKED     0x8000          /* pages are locked */
 #define MAP_POPULATE   0x10000         /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x20000         /* do not block on IO */
+#define MAP_STACK      0x40000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x80000         /* create a huge page mapping */
 
 /*
  * Flags for msync
index 7cab4de2bca6a3a74cad234301fa69a013f8273b..32c8bd6a196dffe0cc2cfd367792754faf88836e 100644 (file)
@@ -11,6 +11,7 @@
 #define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
 #define MAP_NONBLOCK   0x10000         /* do not block on IO */
 #define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
 
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */