Patchwork Use bits/mman-linux.h for hppa

login
register
mail settings
Submitter Joseph Myers
Date Oct. 4, 2018, 4:53 p.m.
Message ID <alpine.DEB.2.21.1810041653040.27752@digraph.polyomino.org.uk>
Download mbox | patch
Permalink /patch/29647/
State New
Headers show

Comments

Joseph Myers - Oct. 4, 2018, 4:53 p.m.
hppa currently has a bits/mman.h that does not include
bits/mman-linux.h, unlike all other architectures using the Linux
kernel.  This sort of variation between architectures is generally
unhelpful when making global changes for new constants added to new
Linux kernel releases.

This patch changes hppa to use bits/mman-linux.h, overriding constants
with different values as necessary (including with #undef after
bits/mman.h inclusion when needed, as already done for alpha).  While
there could possibly be further improvements through e.g. splitting
more sets of definitions into separate bits/ headers, I think this is
still an improvement on the current state.  diffstat shows 27 lines
added, 51 deleted (and some of that is actually existing lines moving
to a different place in the file).

Tested with build-many-glibcs.py for hppa-linux-gnu.

2018-10-04  Joseph Myers  <joseph@codesourcery.com>

	* sysdeps/unix/sysv/linux/hppa/bits/mman.h: Include
	<bits/mman-linux.h>.
	(PROT_READ): Don't define here.
	(PROT_WRITE): Likewise.
	(PROT_EXEC): Likewise.
	(PROT_NONE): Likewise.
	(PROT_GROWSDOWN): Likewise.
	(PROT_GROWSUP): Likewise.
	(MAP_SHARED): Likewise.
	(MAP_PRIVATE): Likewise.
	[__USE_MISC] (MAP_SHARED_VALIDATE): Likewise.
	[__USE_MISC] (MAP_FILE): Likewise.
	[__USE_MISC] (MAP_ANONYMOUS): Likewise.
	[__USE_MISC] (MAP_ANON): Likewise.
	[__USE_MISC] (MAP_HUGE_SHIFT): Likewise.
	[__USE_MISC] (MAP_HUGE_MASK): Likewise.
	(MCL_CURRENT): Likewise.
	(MCL_FUTURE): Likewise.
	(MCL_ONFAULT): Likewise.
	[__USE_MISC] (MADV_NORMAL): Likewise.
	[__USE_MISC] (MADV_RANDOM): Likewise.
	[__USE_MISC] (MADV_SEQUENTIAL): Likewise.
	[__USE_MISC] (MADV_WILLNEED): Likewise.
	[__USE_MISC] (MADV_DONTNEED): Likewise.
	[__USE_MISC] (MADV_FREE): Likewise.
	[__USE_MISC] (MADV_REMOVE): Likewise.
	[__USE_MISC] (MADV_DONTFORK): Likewise.
	[__USE_MISC] (MADV_DOFORK): Likewise.
	[__USE_MISC] (MADV_HWPOISON): Likewise.
	[__USE_XOPEN2K] (POSIX_MADV_NORMAL): Likewise.
	[__USE_XOPEN2K] (POSIX_MADV_RANDOM): Likewise.
	[__USE_XOPEN2K] (POSIX_MADV_SEQUENTIAL): Likewise.
	[__USE_XOPEN2K] (POSIX_MADV_WILLNEED): Likewise.
	[__USE_XOPEN2K] (POSIX_MADV_DONTNEED): Likewise.
	(__MAP_ANONYMOUS): New macro.
	[__USE_MISC] (MAP_TYPE): Undefine and redefine after
	<bits/mman-linux.h> inclusion.
	(MAP_FIXED): Likewise.
	(MS_SYNC): Likewise.
	(MS_ASYNC): Likewise.
	(MS_INVALIDATE): Likewise.
	[__USE_MISC] (MADV_MERGEABLE): Likewise.
	[__USE_MISC] (MADV_UNMERGEABLE): Likewise.
	[__USE_MISC] (MADV_HUGEPAGE): Likewise.
	[__USE_MISC] (MADV_NOHUGEPAGE): Likewise.
	[__USE_MISC] (MADV_DONTDUMP): Likewise.
	[__USE_MISC] (MADV_DODUMP): Likewise.
	[__USE_MISC] (MADV_WIPEONFORK): Likewise.
	[__USE_MISC] (MADV_KEEPONFORK): Likewise.
