This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Create Linux common <bits/mman-linux.h>


On 03/01/2013 07:56 AM, Andreas Jaeger wrote:
> Looking through the Linux 3.7-> 3.8 diff, I noticed some changes for
> mman.h and decided to merge the various glibc files first - like we
> did with <bits/fcntl.h>
> 
> Here's the first part of the change. Ok to commit?

I was thinking we might do this slightly differently.

See the attached patch which is an example of how I'm trying to unify
the upstream Linux UAPI headers into (a) Canonical default definitions
and (b) Per-machine changes. I want all new values to be added to the
canonical file and thus avoid per-machine drift.

For example I'd expect PowerPC to be *tiny* and look like this:
...
#include <bits/mman-linux.h>

/* The following constants don't match mman-linux.h. */
#undef MAP_LOCKED
#undef MAP_NORESERVE 
#undef MCL_CURRENT
#undef MCL_FUTURE

#define PROT_SAO        0x10            /* Strong Access Ordering */

#define MAP_RENAME      MAP_ANONYMOUS   /* In SunOS terminology */
#define MAP_NORESERVE   0x40            /* don't reserve swap pages */
#define MAP_LOCKED      0x80

#define MCL_CURRENT     0x2000          /* lock all currently mapped pages */
#define MCL_FUTURE      0x4000          /* lock all additions to address space */
....

Comments?

I haven't reviewed this with a fine-toothed comb, but I have gone
through it and checked some things.

Comments below.
 
