Add pseudo-anonymous huge page mappings V4
Subsystems (16)
cover Add pseudo-anonymous huge page mappings V4
This patch set adds a flag to mmap that allows the user to request a mapping to be backed with huge pages. This mapping will borrow functionality from the huge page shm code to create a file on the kernel internal mount and use it to approximate an anonymous mapping. The MAP_HUGETLB flag is a modifier to MAP_ANONYMOUS and will not work without both flags being preset.
A new flag is necessary because there is no other way to hook into huge pages without creating a file on a hugetlbfs mount which wouldn't be MAP_ANONYMOUS.
To userspace, this mapping will behave just like an anonymous mapping because the file is not accessible outside of the kernel.
This patch set is meant to simplify the programming model, presently there is a large chunk of boiler plate code, contained in libhugetlbfs, required to create private, hugepage backed mappings. This patch set would allow use of hugepages without linking to libhugetlbfs or having hugetblfs mounted.
Unification of the VM code would provide these same benefits, but it has been resisted each time that it has been suggested for several
reasons: it would break PAGE_SIZE assumptions across the kernel, it makes page-table abstractions really expensive, and it does not provide any benefit on architectures that do not support huge pages, incurring fast path penalties without providing any benefit on these architectures.
Eric B Munson (3):
hugetlbfs: Allow the creation of files suitable for MAP_PRIVATE on
the vfs internal mount
Add MAP_HUGETLB for mmaping pseudo-anonymous huge page regions Add MAP_HUGETLB example
Documentation/vm/00-INDEX | 2 + Documentation/vm/hugetlbpage.txt | 14 ++++--- Documentation/vm/map_hugetlb.c | 77 +++++++++++++++++++++++++++++++++++++ fs/hugetlbfs/inode.c | 21 ++++++++-- include/asm-generic/mman-common.h | 1 + include/linux/hugetlb.h | 19 ++++++++- ipc/shm.c | 2 +- mm/mmap.c | 19 +++++++++ 8 files changed, 142 insertions(+), 13 deletions(-) create mode 100644 Documentation/vm/map_hugetlb.c
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 1/3 hugetlbfs: Allow the creation of files suitable for MAP_PRIVATE on the vfs internal mount
There are two means of creating mappings backed by huge pages:
1. mmap() a file created on hugetlbfs
2. Use shm which creates a file on an internal mount which essentially maps it MAP_SHARED
The internal mount is only used for shared mappings but there is very little that stops it being used for private mappings. This patch extends hugetlbfs_file_setup() to deal with the creation of files that will be mapped MAP_PRIVATE on the internal hugetlbfs mount. This extended API is used in a subsequent patch to implement the MAP_HUGETLB mmap() flag.
--- fs/hugetlbfs/inode.c | 21 +++++++++++++++++---- include/linux/hugetlb.h | 12 ++++++++++-- ipc/shm.c | 2 +- 3 files changed, 28 insertions(+), 7 deletions(-)
fs/hugetlbfs/inode.c +17 -4
@@ -506,6 +506,13 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb, uid_t uid, inode->i_atime = inode->i_mtime = inode->i_ctime =CURRENT_TIME ;INIT_LIST_HEAD (&inode->i_mapping->private_list); info =HUGETLBFS_I (inode); +/* +* The policy is initialized here even if we are creating a +* private inode because initialization simply creates an +* an empty rb tree and calls spin_lock_init(), later when we +* call mpol_free_shared_policy() it will just return because +* the rb tree will still be empty. +*/ mpol_shared_policy_init (&info->policy,NULL );switch (mode &S_IFMT ) {default :
@@ -930,13 +937,19 @@ static struct file_system_type hugetlbfs_fs_type = {static struct vfsmount *hugetlbfs_vfsmount; -static int can_do_hugetlb_shm (void ) +static int can_do_hugetlb_shm (int creat_flags) { -return capable (CAP_IPC_LOCK ) ||in_group_p (sysctl_hugetlb_shm_group); +if (creat_flags !=HUGETLB_SHMFS_INODE ) +return 0 ; +if (capable (CAP_IPC_LOCK )) +return 1 ; +if (in_group_p (sysctl_hugetlb_shm_group)) +return 1 ; +return 0 ; }struct file *hugetlb_file_setup (const char *name,size_t size,int acctflag, -struct user_struct **user) +struct user_struct **user,int creat_flags) {int error = -ENOMEM ;struct file *file;
@@ -948,7 +961,7 @@ struct file *hugetlb_file_setup(const char *name, size_t size, int acctflag,if (!hugetlbfs_vfsmount)return ERR_PTR (-ENOENT ); -if (!can_do_hugetlb_shm ()) { +if (!can_do_hugetlb_shm (creat_flags)) { *user =current_user ();if (user_shm_lock (size, *user)) { WARN_ONCE(1,
include/linux/hugetlb.h +10 -2
@@ -110,6 +110,14 @@ static inline void hugetlb_report_meminfo(struct seq_file *m)#endif /* !CONFIG_HUGETLB_PAGE */ +enum { +/* +* The file will be used as an shm file so shmfs accounting rules +* apply +*/ +HUGETLB_SHMFS_INODE =1 , +}; + #ifdef CONFIG_HUGETLBFS struct hugetlbfs_config { uid_t uid;
@@ -148,7 +156,7 @@ static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb)extern const struct file_operations hugetlbfs_file_operations;extern struct vm_operations_struct hugetlb_vm_ops;struct file *hugetlb_file_setup (const char *name,size_t size,int acct, -struct user_struct **user); +struct user_struct **user,int creat_flags);int hugetlb_get_quota (struct address_space *mapping,long delta);void hugetlb_put_quota (struct address_space *mapping,long delta);
@@ -170,7 +178,7 @@ static inline void set_file_hugepages(struct file *file)#define is_file_hugepages (file) 0#define set_file_hugepages (file) BUG() -#define hugetlb_file_setup (name,size,acct,user) ERR_PTR(-ENOSYS) +#define hugetlb_file_setup (name,size,acct,user,creat) ERR_PTR(-ENOSYS)#endif /* !CONFIG_HUGETLBFS */
ipc/shm.c +1 -1
@@ -370,7 +370,7 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params)if (shmflg &SHM_NORESERVE ) acctflag =VM_NORESERVE ; file =hugetlb_file_setup (name, size, acctflag, - &shp->mlock_user); + &shp->mlock_user,HUGETLB_SHMFS_INODE ); }else {/* * Do not allow no accounting for OVERCOMMIT_NEVER, even
Signature · 7 lines
1.6.3.2 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 2/3 Add MAP_HUGETLB for mmaping pseudo-anonymous huge page regions
This patch adds 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.
--- include/asm-generic/mman-common.h | 1 + include/linux/hugetlb.h | 7 +++++++ mm/mmap.c | 19 +++++++++++++++++++ 3 files changed, 27 insertions(+), 0 deletions(-)
include/asm-generic/mman-common.h +1 -0
@@ -19,6 +19,7 @@#define MAP_TYPE 0x0f/* Mask for type of mapping */ #define MAP_FIXED 0x10/* Interpret addr exactly */ #define MAP_ANONYMOUS 0x20/* don't use a file */ +#define MAP_HUGETLB 0x40/* create a huge page mapping */ #define MS_ASYNC 1/* sync memory asynchronously */ #define MS_INVALIDATE 2/* invalidate the caches */
include/linux/hugetlb.h +7 -0
@@ -110,12 +110,19 @@ static inline void hugetlb_report_meminfo(struct seq_file *m)#endif /* !CONFIG_HUGETLB_PAGE */ +#define HUGETLB_ANON_FILE "anon_hugepage" +enum {/* * The file will be used as an shm file so shmfs accounting rules * apply */ HUGETLB_SHMFS_INODE =1 , +/* +* The file is being created on the internal vfs mount and shmfs +* accounting rules do not apply +*/ +HUGETLB_ANONHUGE_INODE =2 , };#ifdef CONFIG_HUGETLBFS
mm/mmap.c +19 -0
@@ -29,6 +29,7 @@#include <linux/rmap.h> #include <linux/mmu_notifier.h> #include <linux/perf_counter.h> +#include <linux/hugetlb.h> #include <asm/uaccess.h> #include <asm/cacheflush.h>
@@ -951,6 +952,24 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,if (mm->map_count > sysctl_max_map_count)return -ENOMEM ; +if (flags &MAP_HUGETLB ) { +struct user_struct *user =NULL ; +if (file) +return -EINVAL ; + +/* +* VM_NORESERVE is used because the reservations will be +* taken when vm_ops->mmap() is called +* A dummy user value is used because we are not locking +* memory so no accounting is necessary +*/ + len =ALIGN (len,huge_page_size (&default_hstate)); + file =hugetlb_file_setup (HUGETLB_ANON_FILE , len,VM_NORESERVE , + &user,HUGETLB_ANONHUGE_INODE ); +if (IS_ERR (file)) +return PTR_ERR (file); + } +/* Obtain the address to map to. we verify (or select) it and ensure * that it represents a valid section of the address space. */
Signature · 7 lines
1.6.3.2 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 3/3 Add MAP_HUGETLB example
This patch adds an example of how to use the MAP_HUGETLB flag to the vm documentation directory and a reference to the example in hugetlbpage.txt.
--- Documentation/vm/00-INDEX | 2 + Documentation/vm/hugetlbpage.txt | 14 ++++--- Documentation/vm/map_hugetlb.c | 77 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 Documentation/vm/map_hugetlb.c
Documentation/vm/00-INDEX +2 -0
@@ -20,3 +20,5 @@ slabinfo.c - source code for a tool to get reports about slabs. slub.txt - a short users guide for SLUB. +map_hugetlb.c + - an example program that uses the MAP_HUGETLB mmap flag.
Documentation/vm/hugetlbpage.txt +8 -6
@@ -146,12 +146,14 @@ Regular chown, chgrp, and chmod commands (with right permissions) could be used to change the file attributes on hugetlbfs. Also, it is important to note that no such mount command is required if the -applications are going to use only shmat/shmget system calls. Users who -wish to use hugetlb page via shared memory segment should be a member of -a supplementary group and system admin needs to configure that gid into -/proc/sys/vm/hugetlb_shm_group. It is possible for same or different -applications to use any combination of mmaps and shm* calls, though the -mount of filesystem will be required for using mmap calls. +applications are going to use only shmat/shmget system calls or mmap with +MAP_HUGETLB. Users who wish to use hugetlb page via shared memory segment +should be a member of a supplementary group and system admin needs to +configure that gid into /proc/sys/vm/hugetlb_shm_group. It is possible for +same or different applications to use any combination of mmaps and shm* +calls, though the mount of filesystem will be required for using mmap calls +without MAP_HUGETLB. For an example of how to use mmap with MAP_HUGETLB see +map_hugetlb.c. *******************************************************************
Documentation/vm/map_hugetlb.c new file +77 -0
77 lines not on this page · raw message
Signature · 7 lines
1.6.3.2 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Andrew Morton
maintainerRe: [PATCH 2/3] Add MAP_HUGETLB for mmaping pseudo-anonymous huge page regions
In reply to Eric B MunsonQuoted 11 lines · On Tue, 25 Aug 2009 12:14:53 +0100 Eric B Munson <[email protected]> wrote:
This patch adds 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_HUGETLBis a modifier ofMAP_ANONYMOUSand so must be specified with it. The region will behave the same as aMAP_ANONYMOUSregion using small pages.Signed-off-by Eric B Munson <[email protected]>--- include/asm-generic/mman-common.h | 1 + include/linux/hugetlb.h | 7 +++++++ mm/mmap.c | 19 +++++++++++++++++++
alpha fix:
From: Andrew Morton <[email protected]>
mm/mmap.c: In function 'do_mmap_pgoff':mm/mmap.c:953: error: 'MAP_HUGETLB' undeclared (first use in this function) mm/mmap.c:953: error: (Each undeclared identifier is reported only once mm/mmap.c:953: error: for each function it appears in.)
---
arch/alpha/include/asm/mman.h | 1 + 1 file changed, 1 insertion(+)
arch/alpha/include/asm/mman.h renamed from arch/alpha/include/asm/mman.h~hugetlb-add-map_hugetlb-for-mmaping-pseudo-anonymous-huge-page-regions-alpha-fix +1 -0
@@ -28,6 +28,7 @@#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_HUGETLB 0x80000/* create a huge page mapping */ #define MS_ASYNC 1/* sync memory asynchronously */ #define MS_SYNC 2/* synchronous memory sync */
_
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Andrew Morton
maintainerRe: [PATCH 2/3] Add MAP_HUGETLB for mmaping pseudo-anonymous huge page regions
Quoted 2 lines · On Thu, 17 Sep 2009 15:44:04 -0700 Andrew Morton <[email protected]>…
mm/mmap.c: In function 'do_mmap_pgoff':mm/mmap.c:953: error: 'MAP_HUGETLB' undeclared (first use in this function)
mips breaks as well.
I don't know how many other architectures broke. I disabled the patches.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Arnd Bergmann
maintainerPATCH 1/1 Add MAP_HUGETLB for mmaping pseudo-anonymous huge page regions
This patch adds 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.
---
Quoted 9 lines · Andrew Morton
Quoted 2 lines · On Thu, 17 Sep 2009 15:44:04 -0700 Andrew Morton <[email protected]>…
mm/mmap.c: In function 'do_mmap_pgoff':mm/mmap.c:953: error: 'MAP_HUGETLB' undeclared (first use in this function)mips breaks as well.
I don't know how many other architectures broke. I disabled the patches.
two: parisc and xtensa.
It's also done in a different way from the existing flags, which makes it more likely to break again if someone tries to add another flag.
This patch is more along the lines of how I explained it could be done, adding the MAP_HUGETLB (and MAP_STACK) flags to the existing lists in a consistent way.
A logical next step would be to replace the mman.h files that are basically copies of include/asm-generic/mman.h.
Arnd <>< --- arch/alpha/include/asm/mman.h | 2 ++ arch/arm/include/asm/mman.h | 2 ++ arch/avr32/include/asm/mman.h | 2 ++ arch/cris/include/asm/mman.h | 2 ++ arch/frv/include/asm/mman.h | 2 ++ arch/h8300/include/asm/mman.h | 2 ++ arch/ia64/include/asm/mman.h | 2 ++ arch/m32r/include/asm/mman.h | 2 ++ arch/m68k/include/asm/mman.h | 2 ++ arch/mips/include/asm/mman.h | 2 ++ arch/mn10300/include/asm/mman.h | 2 ++ arch/parisc/include/asm/mman.h | 2 ++ arch/powerpc/include/asm/mman.h | 2 ++ arch/s390/include/asm/mman.h | 2 ++ arch/sparc/include/asm/mman.h | 2 ++ arch/x86/include/asm/mman.h | 1 + arch/xtensa/include/asm/mman.h | 2 ++ include/asm-generic/mman.h | 1 + 18 files changed, 34 insertions(+), 0 deletions(-)
arch/alpha/include/asm/mman.h +2 -0
@@ -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 */
arch/arm/include/asm/mman.h +2 -0
@@ -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 */
arch/avr32/include/asm/mman.h +2 -0
@@ -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 */
arch/cris/include/asm/mman.h +2 -0
@@ -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 */
arch/frv/include/asm/mman.h +2 -0
@@ -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 */
arch/h8300/include/asm/mman.h +2 -0
@@ -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 */
arch/ia64/include/asm/mman.h +2 -0
@@ -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 */
arch/m32r/include/asm/mman.h +2 -0
@@ -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 */
arch/m68k/include/asm/mman.h +2 -0
@@ -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 */
arch/mips/include/asm/mman.h +2 -0
@@ -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
arch/mn10300/include/asm/mman.h +2 -0
@@ -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 */
arch/parisc/include/asm/mman.h +2 -0
@@ -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 */
arch/powerpc/include/asm/mman.h +2 -0
@@ -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
arch/s390/include/asm/mman.h +2 -0
@@ -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 */
arch/sparc/include/asm/mman.h +2 -0
@@ -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__
arch/x86/include/asm/mman.h +1 -0
@@ -13,6 +13,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 */
arch/xtensa/include/asm/mman.h +2 -0
@@ -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
include/asm-generic/mman.h +1 -0
@@ -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 */
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Arnd Bergmann
maintainerPATCH 1/1 remove duplicate asm/mman.h files
A number of architectures have identical asm/mman.h files, x86 differs only in a single line, so they can all be merged by using the new generic file.
The remaining asm/mman.h files are substantially different from each other.
---
Quoted 2 lines · Arnd Bergmann
A logical next step would be to replace the
mman.hfiles that are basically copies ofinclude/asm-generic/mman.h.
We might as well do it now, since we're touching them anyway... Patch applies on top of the previous one.
arch/arm/include/asm/mman.h | 20 +------------------- arch/avr32/include/asm/mman.h | 20 +------------------- arch/cris/include/asm/mman.h | 22 +--------------------- arch/frv/include/asm/mman.h | 21 +-------------------- arch/h8300/include/asm/mman.h | 20 +------------------- arch/ia64/include/asm/mman.h | 16 ++-------------- arch/m32r/include/asm/mman.h | 20 +------------------- arch/m68k/include/asm/mman.h | 20 +------------------- arch/mn10300/include/asm/mman.h | 31 +------------------------------ arch/s390/include/asm/mman.h | 15 +-------------- arch/x86/include/asm/mman.h | 15 +-------------- 11 files changed, 12 insertions(+), 208 deletions(-)
arch/arm/include/asm/mman.h +1 -19
@@ -1,19 +1 @@ -#ifndef __ARM_MMAN_H__ -#define __ARM_MMAN_H__ - -#include <asm-generic/mman-common.h> - -#define MAP_GROWSDOWN 0x0100/* stack-like segment */ -#define MAP_DENYWRITE 0x0800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000/* mark it as an executable */ -#define MAP_LOCKED 0x2000/* pages are locked */ -#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 */ - -#endif /* __ARM_MMAN_H__ */ +#include <asm-generic/mman.h>
arch/avr32/include/asm/mman.h +1 -19
@@ -1,19 +1 @@ -#ifndef __ASM_AVR32_MMAN_H__ -#define __ASM_AVR32_MMAN_H__ - -#include <asm-generic/mman-common.h> - -#define MAP_GROWSDOWN 0x0100/* stack-like segment */ -#define MAP_DENYWRITE 0x0800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000/* mark it as an executable */ -#define MAP_LOCKED 0x2000/* pages are locked */ -#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 */ - -#endif /* __ASM_AVR32_MMAN_H__ */ +#include <asm-generic/mman.h>
arch/cris/include/asm/mman.h +1 -21
@@ -1,21 +1 @@ -#ifndef __CRIS_MMAN_H__ -#define __CRIS_MMAN_H__ - -/* verbatim copy of asm-i386/ version */ - -#include <asm-generic/mman-common.h> - -#define MAP_GROWSDOWN 0x0100/* stack-like segment */ -#define MAP_DENYWRITE 0x0800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000/* mark it as an executable */ -#define MAP_LOCKED 0x2000/* pages are locked */ -#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 */ - -#endif /* __CRIS_MMAN_H__ */ +#include <asm-generic/mman.h>
arch/frv/include/asm/mman.h +1 -20
@@ -1,20 +1 @@ -#ifndef __ASM_MMAN_H__ -#define __ASM_MMAN_H__ - -#include <asm-generic/mman-common.h> - -#define MAP_GROWSDOWN 0x0100/* stack-like segment */ -#define MAP_DENYWRITE 0x0800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000/* mark it as an executable */ -#define MAP_LOCKED 0x2000/* pages are locked */ -#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 */ - -#endif /* __ASM_MMAN_H__ */ - +#include <asm-generic/mman.h>
arch/h8300/include/asm/mman.h +1 -19
@@ -1,19 +1 @@ -#ifndef __H8300_MMAN_H__ -#define __H8300_MMAN_H__ - -#include <asm-generic/mman-common.h> - -#define MAP_GROWSDOWN 0x0100/* stack-like segment */ -#define MAP_DENYWRITE 0x0800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000/* mark it as an executable */ -#define MAP_LOCKED 0x2000/* pages are locked */ -#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 */ - -#endif /* __H8300_MMAN_H__ */ +#include <asm-generic/mman.h>
arch/ia64/include/asm/mman.h +2 -14
@@ -8,21 +8,9 @@* David Mosberger-Tang <[email protected]>, Hewlett-Packard Co */ -#include <asm-generic/mman-common.h> +#include <asm-generic/mman.h> -#define MAP_GROWSDOWN 0x00100/* stack-like segment */ -#define MAP_GROWSUP 0x00200/* register stack-like segment */ -#define MAP_DENYWRITE 0x00800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x01000/* mark it as an executable */ -#define MAP_LOCKED 0x02000/* pages are locked */ -#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 */ +#define MAP_GROWSUP 0x0200/* register stack-like segment */ #ifdef __KERNEL__#ifndef __ASSEMBLY__
arch/m32r/include/asm/mman.h +1 -19
@@ -1,19 +1 @@ -#ifndef __M32R_MMAN_H__ -#define __M32R_MMAN_H__ - -#include <asm-generic/mman-common.h> - -#define MAP_GROWSDOWN 0x0100/* stack-like segment */ -#define MAP_DENYWRITE 0x0800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000/* mark it as an executable */ -#define MAP_LOCKED 0x2000/* pages are locked */ -#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 */ - -#endif /* __M32R_MMAN_H__ */ +#include <asm-generic/mman.h>
arch/m68k/include/asm/mman.h +1 -19
@@ -1,19 +1 @@ -#ifndef __M68K_MMAN_H__ -#define __M68K_MMAN_H__ - -#include <asm-generic/mman-common.h> - -#define MAP_GROWSDOWN 0x0100/* stack-like segment */ -#define MAP_DENYWRITE 0x0800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000/* mark it as an executable */ -#define MAP_LOCKED 0x2000/* pages are locked */ -#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 */ - -#endif /* __M68K_MMAN_H__ */ +#include <asm-generic/mman.h>
arch/mn10300/include/asm/mman.h +1 -30
@@ -1,30 +1 @@ -/* MN10300 Constants for mmap and co. -* -* Copyright (C) 2007 Matsushita Electric Industrial Co., Ltd. -* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. -* - Derived from asm-x86/mman.h -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public Licence -* as published by the Free Software Foundation; either version -* 2 of the Licence, or (at your option) any later version. -*/ -#ifndef _ASM_MMAN_H -#define _ASM_MMAN_H - -#include <asm-generic/mman-common.h> - -#define MAP_GROWSDOWN 0x0100/* stack-like segment */ -#define MAP_DENYWRITE 0x0800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000/* mark it as an executable */ -#define MAP_LOCKED 0x2000/* pages are locked */ -#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 */ - -#endif /* _ASM_MMAN_H */ +#include <asm-generic/mman.h>
arch/s390/include/asm/mman.h +1 -14
@@ -9,20 +9,7 @@#ifndef __S390_MMAN_H__#define __S390_MMAN_H__ -#include <asm-generic/mman-common.h> - -#define MAP_GROWSDOWN 0x0100/* stack-like segment */ -#define MAP_DENYWRITE 0x0800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000/* mark it as an executable */ -#define MAP_LOCKED 0x2000/* pages are locked */ -#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 */ +#include <asm-generic/mman.h> #if defined(__KERNEL__) && !defined(__ASSEMBLY__) && defined(CONFIG_64BIT )int s390_mmap_check (unsigned long addr,unsigned long len);
arch/x86/include/asm/mman.h +1 -13
@@ -1,21 +1,8 @@#ifndef _ASM_X86_MMAN_H#define _ASM_X86_MMAN_H -#include <asm-generic/mman-common.h> +#include <asm-generic/mman.h> #define MAP_32BIT 0x40/* only give out 32bit addresses */ -#define MAP_GROWSDOWN 0x0100/* stack-like segment */ -#define MAP_DENYWRITE 0x0800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000/* mark it as an executable */ -#define MAP_LOCKED 0x2000/* pages are locked */ -#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 */
Re: [PATCH] remove duplicate asm/mman.h files
Quoted 18 lines · Arnd Bergmann
arch/ia64/include/asm/mman.h +1
-8@@ -8,21 +8,9 @@* David Mosberger-Tang <[email protected]>, Hewlett-Packard Co */ -#include <asm-generic/mman-common.h> +#include <asm-generic/mman.h> -#define MAP_GROWSDOWN 0x00100/* stack-like segment */ -#define MAP_GROWSUP 0x00200/* register stack-like segment */ -#define MAP_DENYWRITE 0x00800/* ETXTBSY */ -#define MAP_EXECUTABLE 0x01000/* mark it as an executable */ -#define MAP_LOCKED 0x02000/* pages are locked */ -#define MAP_NORESERVE 0x04000/* don't check for reservations */ -#define MAP_POPULATE 0x08000/* populate (prefault) pagetables */
arch/ia64/include/asm/mman.h line 16
Quoted 10 lines
arch/ia64/include/asm/mman.h +1
-6-#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 */ +#define MAP_GROWSUP 0x0200/* register stack-like segment */ #ifdef __KERNEL__#ifndef __ASSEMBLY__
ia64 doesn't use MAP_GROWSUP, so it's probably not necessary to carry it along with your cleanup.
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Arnd Bergmann
maintainerRe: [PATCH] remove duplicate asm/mman.h files
Quoted 11 lines · David Rientjes
arch/ia64/include/asm/mman.h line 16
Quoted 6 lines · Arnd Bergmann
arch/ia64/include/asm/mman.h +1
-2-#define MCL_CURRENT 1/* lock all current mappings */ -#define MCL_FUTURE 2/* lock all future mappings */ +#define MAP_GROWSUP 0x0200/* register stack-like segment */ #ifdef __KERNEL__#ifndef __ASSEMBLY__ia64 doesn't use
MAP_GROWSUP, so it's probably not necessary to carry it along with your cleanup.
ia64 is the only architecture defining it, nobody uses it in the kernel. If the ia64 maintainers want to remove it in a separate patch, that would probably be a good idea.
I tried not to change the ABI in any way in my patch, and there is a theoretical possibility that some user space program on ia64 currently depends on that definition.
Arnd <><
Re: [PATCH] remove duplicate asm/mman.h files
Quoted 10 lines · Arnd Bergmann
Quoted 9 lines
Review
Quoted 6 lines
(quoted diff) +1
-2-#define MCL_CURRENT 1 /* lock all current mappings */ -#define MCL_FUTURE 2 /* lock all future mappings */ +#define MAP_GROWSUP 0x0200 /* register stack-like segment */ #ifdef __KERNEL__ #ifndef __ASSEMBLY__ia64 doesn't use
MAP_GROWSUP, so it's probably not necessary to carry it along with your cleanup.
Quoted 4 lines
ia64 is the only architecture defining it, nobody uses it in the kernel. If the ia64 maintainers want to remove it in a separate patch, that would probably be a good idea.
I'll do it then.
Quoted 4 lines
I tried not to change the ABI in any way in my patch, and there is a theoretical possibility that some user space program on ia64 currently depends on that definition.
I don't buy that as justification, if some userspace program uses it based on the false belief that it actually does what it says, it's probably better to break their build than perpetuating the lie that it's different than ~MAP_GROWSDOWN.
ia64: remove definition for MAP_GROWSUP
MAP_GROWSUP is unused.
---
arch/ia64/include/asm/mman.h +0 -1
@@ -11,7 +11,6 @@#include <asm-generic/mman-common.h> #define MAP_GROWSDOWN 0x00100/* stack-like segment */ -#define MAP_GROWSUP 0x00200/* register stack-like segment */ #define MAP_DENYWRITE 0x00800/* ETXTBSY */ #define MAP_EXECUTABLE 0x01000/* mark it as an executable */ #define MAP_LOCKED 0x02000/* pages are locked */
Re: [PATCH] remove duplicate asm/mman.h files
Quoted 9 lines · David Rientjes
Quoted 4 lines
I tried not to change the ABI in any way in my patch, and there is a theoretical possibility that some user space program on ia64 currently depends on that definition.
I don't buy that as justification, if some userspace program uses it based on the false belief that it actually does what it says, it's probably better to break their build than perpetuating the lie that it's different than ~MAP_GROWSDOWN.
It's more a matter of principle of my patches. I try to strictly separate patches that move code around (like the one I sent) from those that change contents (like yours, or the one before that adds MAP_STACK and MAP_HUGETLB).
Removing a definition from an exported header file either requires specific knowledge about why it is there to start with, or more research on the topic than I wanted to do. For instance, a theoretical program might have a helper function correctly doing
void *xmmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset)
{
if (flags & MAP_GROWSUP) { /* MAP_GROWSUP is not supported */
errno = -EINVAL;
return MAP_FAILED;
}
return mmap(addr, length, prot, flags, fd, offset);
}Of course, such a program would only work on ia64 currently, so it should be safe to make ia64 behave like the other architectures in this regard.
Quoted 5 lines
ia64: remove definition for
MAP_GROWSUP
MAP_GROWSUPis unused.Signed-off-by David Rientjes <[email protected]>
Re: [PATCH] remove duplicate asm/mman.h files
In reply to David RientjesQuoted 30 lines · David Rientjes
Quoted 10 lines · Arnd Bergmann
Quoted 9 lines
Review
Quoted 6 lines
(quoted diff) +1
-2-#define MCL_CURRENT 1 /* lock all current mappings */ -#define MCL_FUTURE 2 /* lock all future mappings */ +#define MAP_GROWSUP 0x0200 /* register stack-like segment */ #ifdef __KERNEL__ #ifndef __ASSEMBLY__ia64 doesn't use
MAP_GROWSUP, so it's probably not necessary to carry it along with your cleanup.Quoted 4 lines
ia64 is the only architecture defining it, nobody uses it in the kernel. If the ia64 maintainers want to remove it in a separate patch, that would probably be a good idea.
I'll do it then.
Quoted 4 lines
I tried not to change the ABI in any way in my patch, and there is a theoretical possibility that some user space program on ia64 currently depends on that definition.
I don't buy that as justification, if some userspace program uses it based on the false belief that it actually does what it says, it's probably better to break their build than perpetuating the lie that it's different than ~MAP_GROWSDOWN.
Quoted 3 lines
ia64: remove definition for
MAP_GROWSUP
MAP_GROWSUPis unused.
Is it perhaps the case that some UNIX on ia64 does implement MAP_GROWSUP, and these numbers in the Linux ia64 mman.h have been chosen to match that reference implementation? Tony will know. But I wonder if you'd do better at least to leave a MAP_GROWSUP comment on that line, so that somebody doesn't go and reuse the empty slot later on.
Hugh
Quoted 14 lines
Signed-off-by David Rientjes <[email protected]>---
arch/ia64/include/asm/mman.h +0
-1@@ -11,7 +11,6 @@#include <asm-generic/mman-common.h> #define MAP_GROWSDOWN 0x00100/* stack-like segment */ -#define MAP_GROWSUP 0x00200/* register stack-like segment */ #define MAP_DENYWRITE 0x00800/* ETXTBSY */ #define MAP_EXECUTABLE 0x01000/* mark it as an executable */ #define MAP_LOCKED 0x02000/* pages are locked */
Re: [PATCH] remove duplicate asm/mman.h files
Quoted 6 lines · Hugh Dickins
Is it perhaps the case that some UNIX on ia64 does implement
MAP_GROWSUP, and these numbers in the Linux ia64mman.hhave been chosen to match that reference implementation? Tony will know. But I wonder if you'd do better at least to leave aMAP_GROWSUPcomment on that line, so that somebody doesn't go and reuse the empty slot later on.
Reserving the bit from future use by adding a comment may be helpful, but then let's do it for MAP_GROWSDOWN too.
RE: [PATCH] remove duplicate asm/mman.h files
Quoted 9 lines
Quoted 6 lines
Is it perhaps the case that some UNIX on ia64 does implement
MAP_GROWSUP, and these numbers in the Linux ia64mman.hhave been chosen to match that reference implementation? Tony will know. But I wonder if you'd do better at least to leave aMAP_GROWSUPcomment on that line, so that somebody doesn't go and reuse the empty slot later on.Reserving the bit from future use by adding a comment may be helpful, but then let's do it for
MAP_GROWSDOWNtoo.
Tony can only speculate because this bit has been in asm/mman.h since before I started working on Linux (it is in the 2.4.0 version ... which is roughly when I started ... and long before I was responsible for it).
Perhaps it was assumed that it would be useful? Linux/ia64 does use upwardly growing memory areas (the h/w register stack engine saves "stack" registers to an area that grows upwards).
But since we have survived this long without it actually being implemented, it may be true that we don't really need it after all.
-Tony
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
RE: [PATCH] remove duplicate asm/mman.h files
Quoted 15 lines · Tony
Quoted 9 lines
Quoted 6 lines
Is it perhaps the case that some UNIX on ia64 does implement
MAP_GROWSUP, and these numbers in the Linux ia64mman.hhave been chosen to match that reference implementation? Tony will know. But I wonder if you'd do better at least to leave aMAP_GROWSUPcomment on that line, so that somebody doesn't go and reuse the empty slot later on.Reserving the bit from future use by adding a comment may be helpful, but then let's do it for
MAP_GROWSDOWNtoo.Tony can only speculate because this bit has been in
asm/mman.hsince before I started working on Linux (it is in the 2.4.0 version ... which is roughly when I started ... and long before I was responsible for it).
Quoted 8 lines
Perhaps it was assumed that it would be useful? Linux/ia64 does use upwardly growing memory areas (the h/w register stack engine saves "stack" registers to an area that grows upwards).
But since we have survived this long without it actually being implemented, it may be true that we don't really need it after all.
glibc notes that both MAP_GROWSUP and MAP_GROWSDOWN are specific to Linux, yet they don't functionally do anything. While it may be true that there's no cost associated with keeping them around, I also think exporting such flags to userspace may give developers the belief that the implementation actually respects them when they're passed.
Ulrich wanted to do this last year but it appears to have been dropped.
Unless there's a convincing argument in the other direction, I don't see why they both can't just be removed and their bits reserved.
Re: [PATCH] remove duplicate asm/mman.h files
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Quoted 1 line · David Rientjes
Ulrich wanted to do this last year but it appears to have been dropped.
I've mentioned that at that time, these flags cannot be used at all for stacks. And I don't know for what else it is useful. They should really be removed.
- --
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖ -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
iEYEARECAAYFAkq4Ez0ACgkQ2ijCOnn/RHQNtACfX+y5pIQhDusikKiQwQ8nvGRN cI8An0oThAXSwXRALt9598vbPbiVwEeJ
=sxfU
-----END PGP SIGNATURE-----
Re: [PATCH] remove duplicate asm/mman.h files
In reply to Arnd BergmannQuoted 8 lines · Arnd Bergmann
A number of architectures have identical
asm/mman.hfiles, x86 differs only in a single line, so they can all be merged by using the new generic file.The remaining
asm/mman.hfiles are substantially different from each other.Signed-off-by Arnd Bergmann <[email protected]>
Re: [PATCH] Add MAP_HUGETLB for mmaping pseudo-anonymous huge page regions
In reply to Arnd BergmannQuoted 6 lines · Arnd Bergmann
This patch adds 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_HUGETLBis a modifier ofMAP_ANONYMOUSand so must be specified with it. The region will behave the same as aMAP_ANONYMOUSregion using small pages.
Quoted 6 lines
The patch also adds the
MAP_STACKflag, which was previously defined only on some architectures but not on others. SinceMAP_STACKis meant to be a hint only, architectures can define it without assigning a specific meaning to it.Signed-off-by Arnd Bergmann <[email protected]>
I think this is a more sane way of handling the mman flags.
Re: [PATCH 1/3] hugetlbfs: Allow the creation of files suitable for MAP_PRIVATE on the vfs internal mount
In reply to Eric B MunsonQuoted 6 lines · Eric B Munson
There are two means of creating mappings backed by huge pages:
1.
mmap()a file created on hugetlbfs
2. Use shm which creates a file on an internal mount which essentially maps itMAP_SHARED
Quoted 7 lines
The internal mount is only used for shared mappings but there is very little that stops it being used for private mappings. This patch extends
hugetlbfs_file_setup()to deal with the creation of files that will be mappedMAP_PRIVATEon the internal hugetlbfs mount. This extended API is used in a subsequent patch to implement theMAP_HUGETLBmmap()flag.Signed-off-by Eric Munson <[email protected]>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>