Adhemerval Zanella Netto - Oct. 4, 2018, 7:32 p.m.
On 04/10/2018 13:53, Joseph Myers wrote:
> hppa currently has a bits/mman.h that does not include
> bits/mman-linux.h, unlike all other architectures using the Linux
> kernel.  This sort of variation between architectures is generally
> unhelpful when making global changes for new constants added to new
> Linux kernel releases.
> 
> This patch changes hppa to use bits/mman-linux.h, overriding constants
> with different values as necessary (including with #undef after
> bits/mman.h inclusion when needed, as already done for alpha).  While
> there could possibly be further improvements through e.g. splitting
> more sets of definitions into separate bits/ headers, I think this is
> still an improvement on the current state.  diffstat shows 27 lines
> added, 51 deleted (and some of that is actually existing lines moving
> to a different place in the file).
> 
> Tested with build-many-glibcs.py for hppa-linux-gnu.
> 
> 2018-10-04  Joseph Myers  <joseph@codesourcery.com>
> 
> 	* sysdeps/unix/sysv/linux/hppa/bits/mman.h: Include
> 	<bits/mman-linux.h>.
> 	(PROT_READ): Don't define here.
> 	(PROT_WRITE): Likewise.
> 	(PROT_EXEC): Likewise.
> 	(PROT_NONE): Likewise.
> 	(PROT_GROWSDOWN): Likewise.
> 	(PROT_GROWSUP): Likewise.
> 	(MAP_SHARED): Likewise.
> 	(MAP_PRIVATE): Likewise.
> 	[__USE_MISC] (MAP_SHARED_VALIDATE): Likewise.
> 	[__USE_MISC] (MAP_FILE): Likewise.
> 	[__USE_MISC] (MAP_ANONYMOUS): Likewise.
> 	[__USE_MISC] (MAP_ANON): Likewise.
> 	[__USE_MISC] (MAP_HUGE_SHIFT): Likewise.
> 	[__USE_MISC] (MAP_HUGE_MASK): Likewise.
> 	(MCL_CURRENT): Likewise.
> 	(MCL_FUTURE): Likewise.
> 	(MCL_ONFAULT): Likewise.
> 	[__USE_MISC] (MADV_NORMAL): Likewise.
> 	[__USE_MISC] (MADV_RANDOM): Likewise.
> 	[__USE_MISC] (MADV_SEQUENTIAL): Likewise.
> 	[__USE_MISC] (MADV_WILLNEED): Likewise.
> 	[__USE_MISC] (MADV_DONTNEED): Likewise.
> 	[__USE_MISC] (MADV_FREE): Likewise.
> 	[__USE_MISC] (MADV_REMOVE): Likewise.
> 	[__USE_MISC] (MADV_DONTFORK): Likewise.
> 	[__USE_MISC] (MADV_DOFORK): Likewise.
> 	[__USE_MISC] (MADV_HWPOISON): Likewise.
> 	[__USE_XOPEN2K] (POSIX_MADV_NORMAL): Likewise.
> 	[__USE_XOPEN2K] (POSIX_MADV_RANDOM): Likewise.
> 	[__USE_XOPEN2K] (POSIX_MADV_SEQUENTIAL): Likewise.
> 	[__USE_XOPEN2K] (POSIX_MADV_WILLNEED): Likewise.
> 	[__USE_XOPEN2K] (POSIX_MADV_DONTNEED): Likewise.
> 	(__MAP_ANONYMOUS): New macro.
> 	[__USE_MISC] (MAP_TYPE): Undefine and redefine after
> 	<bits/mman-linux.h> inclusion.
> 	(MAP_FIXED): Likewise.
> 	(MS_SYNC): Likewise.
> 	(MS_ASYNC): Likewise.
> 	(MS_INVALIDATE): Likewise.
> 	[__USE_MISC] (MADV_MERGEABLE): Likewise.
> 	[__USE_MISC] (MADV_UNMERGEABLE): Likewise.
> 	[__USE_MISC] (MADV_HUGEPAGE): Likewise.
> 	[__USE_MISC] (MADV_NOHUGEPAGE): Likewise.
> 	[__USE_MISC] (MADV_DONTDUMP): Likewise.
> 	[__USE_MISC] (MADV_DODUMP): Likewise.
> 	[__USE_MISC] (MADV_WIPEONFORK): Likewise.
> 	[__USE_MISC] (MADV_KEEPONFORK): Likewise.