> commit 38f982db3e0a2d928a7bc753c4f313fb6b9d0deb
> Author: Andreas Jaeger <aj@suse.de>
> Date:   Fri Mar 1 13:48:50 2013 +0100
> 
>     2013-03-01  Andreas Jaeger  <aj@suse.de>
>     
>     	* sysdeps/unix/sysv/linux/bits/mman-linux.h: New file, with
>     	* Linux
>     	common definitions.
>     
>     	* sysdeps/unix/sysv/linux/sh/bits/mman.h: Remove all defines
>     	provided by bits/mman-linux.h and include <bits/mman-linux.h>.
>     	* sysdeps/unix/sysv/linux/x86/bits/mman.h: Likewise.
>     	* sysdeps/unix/sysv/linux/s390/bits/mman.h: Likewise.
>     	* sysdeps/unix/sysv/linux/powerpc/bits/mman.h: Likewise.
>     	* sysdeps/unix/sysv/linux/sh/bits/mman.h: Likewise.
>     	* sysdeps/unix/sysv/linux/sparc/bits/mman.h: Likewise.
> 
> diff --git a/sysdeps/unix/sysv/linux/bits/mman-linux.h b/sysdeps/unix/sysv/linux/bits/mman-linux.h
> new file mode 100644
> index 0000000..69ed247
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/bits/mman-linux.h
> @@ -0,0 +1,94 @@
> +/* Definitions for POSIX memory map interface.  Linux generic version.
> +   Copyright (C) 2001-2013 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#ifndef _SYS_MMAN_H
> +# error "Never use <bits/mman-linux.h> directly; include <sys/mman.h> instead."
> +#endif
> +
> +/* The following definitions basically come from the kernel headers.
> +   But the kernel header is not namespace clean.  */
> +
> +
> +/* Protections are chosen from these bits, OR'd together.  The
> +   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> +   without PROT_READ.  The only guarantees are that no writing will be
> +   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
> +
> +#define PROT_READ	0x1		/* Page can be read.  */
> +#define PROT_WRITE	0x2		/* Page can be written.  */
> +#define PROT_EXEC	0x4		/* Page can be executed.  */
> +#define PROT_NONE	0x0		/* Page can not be accessed.  */
> +#define PROT_GROWSDOWN	0x01000000	/* Extend change to start of
> +					   growsdown vma (mprotect only).  */
> +#define PROT_GROWSUP	0x02000000	/* Extend change to start of
> +					   growsup vma (mprotect only).  */
> +
> +/* Sharing types (must choose one and only one of these).  */
> +#define MAP_SHARED	0x01		/* Share changes.  */
> +#define MAP_PRIVATE	0x02		/* Changes are private.  */
> +#ifdef __USE_MISC
> +# define MAP_TYPE	0x0f		/* Mask for type of mapping.  */
> +#endif
> +
> +/* Other flags.  */
> +#define MAP_FIXED	0x10		/* Interpret addr exactly.  */
> +#ifdef __USE_MISC
> +# define MAP_FILE	0
> +# define MAP_ANONYMOUS	0x20		/* Don't use a file.  */
> +# define MAP_ANON	MAP_ANONYMOUS
> +#endif
> +
> +/* Flags to `msync'.  */
> +#define MS_ASYNC	1		/* Sync memory asynchronously.  */
> +#define MS_SYNC		4		/* Synchronous memory sync.  */
> +#define MS_INVALIDATE	2		/* Invalidate the caches.  */
> +
> +/* Flags for `mremap'.  */
> +#ifdef __USE_GNU
> +# define MREMAP_MAYMOVE	1
> +# define MREMAP_FIXED	2
> +#endif
> +
> +/* Advice to `madvise'.  */
> +#ifdef __USE_BSD
> +# define MADV_NORMAL	  0	/* No further special treatment.  */
> +# define MADV_RANDOM	  1	/* Expect random page references.  */
> +# define MADV_SEQUENTIAL  2	/* Expect sequential page references.  */
> +# define MADV_WILLNEED	  3	/* Will need these pages.  */
> +# define MADV_DONTNEED	  4	/* Don't need these pages.  */
> +# define MADV_REMOVE	  9	/* Remove these pages and resources.  */
> +# define MADV_DONTFORK	  10	/* Do not inherit across fork.  */
> +# define MADV_DOFORK	  11	/* Do inherit across fork.  */
> +# define MADV_MERGEABLE	  12	/* KSM may merge identical pages.  */
> +# define MADV_UNMERGEABLE 13	/* KSM may not merge identical pages.  */
> +# define MADV_HUGEPAGE	  14	/* Worth backing with hugepages.  */
> +# define MADV_NOHUGEPAGE  15	/* Not worth backing with hugepages.  */
> +# define MADV_DONTDUMP	  16    /* Explicity exclude from the core dump,
> +                                   overrides the coredump filter bits.  */
> +# define MADV_DODUMP	  17	/* Clear the MADV_DONTDUMP flag.  */
> +# define MADV_HWPOISON	  100	/* Poison a page for testing.  */
> +#endif
> +
> +/* The POSIX people had to invent similar names for the same things.  */
> +#ifdef __USE_XOPEN2K
> +# define POSIX_MADV_NORMAL	0 /* No further special treatment.  */
> +# define POSIX_MADV_RANDOM	1 /* Expect random page references.  */
> +# define POSIX_MADV_SEQUENTIAL	2 /* Expect sequential page references.  */
> +# define POSIX_MADV_WILLNEED	3 /* Will need these pages.  */
> +# define POSIX_MADV_DONTNEED	4 /* Don't need these pages.  */
> +#endif
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h b/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
> index a270189..602cebf 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
> @@ -17,42 +17,17 @@
>     <http://www.gnu.org/licenses/>.  */
>  
>  #ifndef _SYS_MMAN_H
> -# error "Never use <bits/mman.h> directly; iclude <sys/mman.h> instead."
> +# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
>  #endif
>  
>  /* The following definitions basically come from the kernel headers.
>     But the kernel header is not namespace clean.  */
> +/* Include generic Linux declarations.  */
>  
> +#include <bits/mman-linux.h>
>  
> -/* Protections are chosen from these bits, OR'd together.  The
> -   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> -   without PROT_READ.  The only guarantees are that no writing will be
> -   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
>  
> -#define PROT_READ	0x1		/* Page can be read.  */
> -#define PROT_WRITE	0x2		/* Page can be written.  */
> -#define PROT_EXEC	0x4		/* Page can be executed.  */
> -#define PROT_NONE	0x0		/* Page can not be accessed.  */
>  #define PROT_SAO	0x10		/* Strong Access Ordering.  */
> -#define PROT_GROWSDOWN	0x01000000	/* Extend change to start of
> -					   growsdown vma (mprotect only).  */
> -#define PROT_GROWSUP	0x02000000	/* Extend change to start of
> -					   growsup vma (mprotect only).  */
> -
> -/* Sharing types (must choose one and only one of these).  */
> -#define MAP_SHARED	0x001		/* Share changes.  */
> -#define MAP_PRIVATE	0x002		/* Changes are private.  */
> -#ifdef __USE_MISC
> -# define MAP_TYPE	0x00f		/* Mask for type of mapping.  */
> -#endif
> -
> -/* Other flags.  */
> -#define MAP_FIXED	0x010		/* Interpret addr exactly.  */
> -#ifdef __USE_MISC
> -# define MAP_FILE	0x000
> -# define MAP_ANONYMOUS	0x020		/* Don't use a file.  */
> -# define MAP_ANON	MAP_ANONYMOUS
> -#endif
>  
>  /* These are Linux-specific.  */
>  #ifdef __USE_MISC
> @@ -67,48 +42,7 @@
>  # define MAP_HUGETLB	0x40000		/* Create huge page mapping.  */
>  #endif
>  
> -/* Flags to `msync'.  */
> -#define MS_ASYNC	1		/* Sync memory asynchronously.  */
> -#define MS_SYNC		4		/* Synchronous memory sync.  */
> -#define MS_INVALIDATE	2		/* Invalidate the caches.  */
> -
>  /* Flags for `mlockall'.  */
>  #define MCL_CURRENT	0x2000		/* Lock all currently mapped pages.  */
>  #define MCL_FUTURE	0x4000		/* Lock all additions to address
>  					   space.  */
> -
> -
> -/* Flags for `mremap'.  */
> -#ifdef __USE_GNU
> -# define MREMAP_MAYMOVE	1
> -# define MREMAP_FIXED	2
> -#endif
> -
> -/* Advice to `madvise'.  */
> -#ifdef __USE_BSD
> -# define MADV_NORMAL	  0	/* No further special treatment.  */
> -# define MADV_RANDOM	  1	/* Expect random page references.  */
> -# define MADV_SEQUENTIAL  2	/* Expect sequential page references.  */
> -# define MADV_WILLNEED	  3	/* Will need these pages.  */
> -# define MADV_DONTNEED	  4	/* Don't need these pages.  */
> -# define MADV_REMOVE	  9	/* Remove these pages and resources.  */
> -# define MADV_DONTFORK	  10	/* Do not inherit across fork.  */
> -# define MADV_DOFORK	  11	/* Do inherit across fork.  */
> -# define MADV_MERGEABLE	  12	/* KSM may merge identical pages.  */
> -# define MADV_UNMERGEABLE 13	/* KSM may not merge identical pages.  */
> -# define MADV_HUGEPAGE	  14	/* Worth backing with hugepages.  */
> -# define MADV_NOHUGEPAGE  15	/* Not worth backing with hugepages.  */
> -# define MADV_DONTDUMP	  16    /* Explicity exclude from the core dump,
> -                                   overrides the coredump filter bits.  */
> -# define MADV_DODUMP	  17	/* Clear the MADV_DONTDUMP flag.  */
> -# define MADV_HWPOISON	  100	/* Poison a page for testing.  */
> -#endif
> -
> -/* The POSIX people had to invent similar names for the same things.  */
> -#ifdef __USE_XOPEN2K
> -# define POSIX_MADV_NORMAL	0 /* No further special treatment.  */
> -# define POSIX_MADV_RANDOM	1 /* Expect random page references.  */
> -# define POSIX_MADV_SEQUENTIAL	2 /* Expect sequential page references.  */
> -# define POSIX_MADV_WILLNEED	3 /* Will need these pages.  */
> -# define POSIX_MADV_DONTNEED	4 /* Don't need these pages.  */
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/mman.h b/sysdeps/unix/sysv/linux/s390/bits/mman.h
> index 3e7bf92..59f4511 100644
> --- a/sysdeps/unix/sysv/linux/s390/bits/mman.h
> +++ b/sysdeps/unix/sysv/linux/s390/bits/mman.h
> @@ -24,38 +24,10 @@
>     But the kernel header is not namespace clean.  */
>  
>  
> -/* Protections are chosen from these bits, OR'd together.  The
> -   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> -   without PROT_READ.  The only guarantees are that no writing will be
> -   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
> -
> -#define PROT_READ	0x1		/* Page can be read.  */
> -#define PROT_WRITE	0x2		/* Page can be written.  */
> -#define PROT_EXEC	0x4		/* Page can be executed.  */
> -#define PROT_NONE	0x0		/* Page can not be accessed.  */
> -#define PROT_GROWSDOWN	0x01000000	/* Extend change to start of
> -					   growsdown vma (mprotect only).  */
> -#define PROT_GROWSUP	0x02000000	/* Extend change to start of
> -					   growsup vma (mprotect only).  */
> -
> -/* Sharing types (must choose one and only one of these).  */
> -#define MAP_SHARED	0x01		/* Share changes.  */
> -#define MAP_PRIVATE	0x02		/* Changes are private.  */
> -#ifdef __USE_MISC
> -# define MAP_TYPE	0x0f		/* Mask for type of mapping.  */
> -#endif
> -
> -/* Other flags.  */
> -#define MAP_FIXED	0x10		/* Interpret addr exactly.  */
> -#ifdef __USE_MISC
> -# define MAP_FILE	0
> -# define MAP_ANONYMOUS	0x20		/* Don't use a file.  */
> -# define MAP_ANON	MAP_ANONYMOUS
> -#endif
> -
>  /* These are Linux-specific.  */
>  #ifdef __USE_MISC
>  # define MAP_GROWSDOWN	0x00100		/* Stack-like segment.  */
> +// XXX? Not defined in Linux kernel 3.8
>  # define MAP_GROWSUP	0x00200		/* Register stack-like segment */

