]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm: arch: consolidate mmap hugetlb size encodings
authorMike Kravetz <mike.kravetz@oracle.com>
Wed, 6 Sep 2017 23:23:29 +0000 (16:23 -0700)
committerChuck Anderson <chuck.anderson@oracle.com>
Fri, 6 Oct 2017 03:25:13 +0000 (20:25 -0700)
Orabug: 26768367

A non-default huge page size can be encoded in the flags argument of the
mmap system call.  The definitions for these encodings are in arch
specific header files.  However, all architectures use the same values.

Consolidate all the definitions in the primary user header file
(uapi/linux/mman.h).  Include definitions for all known huge page sizes.
Use the generic encoding definitions in hugetlb_encode.h as the basis
for these definitions.

Link: http://lkml.kernel.org/r/1501527386-10736-3-git-send-email-mike.kravetz@oracle.com
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Cc: Anshuman Khandual <khandual@linux.vnet.ibm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Davidlohr Bueso <dbueso@suse.de>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Michael Kerrisk <mtk.manpages@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit aafd4562dfee81a40ba21b5ea3cf5e06664bc7f6)
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
Reviewed-by: Jack Vogel <jack.vogel@oracle.com>
Conflicts:
arch/alpha/include/uapi/asm/mman.h
arch/mips/include/uapi/asm/mman.h
arch/parisc/include/uapi/asm/mman.h
arch/x86/include/uapi/asm/mman.h
arch/xtensa/include/uapi/asm/mman.h
include/uapi/asm-generic/mman-common.h

arch/alpha/include/uapi/asm/mman.h
arch/mips/include/uapi/asm/mman.h
arch/parisc/include/uapi/asm/mman.h
arch/x86/include/uapi/asm/mman.h
arch/xtensa/include/uapi/asm/mman.h
include/uapi/asm-generic/mman-common.h
include/uapi/linux/mman.h

index 0086b472bc2b4c8e2a588a2a8ab763c3243362f7..cbeb3616a28edf22de663c7fc84c4fc11e13cf05 100644 (file)
 /* compatibility flags */
 #define MAP_FILE       0
 
-/*
- * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.
- * This gives us 6 bits, which is enough until someone invents 128 bit address
- * spaces.
- *
- * Assume these are all power of twos.
- * When 0 use the default page size.
- */
-#define MAP_HUGE_SHIFT 26
-#define MAP_HUGE_MASK  0x3f
-
 #endif /* __ALPHA_MMAN_H__ */
index cfcb876cae6bc017e7fbf53e3df33fdc637680f3..60db83357a61abac34518944817a035b86a21bab 100644 (file)
 /* compatibility flags */
 #define MAP_FILE       0
 
-/*
- * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.
- * This gives us 6 bits, which is enough until someone invents 128 bit address
- * spaces.
- *
- * Assume these are all power of twos.
- * When 0 use the default page size.
- */
-#define MAP_HUGE_SHIFT 26
-#define MAP_HUGE_MASK  0x3f
-
 #endif /* _ASM_MMAN_H */
index 294d251ca7b2ee6472d6da01cf4e73f84a177cc2..12219ebce8695d24bd651dad6a42cedee9e390ec 100644 (file)
 #define MAP_FILE       0
 #define MAP_VARIABLE   0
 
-/*
- * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.
- * This gives us 6 bits, which is enough until someone invents 128 bit address
- * spaces.
- *
- * Assume these are all power of twos.
- * When 0 use the default page size.
- */
-#define MAP_HUGE_SHIFT 26
-#define MAP_HUGE_MASK  0x3f
-
 #endif /* __PARISC_MMAN_H__ */
index 513b05f15bb4f8cdeeb42369b18223ad506ded40..593e51d4643f6adb403a756f11408835ce075355 100644 (file)
@@ -3,9 +3,6 @@
 
 #define MAP_32BIT      0x40            /* only give out 32bit addresses */
 
-#define MAP_HUGE_2MB    (21 << MAP_HUGE_SHIFT)
-#define MAP_HUGE_1GB    (30 << MAP_HUGE_SHIFT)
-
 #include <asm-generic/mman.h>
 
 #endif /* _ASM_X86_MMAN_H */
index 201aec0e0446e84d2ee27d1f8bcd5a050c42344c..14e14a8f2e16858771142702bed3b227bbbcb416 100644 (file)
 /* compatibility flags */
 #define MAP_FILE       0
 
-/*
- * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.
- * This gives us 6 bits, which is enough until someone invents 128 bit address
- * spaces.
- *
- * Assume these are all power of twos.
- * When 0 use the default page size.
- */
-#define MAP_HUGE_SHIFT 26
-#define MAP_HUGE_MASK  0x3f
-
 #endif /* _XTENSA_MMAN_H */
index ddc3b36f1046bd6605ecdd769e4f70e59404e16b..17dbda994268936c57e3b9016ae9a9d9421d6042 100644 (file)
 /* compatibility flags */
 #define MAP_FILE       0
 
-/*
- * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.
- * This gives us 6 bits, which is enough until someone invents 128 bit address
- * spaces.
- *
- * Assume these are all power of twos.
- * When 0 use the default page size.
- */
-#define MAP_HUGE_SHIFT 26
-#define MAP_HUGE_MASK  0x3f
-
 #endif /* __ASM_GENERIC_MMAN_COMMON_H */
index ade4acd3a90cd498d4409abe263681d590a7de96..a937480d7cd345f4e1b12c2e409f58c0489e8a4e 100644 (file)
@@ -2,6 +2,7 @@
 #define _UAPI_LINUX_MMAN_H
 
 #include <asm/mman.h>
+#include <asm-generic/hugetlb_encode.h>
 
 #define MREMAP_MAYMOVE 1
 #define MREMAP_FIXED   2
 #define OVERCOMMIT_ALWAYS              1
 #define OVERCOMMIT_NEVER               2
 
+/*
+ * Huge page size encoding when MAP_HUGETLB is specified, and a huge page
+ * size other than the default is desired.  See hugetlb_encode.h.
+ * All known huge page size encodings are provided here.  It is the
+ * responsibility of the application to know which sizes are supported on
+ * the running system.  See mmap(2) man page for details.
+ */
+#define MAP_HUGE_SHIFT HUGETLB_FLAG_ENCODE_SHIFT
+#define MAP_HUGE_MASK  HUGETLB_FLAG_ENCODE_MASK
+
+#define MAP_HUGE_64KB  HUGETLB_FLAG_ENCODE_64KB
+#define MAP_HUGE_512KB HUGETLB_FLAG_ENCODE_512KB
+#define MAP_HUGE_1MB   HUGETLB_FLAG_ENCODE_1MB
+#define MAP_HUGE_2MB   HUGETLB_FLAG_ENCODE_2MB
+#define MAP_HUGE_8MB   HUGETLB_FLAG_ENCODE_8MB
+#define MAP_HUGE_16MB  HUGETLB_FLAG_ENCODE_16MB
+#define MAP_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB
+#define MAP_HUGE_1GB   HUGETLB_FLAG_ENCODE_1GB
+#define MAP_HUGE_2GB   HUGETLB_FLAG_ENCODE_2GB
+#define MAP_HUGE_16GB  HUGETLB_FLAG_ENCODE_16GB
+
 #endif /* _UAPI_LINUX_MMAN_H */