LGTM, thanks.

> 
> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/mman.h b/sysdeps/unix/sysv/linux/hppa/bits/mman.h
> index fd07a65868..deecac0504 100644
> --- a/sysdeps/unix/sysv/linux/hppa/bits/mman.h
> +++ b/sysdeps/unix/sysv/linux/hppa/bits/mman.h
> @@ -22,33 +22,10 @@
>  
>  /* These are taken from the kernel definitions.  */
>  
> -#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).  */
> -
> -#define MAP_SHARED	0x01		/* Share changes */
> -#define MAP_PRIVATE	0x02		/* Changes are private */
> -#ifdef __USE_MISC
> -# define MAP_SHARED_VALIDATE	0x03	/* Share changes and validate
> -					   extension flags.  */
> -# define MAP_TYPE	0x2b		/* Mask for type of mapping */
> -#endif
> -
>  /* Other flags.  */
> -#define MAP_FIXED	0x04		/* Interpret addr exactly */
> +#define __MAP_ANONYMOUS	0x10		/* Don't use a file */
>  #ifdef __USE_MISC
> -# define MAP_FILE	0x0
> -# define MAP_ANONYMOUS	0x10		/* Don't use a file */
> -# define MAP_ANON	MAP_ANONYMOUS
>  # define MAP_VARIABLE	0
> -/* When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.  */
> -# define MAP_HUGE_SHIFT	26
> -# define MAP_HUGE_MASK	0x3f
>  #endif
>  
>  /* These are Linux-specific.  */
> @@ -66,47 +43,46 @@
>  					   underlying mapping.  */
>  #endif
>  
> +/* Advice to "madvise"  */
> +#ifdef __USE_MISC
> +# define MADV_SOFT_OFFLINE 101	/* Soft offline page for testing.  */
> +#endif
> +
> +#include <bits/mman-linux.h>
> +
> +#ifdef __USE_MISC
> +# undef MAP_TYPE
> +# define MAP_TYPE	0x2b		/* Mask for type of mapping */
> +#endif
> +
> +#undef MAP_FIXED
> +#define MAP_FIXED	0x04		/* Interpret addr exactly */
> +
>  /* Flags to "msync"  */
> +#undef MS_SYNC
>  #define MS_SYNC		1		/* Synchronous memory sync */
> +#undef MS_ASYNC
>  #define MS_ASYNC	2		/* Sync memory asynchronously */
> +#undef MS_INVALIDATE
>  #define MS_INVALIDATE	4		/* Invalidate the caches */
>  
> -/* Flags to "mlockall"  */
> -#define MCL_CURRENT	1		/* Lock all current mappings */
> -#define MCL_FUTURE	2		/* Lock all future mappings */
> -#define MCL_ONFAULT	4		/* Lock all pages that are faulted in */
> -
>  /* Advice to "madvise"  */
>  #ifdef __USE_MISC
> -# 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	/* Dont need these pages */
> -# define MADV_FREE	  8	/* Free pages only if memory pressure.  */
> -# 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.  */
> +# undef MADV_MERGEABLE
>  # define MADV_MERGEABLE   65	/* KSM may merge identical pages */
> +# undef MADV_UNMERGEABLE
>  # define MADV_UNMERGEABLE 66	/* KSM may not merge identical pages */
> +# undef MADV_HUGEPAGE
>  # define MADV_HUGEPAGE	 67	/* Worth backing with hugepages */
> +# undef MADV_NOHUGEPAGE
>  # define MADV_NOHUGEPAGE 68	/* Not worth backing with hugepages */
> +# undef MADV_DONTDUMP
>  # define MADV_DONTDUMP	 69	/* Explicity exclude from the core dump,
>  				   overrides the coredump filter bits */
> +# undef MADV_DODUMP
>  # define MADV_DODUMP	 70	/* Clear the MADV_NODUMP flag */
> +# undef MADV_WIPEONFORK
>  # define MADV_WIPEONFORK 71	/* Zero memory on fork, child only.  */
> +# undef MADV_KEEPONFORK
>  # define MADV_KEEPONFORK 72	/* Undo MADV_WIPEONFORK.  */
> -# define MADV_HWPOISON	 100	/* Poison a page for testing.  */
> -# define MADV_SOFT_OFFLINE 101	/* Soft offline 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
> -
> -#include <bits/mman-shared.h>
>