Now we need to be very careful that the kernel people don't reuse this value.

As you can see from my comments in the unification patch:
+#define __MAP_PRIVATE5	0x0200		/* Do not use. Private to sparc and tile. */

It's actually MAP_GROWSDOWN on SPARC, and MAP_LOCKED on TILE.

Do you know anyone that we can get to push these kinds of changes upstream?

>  # define MAP_DENYWRITE	0x00800		/* ETXTBSY */
>  # define MAP_EXECUTABLE	0x01000		/* Mark it as an executable.  */
> @@ -67,47 +39,7 @@
>  # define MAP_HUGETLB	0x40000		/* Create huge page mapping.  */
>  #endif
>  
> -/* Flags to `msync'.  */
> -#define MS_ASYNC	1		/* Sync memory asynchronously.  */
> -#define MS_SYNC		4		/* Synchronous memory sync.  */
> -#define MS_INVALIDATE	2		/* Invalidate the caches.  */
> -
>  /* Flags for `mlockall'.  */
>  #define MCL_CURRENT	1		/* Lock all currently mapped pages.  */
>  #define MCL_FUTURE	2		/* Lock all additions to address
>  					   space.  */

Why aren't these in the generic file? As far as I can tell almost everyone
uses the values of 1 and 2 respectively. The exception being SPARC.

> -
> -/* Flags for `mremap'.  */
> -#ifdef __USE_GNU
> -# define MREMAP_MAYMOVE	1
> -# define MREMAP_FIXED	2
> -#endif
> -
> -/* Advice to `madvise'.  */
> -#ifdef __USE_BSD
> -# define MADV_NORMAL	  0	/* No further special treatment.  */
> -# define MADV_RANDOM	  1	/* Expect random page references.  */
> -# define MADV_SEQUENTIAL  2	/* Expect sequential page references.  */
> -# define MADV_WILLNEED	  3	/* Will need these pages.  */
> -# define MADV_DONTNEED	  4	/* Don't need these pages.  */
> -# define MADV_REMOVE	  9	/* Remove these pages and resources.  */
> -# define MADV_DONTFORK	  10	/* Do not inherit across fork.  */
> -# define MADV_DOFORK	  11	/* Do inherit across fork.  */
> -# define MADV_MERGEABLE	  12	/* KSM may merge identical pages.  */
> -# define MADV_UNMERGEABLE 13	/* KSM may not merge identical pages.  */
> -# define MADV_HUGEPAGE	  14	/* Worth backing with hugepages.  */
> -# define MADV_NOHUGEPAGE  15	/* Not worth backing with hugepages.  */
> -# define MADV_DONTDUMP	  16    /* Explicity exclude from the core dump,
> -                                   overrides the coredump filter bits.  */
> -# define MADV_DODUMP	  17	/* Clear the MADV_DONTDUMP flag.  */
> -# define MADV_HWPOISON	  100	/* Poison a page for testing.  */
> -#endif
> -
> -/* The POSIX people had to invent similar names for the same things.  */
> -#ifdef __USE_XOPEN2K
> -# define POSIX_MADV_NORMAL	0 /* No further special treatment.  */
> -# define POSIX_MADV_RANDOM	1 /* Expect random page references.  */
> -# define POSIX_MADV_SEQUENTIAL	2 /* Expect sequential page references.  */
> -# define POSIX_MADV_WILLNEED	3 /* Will need these pages.  */
> -# define POSIX_MADV_DONTNEED	4 /* Don't need these pages.  */
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/sh/bits/mman.h b/sysdeps/unix/sysv/linux/sh/bits/mman.h
> index 40da97e..0573f83 100644
> --- a/sysdeps/unix/sysv/linux/sh/bits/mman.h
> +++ b/sysdeps/unix/sysv/linux/sh/bits/mman.h
> @@ -23,35 +23,8 @@
>  /* The following definitions basically come from the kernel headers.
>     But the kernel header is not namespace clean.  */
>  
> -
> -/* Protections are chosen from these bits, OR'd together.  The
> -   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> -   without PROT_READ.  The only guarantees are that no writing will be
> -   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
> -
> -#define PROT_READ	0x1		/* Page can be read.  */
> -#define PROT_WRITE	0x2		/* Page can be written.  */
> -#define PROT_EXEC	0x4		/* Page can be executed.  */
> -#define PROT_NONE	0x0		/* Page can not be accessed.  */
> -#define PROT_GROWSDOWN	0x01000000	/* Extend change to start of
> -					   growsdown vma (mprotect only).  */
> -#define PROT_GROWSUP	0x02000000	/* Extend change to start of
> -					   growsup vma (mprotect only).  */
> -
> -/* Sharing types (must choose one and only one of these).  */
> -#define MAP_SHARED	0x01		/* Share changes.  */
> -#define MAP_PRIVATE	0x02		/* Changes are private.  */
> -#ifdef __USE_MISC
> -# define MAP_TYPE	0x0f		/* Mask for type of mapping.  */
> -#endif
> -
> -/* Other flags.  */
> -#define MAP_FIXED	0x10		/* Interpret addr exactly.  */
> -#ifdef __USE_MISC
> -# define MAP_FILE	0
> -# define MAP_ANONYMOUS	0x20		/* Don't use a file.  */
> -# define MAP_ANON	MAP_ANONYMOUS
> -#endif
> +/* Include generic Linux declarations.  */
> +#include <bits/mman-linux.h>
>  
>  /* These are Linux-specific.  */
>  #ifdef __USE_MISC
> @@ -66,47 +39,7 @@
>  # define MAP_HUGETLB	0x40000		/* Create huge page mapping.  */
>  #endif
>  
> -/* Flags to `msync'.  */
> -#define MS_ASYNC	1		/* Sync memory asynchronously.  */
> -#define MS_SYNC		4		/* Synchronous memory sync.  */
> -#define MS_INVALIDATE	2		/* Invalidate the caches.  */
> -
>  /* Flags for `mlockall'.  */
>  #define MCL_CURRENT	1		/* Lock all currently mapped pages.  */
>  #define MCL_FUTURE	2		/* Lock all additions to address
>  					   space.  */
> -
> -/* Flags for `mremap'.  */
> -#ifdef __USE_GNU
> -# define MREMAP_MAYMOVE	1
> -# define MREMAP_FIXED	2
> -#endif
> -
> -/* Advice to `madvise'.  */
> -#ifdef __USE_BSD
> -# define MADV_NORMAL	  0	/* No further special treatment.  */
> -# define MADV_RANDOM	  1	/* Expect random page references.  */
> -# define MADV_SEQUENTIAL  2	/* Expect sequential page references.  */
> -# define MADV_WILLNEED	  3	/* Will need these pages.  */
> -# define MADV_DONTNEED	  4	/* Don't need these pages.  */
> -# define MADV_REMOVE	  9	/* Remove these pages and resources.  */
> -# define MADV_DONTFORK	  10	/* Do not inherit across fork.  */
> -# define MADV_DOFORK	  11	/* Do inherit across fork.  */
> -# define MADV_MERGEABLE	  12	/* KSM may merge identical pages.  */
> -# define MADV_UNMERGEABLE 13	/* KSM may not merge identical pages.  */
> -# define MADV_HUGEPAGE	  14	/* Worth backing with hugepages.  */
> -# define MADV_NOHUGEPAGE  15	/* Not worth backing with hugepages.  */
> -# define MADV_DONTDUMP	  16    /* Explicity exclude from the core dump,
> -                                   overrides the coredump filter bits.  */
> -# define MADV_DODUMP	  17	/* Clear the MADV_DONTDUMP flag.  */
> -# define MADV_HWPOISON	  100	/* Poison a page for testing.  */
> -#endif
> -
> -/* The POSIX people had to invent similar names for the same things.  */
> -#ifdef __USE_XOPEN2K
> -# define POSIX_MADV_NORMAL	0 /* No further special treatment.  */
> -# define POSIX_MADV_RANDOM	1 /* Expect random page references.  */
> -# define POSIX_MADV_SEQUENTIAL	2 /* Expect sequential page references.  */
> -# define POSIX_MADV_WILLNEED	3 /* Will need these pages.  */
> -# define POSIX_MADV_DONTNEED	4 /* Don't need these pages.  */
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/mman.h b/sysdeps/unix/sysv/linux/sparc/bits/mman.h
> index 616e243..64cdd2e 100644
> --- a/sysdeps/unix/sysv/linux/sparc/bits/mman.h
> +++ b/sysdeps/unix/sysv/linux/sparc/bits/mman.h
> @@ -23,34 +23,11 @@
>  /* The following definitions basically come from the kernel headers.
>     But the kernel header is not namespace clean.  */
>  
> -
> -/* Protections are chosen from these bits, OR'd together.  The
> -   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> -   without PROT_READ.  The only guarantees are that no writing will be
> -   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
> -
> -#define PROT_READ	0x1		/* Page can be read.  */
> -#define PROT_WRITE	0x2		/* Page can be written.  */
> -#define PROT_EXEC	0x4		/* Page can be executed.  */
> -#define PROT_NONE	0x0		/* Page can not be accessed.  */
> -#define PROT_GROWSDOWN	0x01000000	/* Extend change to start of
> -					   growsdown vma (mprotect only).  */
> -#define PROT_GROWSUP	0x02000000	/* Extend change to start of
> -					   growsup vma (mprotect only).  */
> -
> -/* Sharing types (must choose one and only one of these).  */
> -#define MAP_SHARED	0x01		/* Share changes.  */
> -#define MAP_PRIVATE	0x02		/* Changes are private.  */
> -#ifdef __USE_MISC
> -# define MAP_TYPE	0x0f		/* Mask for type of mapping.  */
> -#endif
> +/* Include generic Linux declarations.  */
> +#include <bits/mman-linux.h>
>  
>  /* Other flags.  */
> -#define MAP_FIXED	0x10		/* Interpret addr exactly.  */
>  #ifdef __USE_MISC
> -# define MAP_FILE	0x00
> -# define MAP_ANONYMOUS	0x20		/* Don't use a file.  */
> -# define MAP_ANON	MAP_ANONYMOUS
>  # define MAP_RENAME	MAP_ANONYMOUS
>  #endif
>  
> @@ -68,48 +45,8 @@
>  # define MAP_HUGETLB	0x40000		/* Create huge page mapping.  */
>  #endif
>  
> -/* Flags to `msync'.  */
> -#define MS_ASYNC	1		/* Sync memory asynchronously.  */
> -#define MS_SYNC		4		/* Synchronous memory sync.  */
> -#define MS_INVALIDATE	2		/* Invalidate the caches.  */
> -
>  /* Flags for `mlockall'.  */
>  #define MCL_CURRENT	0x2000		/* Lock all currently mapped pages.  */
>  #define MCL_FUTURE	0x4000		/* Lock all additions to address
>  					   space.  */
>  
> -/* Flags for `mremap'.  */
> -#ifdef __USE_GNU
> -# define MREMAP_MAYMOVE	1
> -# define MREMAP_FIXED	2
> -#endif
> -
> -/* Advice to `madvise'.  */
> -#ifdef __USE_BSD
> -# define MADV_NORMAL	  0	/* No further special treatment.  */
> -# define MADV_RANDOM	  1	/* Expect random page references.  */
> -# define MADV_SEQUENTIAL  2	/* Expect sequential page references.  */
> -# define MADV_WILLNEED	  3	/* Will need these pages.  */
> -# define MADV_DONTNEED	  4	/* Don't need these pages.  */
> -# define MADV_FREE	  5	/* Content can be freed (Solaris).  */
> -# define MADV_REMOVE	  9	/* Remove these pages and resources.  */
> -# define MADV_DONTFORK	  10	/* Do not inherit across fork.  */
> -# define MADV_DOFORK	  11	/* Do inherit across fork.  */
> -# define MADV_MERGEABLE	  12	/* KSM may merge identical pages.  */
> -# define MADV_UNMERGEABLE 13	/* KSM may not merge identical pages.  */
> -# define MADV_HUGEPAGE	  14	/* Worth backing with hugepages.  */
> -# define MADV_NOHUGEPAGE  15	/* Not worth backing with hugepages.  */
> -# define MADV_DONTDUMP	  16    /* Explicity exclude from the core dump,
> -                                   overrides the coredump filter bits.  */
> -# define MADV_DODUMP	  17	/* Clear the MADV_DONTDUMP flag.  */
> -# define MADV_HWPOISON	  100	/* Poison a page for testing.  */
> -#endif
> -
> -/* The POSIX people had to invent similar names for the same things.  */
> -#ifdef __USE_XOPEN2K
> -# define POSIX_MADV_NORMAL	0 /* No further special treatment.  */
> -# define POSIX_MADV_RANDOM	1 /* Expect random page references.  */
> -# define POSIX_MADV_SEQUENTIAL	2 /* Expect sequential page references.  */
> -# define POSIX_MADV_WILLNEED	3 /* Will need these pages.  */
> -# define POSIX_MADV_DONTNEED	4 /* Don't need these pages.  */
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/x86/bits/mman.h b/sysdeps/unix/sysv/linux/x86/bits/mman.h
> index 591df13..0f0f8b1 100644
> --- a/sysdeps/unix/sysv/linux/x86/bits/mman.h
> +++ b/sysdeps/unix/sysv/linux/x86/bits/mman.h
> @@ -23,34 +23,11 @@
>  /* The following definitions basically come from the kernel headers.
>     But the kernel header is not namespace clean.  */
>  
> -
> -/* Protections are chosen from these bits, OR'd together.  The
> -   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> -   without PROT_READ.  The only guarantees are that no writing will be
> -   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
> -
> -#define PROT_READ	0x1		/* Page can be read.  */
> -#define PROT_WRITE	0x2		/* Page can be written.  */
> -#define PROT_EXEC	0x4		/* Page can be executed.  */
> -#define PROT_NONE	0x0		/* Page can not be accessed.  */
> -#define PROT_GROWSDOWN	0x01000000	/* Extend change to start of
> -					   growsdown vma (mprotect only).  */
> -#define PROT_GROWSUP	0x02000000	/* Extend change to start of
> -					   growsup vma (mprotect only).  */
> -
> -/* Sharing types (must choose one and only one of these).  */
> -#define MAP_SHARED	0x01		/* Share changes.  */
> -#define MAP_PRIVATE	0x02		/* Changes are private.  */
> -#ifdef __USE_MISC
> -# define MAP_TYPE	0x0f		/* Mask for type of mapping.  */
> -#endif
> +/* Include generic Linux declarations.  */
> +#include <bits/mman-linux.h>
>  
>  /* Other flags.  */
> -#define MAP_FIXED	0x10		/* Interpret addr exactly.  */
>  #ifdef __USE_MISC
> -# define MAP_FILE	0
> -# define MAP_ANONYMOUS	0x20		/* Don't use a file.  */
> -# define MAP_ANON	MAP_ANONYMOUS
>  # define MAP_32BIT	0x40		/* Only give out 32-bit addresses.  */
>  #endif
>  
> @@ -67,47 +44,7 @@
>  # define MAP_HUGETLB	0x40000		/* Create huge page mapping.  */
>  #endif
>  
> -/* Flags to `msync'.  */
> -#define MS_ASYNC	1		/* Sync memory asynchronously.  */
> -#define MS_SYNC		4		/* Synchronous memory sync.  */
> -#define MS_INVALIDATE	2		/* Invalidate the caches.  */
> -
>  /* Flags for `mlockall'.  */
>  #define MCL_CURRENT	1		/* Lock all currently mapped pages.  */
>  #define MCL_FUTURE	2		/* Lock all additions to address
>  					   space.  */
> -
> -/* Flags for `mremap'.  */
> -#ifdef __USE_GNU
> -# define MREMAP_MAYMOVE	1
> -# define MREMAP_FIXED	2
> -#endif
> -
> -/* Advice to `madvise'.  */
> -#ifdef __USE_BSD
> -# define MADV_NORMAL	  0	/* No further special treatment.  */
> -# define MADV_RANDOM	  1	/* Expect random page references.  */
> -# define MADV_SEQUENTIAL  2	/* Expect sequential page references.  */
> -# define MADV_WILLNEED	  3	/* Will need these pages.  */
> -# define MADV_DONTNEED	  4	/* Don't need these pages.  */
> -# define MADV_REMOVE	  9	/* Remove these pages and resources.  */
> -# define MADV_DONTFORK	  10	/* Do not inherit across fork.  */
> -# define MADV_DOFORK	  11	/* Do inherit across fork.  */
> -# define MADV_MERGEABLE	  12	/* KSM may merge identical pages.  */
> -# define MADV_UNMERGEABLE 13	/* KSM may not merge identical pages.  */
> -# define MADV_HUGEPAGE	  14	/* Worth backing with hugepages.  */
> -# define MADV_NOHUGEPAGE  15	/* Not worth backing with hugepages.  */
> -# define MADV_DONTDUMP	  16    /* Explicity exclude from the core dump,
> -                                   overrides the coredump filter bits.  */
> -# define MADV_DODUMP	  17	/* Clear the MADV_DONTDUMP flag.  */
> -# define MADV_HWPOISON	  100	/* Poison a page for testing.  */
> -#endif
> -
> -/* The POSIX people had to invent similar names for the same things.  */
> -#ifdef __USE_XOPEN2K
> -# define POSIX_MADV_NORMAL	0 /* No further special treatment.  */
> -# define POSIX_MADV_RANDOM	1 /* Expect random page references.  */
> -# define POSIX_MADV_SEQUENTIAL	2 /* Expect sequential page references.  */
> -# define POSIX_MADV_WILLNEED	3 /* Will need these pages.  */
> -# define POSIX_MADV_DONTNEED	4 /* Don't need these pages.  */
> -#endif
> 