Patch

diff --git a/sysdeps/unix/sysv/linux/hppa/bits/mman.h b/sysdeps/unix/sysv/linux/hppa/bits/mman.h
index fd07a65868..deecac0504 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/mman.h
@@ -22,33 +22,10 @@ 
 
 /* These are taken from the kernel definitions.  */
 
-#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).  */
-
-#define MAP_SHARED	0x01		/* Share changes */
-#define MAP_PRIVATE	0x02		/* Changes are private */
-#ifdef __USE_MISC
-# define MAP_SHARED_VALIDATE	0x03	/* Share changes and validate
-					   extension flags.  */
-# define MAP_TYPE	0x2b		/* Mask for type of mapping */
-#endif
-
 /* Other flags.  */
-#define MAP_FIXED	0x04		/* Interpret addr exactly */
+#define __MAP_ANONYMOUS	0x10		/* Don't use a file */
 #ifdef __USE_MISC
-# define MAP_FILE	0x0
-# define MAP_ANONYMOUS	0x10		/* Don't use a file */
-# define MAP_ANON	MAP_ANONYMOUS
 # define MAP_VARIABLE	0
-/* When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.  */
-# define MAP_HUGE_SHIFT	26
-# define MAP_HUGE_MASK	0x3f
 #endif
 
 /* These are Linux-specific.  */
@@ -66,47 +43,46 @@ 
 					   underlying mapping.  */
 #endif
 
+/* Advice to "madvise"  */
+#ifdef __USE_MISC
+# define MADV_SOFT_OFFLINE 101	/* Soft offline page for testing.  */
+#endif
+
+#include <bits/mman-linux.h>
+
+#ifdef __USE_MISC
+# undef MAP_TYPE
+# define MAP_TYPE	0x2b		/* Mask for type of mapping */
+#endif
+
+#undef MAP_FIXED
+#define MAP_FIXED	0x04		/* Interpret addr exactly */
+
 /* Flags to "msync"  */
+#undef MS_SYNC
 #define MS_SYNC		1		/* Synchronous memory sync */
+#undef MS_ASYNC
 #define MS_ASYNC	2		/* Sync memory asynchronously */
+#undef MS_INVALIDATE
 #define MS_INVALIDATE	4		/* Invalidate the caches */
 
-/* Flags to "mlockall"  */
-#define MCL_CURRENT	1		/* Lock all current mappings */
-#define MCL_FUTURE	2		/* Lock all future mappings */
-#define MCL_ONFAULT	4		/* Lock all pages that are faulted in */
-
 /* Advice to "madvise"  */
 #ifdef __USE_MISC
-# 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	/* Dont need these pages */
-# define MADV_FREE	  8	/* Free pages only if memory pressure.  */
-# 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.  */
+# undef MADV_MERGEABLE
 # define MADV_MERGEABLE   65	/* KSM may merge identical pages */
+# undef MADV_UNMERGEABLE
 # define MADV_UNMERGEABLE 66	/* KSM may not merge identical pages */
+# undef MADV_HUGEPAGE
 # define MADV_HUGEPAGE	 67	/* Worth backing with hugepages */
+# undef MADV_NOHUGEPAGE
 # define MADV_NOHUGEPAGE 68	/* Not worth backing with hugepages */
+# undef MADV_DONTDUMP
 # define MADV_DONTDUMP	 69	/* Explicity exclude from the core dump,
 				   overrides the coredump filter bits */
+# undef MADV_DODUMP
 # define MADV_DODUMP	 70	/* Clear the MADV_NODUMP flag */
+# undef MADV_WIPEONFORK
 # define MADV_WIPEONFORK 71	/* Zero memory on fork, child only.  */
+# undef MADV_KEEPONFORK
 # define MADV_KEEPONFORK 72	/* Undo MADV_WIPEONFORK.  */
-# define MADV_HWPOISON	 100	/* Poison a page for testing.  */
-# define MADV_SOFT_OFFLINE 101	/* Soft offline 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
-
-#include <bits/mman-shared.h>