Cheers,
Carlos.
diff --git a/arch/parisc/include/uapi/asm/mman.h b/arch/parisc/include/uapi/asm/mman.h
index 294d251..79137d0 100644
--- a/arch/parisc/include/uapi/asm/mman.h
+++ b/arch/parisc/include/uapi/asm/mman.h
@@ -1,24 +1,30 @@
 #ifndef __PARISC_MMAN_H__
 #define __PARISC_MMAN_H__
 
-#define PROT_READ	0x1		/* page can be read */
-#define PROT_WRITE	0x2		/* page can be written */
-#define PROT_EXEC	0x4		/* page can be executed */
-#define PROT_SEM	0x8		/* page may be used for atomic ops */
-#define PROT_NONE	0x0		/* page can not be accessed */
-#define PROT_GROWSDOWN	0x01000000	/* mprotect flag: extend change to start of growsdown vma */
-#define PROT_GROWSUP	0x02000000	/* mprotect flag: extend change to end of growsup vma */
+#include <asm-generic/mman.h>
+
+/* The following constants don't match mman.h. */
+#undef MAP_TYPE
+#undef MAP_FIXED
+#undef MAP_ANONYMOUS
+#undef MAP_GROWSDOWN
+#undef MAP_POPULATE
+#undef MAP_NONBLOCK
+#undef MAP_STACK
+#undef MAP_HUGETLB
+#undef MS_ASYNC
+#undef MS_INVALIDATE
+#undef MS_SYNC
+#undef MADV_MERGEABLE
+#undef MADV_UNMERGEABLE
+#undef MADV_HUGEPAGE
+#undef MADV_NOHUGEPAGE
+#undef MADV_DONTDUMP
+#undef MADV_DODUMP
 
-#define MAP_SHARED	0x01		/* Share changes */
-#define MAP_PRIVATE	0x02		/* Changes are private */
 #define MAP_TYPE	0x03		/* Mask for type of mapping */
 #define MAP_FIXED	0x04		/* Interpret addr exactly */
 #define MAP_ANONYMOUS	0x10		/* don't use a file */
-
-#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_GROWSDOWN	0x8000		/* stack-like segment */
 #define MAP_POPULATE	0x10000		/* populate (prefault) pagetables */
 #define MAP_NONBLOCK	0x20000		/* do not block on IO */
@@ -29,23 +35,9 @@
 #define MS_ASYNC	2		/* sync memory asynchronously */
 #define MS_INVALIDATE	4		/* invalidate the caches */
 
-#define MCL_CURRENT	1		/* lock all current mappings */
-#define MCL_FUTURE	2		/* lock all future mappings */
-
-#define MADV_NORMAL     0               /* no further special treatment */
-#define MADV_RANDOM     1               /* expect random page references */
-#define MADV_SEQUENTIAL 2               /* expect sequential page references */
-#define MADV_WILLNEED   3               /* will need these pages */
-#define MADV_DONTNEED   4               /* don't need these pages */
 #define MADV_SPACEAVAIL 5               /* insure that resources are reserved */
 #define MADV_VPS_PURGE  6               /* Purge pages from VM page cache */
 #define MADV_VPS_INHERIT 7              /* Inherit parents page size */
-
-/* common/generic parameters */
-#define MADV_REMOVE	9		/* remove these pages & resources */
-#define MADV_DONTFORK	10		/* don't inherit across fork */
-#define MADV_DOFORK	11		/* do inherit across fork */
-
 /* The range 12-64 is reserved for page size specification. */
 #define MADV_4K_PAGES   12              /* Use 4K pages  */
 #define MADV_16K_PAGES  14              /* Use 16K pages */
@@ -55,30 +47,15 @@
 #define MADV_4M_PAGES   22              /* Use 4 Megabyte pages */
 #define MADV_16M_PAGES  24              /* Use 16 Megabyte pages */
 #define MADV_64M_PAGES  26              /* Use 64 Megabyte pages */
-
 #define MADV_MERGEABLE   65		/* KSM may merge identical pages */
 #define MADV_UNMERGEABLE 66		/* KSM may not merge identical pages */
-
 #define MADV_HUGEPAGE	67		/* Worth backing with hugepages */
 #define MADV_NOHUGEPAGE	68		/* Not worth backing with hugepages */
-
 #define MADV_DONTDUMP   69		/* Explicity exclude from the core dump,
 					   overrides the coredump filter bits */
 #define MADV_DODUMP	70		/* Clear the MADV_NODUMP flag */
 
 /* compatibility flags */
-#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__ */
diff --git a/arch/powerpc/include/uapi/asm/mman.h b/arch/powerpc/include/uapi/asm/mman.h
index 6ea26df..ec1c84f 100644
--- a/arch/powerpc/include/uapi/asm/mman.h
+++ b/arch/powerpc/include/uapi/asm/mman.h
@@ -7,8 +7,13 @@
 #ifndef _UAPI_ASM_POWERPC_MMAN_H
 #define _UAPI_ASM_POWERPC_MMAN_H
 
-#include <asm-generic/mman-common.h>
+#include <asm-generic/mman.h>
 
+/* The following constants don't match mman.h. */
+#undef MAP_LOCKED
+#undef MAP_NORESERVE 
+#undef MCL_CURRENT
+#undef MCL_FUTURE
 
 #define PROT_SAO	0x10		/* Strong Access Ordering */
 
@@ -16,16 +21,7 @@
 #define MAP_NORESERVE   0x40            /* don't reserve swap pages */
 #define MAP_LOCKED	0x80
 
-#define MAP_GROWSDOWN	0x0100		/* stack-like segment */
-#define MAP_DENYWRITE	0x0800		/* ETXTBSY */
-#define MAP_EXECUTABLE	0x1000		/* mark it as an executable */
-
 #define MCL_CURRENT     0x2000          /* lock all currently mapped pages */
 #define MCL_FUTURE      0x4000          /* lock all additions to address space */
 
-#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 */
-
 #endif /* _UAPI_ASM_POWERPC_MMAN_H */
diff --git a/arch/sparc/include/uapi/asm/mman.h b/arch/sparc/include/uapi/asm/mman.h
index 0b14df3..f46bb61 100644
--- a/arch/sparc/include/uapi/asm/mman.h
+++ b/arch/sparc/include/uapi/asm/mman.h
@@ -1,10 +1,16 @@
 #ifndef _UAPI__SPARC_MMAN_H__
 #define _UAPI__SPARC_MMAN_H__
 
-#include <asm-generic/mman-common.h>
+#include <asm-generic/mman.h>
 
-/* SunOS'ified... */
+/* The following constants don't match mman.h. */
+#undef MAP_NORESERVE
+#undef MAP_LOCKED
+#undef MAP_GROWSDOWN
+#undef MCL_CURRENT
+#undef MCL_FUTURE
 
+/* SunOS'ified... */
 #define MAP_RENAME      MAP_ANONYMOUS   /* In SunOS terminology */
 #define MAP_NORESERVE   0x40            /* don't reserve swap pages */
 #define MAP_INHERIT     0x80            /* SunOS doesn't do this, but... */
@@ -12,16 +18,8 @@
 #define _MAP_NEW        0x80000000      /* Binary compatibility is fun... */
 
 #define MAP_GROWSDOWN	0x0200		/* stack-like segment */
-#define MAP_DENYWRITE	0x0800		/* ETXTBSY */
-#define MAP_EXECUTABLE	0x1000		/* mark it as an executable */
 
 #define MCL_CURRENT     0x2000          /* lock all currently mapped pages */
 #define MCL_FUTURE      0x4000          /* lock all additions to address space */
 
-#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 */
-
-
 #endif /* _UAPI__SPARC_MMAN_H__ */
diff --git a/arch/tile/include/uapi/asm/mman.h b/arch/tile/include/uapi/asm/mman.h
index 81b8fc3..5d1fa24 100644
--- a/arch/tile/include/uapi/asm/mman.h
+++ b/arch/tile/include/uapi/asm/mman.h
@@ -15,27 +15,23 @@
 #ifndef _ASM_TILE_MMAN_H
 #define _ASM_TILE_MMAN_H
 
-#include <asm-generic/mman-common.h>
+#include <asm-generic/mman.h>
 #include <arch/chip.h>
 
-/* Standard Linux flags */
+/* The following constants don't match mman.h. */
+#undef MAP_POPULATE
+#undef MAP_NONBLOCK
+#undef MAP_STACK
+#undef MAP_LOCKED
+#undef MAP_NORESERVE
+#undef MAP_HUGETLB
 
+/* Standard Linux flags */
 #define MAP_POPULATE	0x0040		/* populate (prefault) pagetables */
 #define MAP_NONBLOCK	0x0080		/* do not block on IO */
-#define MAP_GROWSDOWN	0x0100		/* stack-like segment */
 #define MAP_STACK	MAP_GROWSDOWN	/* provide convenience alias */
 #define MAP_LOCKED	0x0200		/* pages are locked */
 #define MAP_NORESERVE	0x0400		/* don't check for reservations */
-#define MAP_DENYWRITE	0x0800		/* ETXTBSY */
-#define MAP_EXECUTABLE	0x1000		/* mark it as an executable */
 #define MAP_HUGETLB	0x4000		/* create a huge page mapping */
 
-
-/*
- * Flags for mlockall
- */
-#define MCL_CURRENT	1		/* lock all current mappings */
-#define MCL_FUTURE	2		/* lock all future mappings */
-
-
 #endif /* _ASM_TILE_MMAN_H */
diff --git a/include/uapi/asm-generic/mman-common.h b/include/uapi/asm-generic/mman-common.h
deleted file mode 100644
index 4164529..0000000
--- a/include/uapi/asm-generic/mman-common.h
+++ /dev/null
@@ -1,69 +0,0 @@
-#ifndef __ASM_GENERIC_MMAN_COMMON_H
-#define __ASM_GENERIC_MMAN_COMMON_H
-
-/*
- Author: Michael S. Tsirkin <mst@mellanox.co.il>, Mellanox Technologies Ltd.
- Based on: asm-xxx/mman.h
-*/
-
-#define PROT_READ	0x1		/* page can be read */
-#define PROT_WRITE	0x2		/* page can be written */
-#define PROT_EXEC	0x4		/* page can be executed */
-#define PROT_SEM	0x8		/* page may be used for atomic ops */
-#define PROT_NONE	0x0		/* page can not be accessed */
-#define PROT_GROWSDOWN	0x01000000	/* mprotect flag: extend change to start of growsdown vma */
-#define PROT_GROWSUP	0x02000000	/* mprotect flag: extend change to end of growsup vma */
-
-#define MAP_SHARED	0x01		/* Share changes */
-#define MAP_PRIVATE	0x02		/* Changes are private */
-#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 */
-#ifdef CONFIG_MMAP_ALLOW_UNINITIALIZED
-# define MAP_UNINITIALIZED 0x4000000	/* For anonymous mmap, memory could be uninitialized */
-#else
-# define MAP_UNINITIALIZED 0x0		/* Don't support this flag */
-#endif
-
-#define MS_ASYNC	1		/* sync memory asynchronously */
-#define MS_INVALIDATE	2		/* invalidate the caches */
-#define MS_SYNC		4		/* synchronous memory sync */
-
-#define MADV_NORMAL	0		/* no further special treatment */
-#define MADV_RANDOM	1		/* expect random page references */
-#define MADV_SEQUENTIAL	2		/* expect sequential page references */
-#define MADV_WILLNEED	3		/* will need these pages */
-#define MADV_DONTNEED	4		/* don't need these pages */
-
-/* common parameters: try to keep these consistent across architectures */
-#define MADV_REMOVE	9		/* remove these pages & resources */
-#define MADV_DONTFORK	10		/* don't inherit across fork */
-#define MADV_DOFORK	11		/* do inherit across fork */
-#define MADV_HWPOISON	100		/* poison a page for testing */
-#define MADV_SOFT_OFFLINE 101		/* soft offline page for testing */
-
-#define MADV_MERGEABLE   12		/* KSM may merge identical pages */
-#define MADV_UNMERGEABLE 13		/* KSM may not merge identical pages */
-
-#define MADV_HUGEPAGE	14		/* Worth backing with hugepages */
-#define MADV_NOHUGEPAGE	15		/* Not worth backing with hugepages */
-
-#define MADV_DONTDUMP   16		/* Explicity exclude from the core dump,
-					   overrides the coredump filter bits */
-#define MADV_DODUMP	17		/* Clear the MADV_NODUMP flag */
-
-/* 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 */
diff --git a/include/uapi/asm-generic/mman.h b/include/uapi/asm-generic/mman.h
index e9fe6fd..5a4b3ab 100644
--- a/include/uapi/asm-generic/mman.h
+++ b/include/uapi/asm-generic/mman.h
@@ -1,9 +1,31 @@
 #ifndef __ASM_GENERIC_MMAN_H
 #define __ASM_GENERIC_MMAN_H
 
-#include <asm-generic/mman-common.h>
+#define PROT_READ	0x1		/* page can be read */
+#define PROT_WRITE	0x2		/* page can be written */
+#define PROT_EXEC	0x4		/* page can be executed */
+#define PROT_SEM	0x8		/* page may be used for atomic ops */
+#define PROT_NONE	0x0		/* page can not be accessed */
+#define PROT_GROWSDOWN	0x01000000	/* mprotect flag: extend change to start of growsdown vma */
+#define PROT_GROWSUP	0x02000000	/* mprotect flag: extend change to end of growsup vma */
 
+#define MAP_SHARED	0x01		/* Share changes */
+#define MAP_PRIVATE	0x02		/* Changes are private */
+#define __MAP_PRIVATE1	0x03		/* Do not use. Private to parisc. */
+#define __MAP_PRIVATE2	0x04		/* Do not use. Private to parisc. */
+#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 */
+#ifdef CONFIG_MMAP_ALLOW_UNINITIALIZED
+# define MAP_UNINITIALIZED 0x4000000	/* For anonymous mmap, memory could be uninitialized */
+#else
+# define MAP_UNINITIALIZED 0x0		/* Don't support this flag */
+#endif
+#define __MAP_PRIVATE3	0x0040		/* Do not use. Private to sparc, powerpc and tile. */
+#define __MAP_PRIVATE4	0x0080		/* Do not use. Private to sparc, powerpc and tile. */
 #define MAP_GROWSDOWN	0x0100		/* stack-like segment */
+#define __MAP_PRIVATE5	0x0200		/* Do not use. Private to sparc and tile. */
+#define __MAP_PRIVATE6	0x0400		/* Do not use. Private to tile. */
 #define MAP_DENYWRITE	0x0800		/* ETXTBSY */
 #define MAP_EXECUTABLE	0x1000		/* mark it as an executable */
 #define MAP_LOCKED	0x2000		/* pages are locked */
@@ -12,10 +34,77 @@
 #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 */
-
-/* Bits [26:31] are reserved, see mman-common.h for MAP_HUGETLB usage */
+#define __MAP_PRIVATE7	0x80000		/* Do not use. Private to parisc. */
+/* Bits [26:31] are reserved for MAP_HUGETLB usage. */
+#define __MAP_HUGETLB1	0x4000000
+#define __MAP_HUGETLB2	0x8000000
+#define __MAP_HUGETLB3	0x10000000
+#define __MAP_HUGETLB4	0x20000000
+#define __MAP_HUGETLB5	0x40000000
+#define __MAP_HUGETLB6	0x80000000
+/*
+ * 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
 
 #define MCL_CURRENT	1		/* lock all current mappings */
 #define MCL_FUTURE	2		/* lock all future mappings */
+#define __MCL_PRIVATE1	0x2000		/* Do not use. Private to powerpc and sparc. */
+#define __MCL_PRIVATE2	0x4000		/* Do not use. Private to powerpc and sparc. */
+
+#define MS_ASYNC	1		/* sync memory asynchronously */
+#define MS_INVALIDATE	2		/* invalidate the caches */
+#define MS_SYNC		4		/* synchronous memory sync */
+
+#define MADV_NORMAL	0		/* no further special treatment */
+#define MADV_RANDOM	1		/* expect random page references */
+#define MADV_SEQUENTIAL	2		/* expect sequential page references */
+#define MADV_WILLNEED	3		/* will need these pages */
+#define MADV_DONTNEED	4		/* don't need these pages */
+#define __MADV_PRIVATE1 5		/* Do not use. Private to parisc. */
+#define __MADV_PRIVATE2 6		/* Do not use. Private to parisc. */
+#define __MADV_PRIVATE3 7		/* Do not use. Private to parisc. */
+#define __MADV_UNUSED1  8		/* Unused on all arches. Free for use. */
+/* common parameters: try to keep these consistent across architectures */
+#define MADV_REMOVE	9		/* remove these pages & resources */
+#define MADV_DONTFORK	10		/* don't inherit across fork */
+#define MADV_DOFORK	11		/* do inherit across fork */
+#define MADV_MERGEABLE   12		/* KSM may merge identical pages */
+#define MADV_UNMERGEABLE 13		/* KSM may not merge identical pages */
+
+#define MADV_HUGEPAGE	14		/* Worth backing with hugepages */
+#define MADV_NOHUGEPAGE	15		/* Not worth backing with hugepages */
+
+#define MADV_DONTDUMP   16		/* Explicity exclude from the core dump,
+					   overrides the coredump filter bits */
+#define MADV_DODUMP	17		/* Clear the MADV_NODUMP flag */
+#define __MADV_PRIVATE4	18		/* Do not use. Private to parisc. */
+#define __MADV_PRIVATE5	20		/* Do not use. Private to parisc. */
+#define __MADV_UNUSED2  21		/* Unused on all arches. Free for use. */
+#define __MADV_PRIVATE6	22		/* Do not use. Private to parisc. */
+#define __MADV_UNUSED3  23		/* Unused on all arches. Free for use. */
+#define __MADV_PRIVATE7	24		/* Do not use. Private to parisc. */
+#define __MADV_UNUSED4  25		/* Unused on all arches. Free for use. */
+#define __MADV_PRIVATE8	26		/* Do not use. Private to parisc. */
+/* Values from 27-64 are unused by all arches. */
+#define __MADV_PRIVATE9	65		/* Do not use. Private to parisc. */
+#define __MADV_PRIVATE10 66		/* Do not use. Private to parisc. */
+#define __MADV_PRIVATE11 67		/* Do not use. Private to parisc. */
+#define __MADV_PRIVATE12 68		/* Do not use. Private to parisc. */
+#define __MADV_PRIVATE13 69		/* Do not use. Private to parisc. */
+#define __MADV_PRIVATE14 70		/* Do not use. Private to parisc. */
+/* Values from 71-99 are unused by all arches. */
+#define MADV_HWPOISON	100		/* poison a page for testing */
+#define MADV_SOFT_OFFLINE 101		/* soft offline page for testing */
+
+/* compatibility flags */
+#define MAP_FILE	0
+#define __MAP_PRIVATE8	1		/* Do not use. Private to parisc. */
 
 #endif /* __ASM_GENERIC_MMAN_H */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]