aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2024-10-08 15:45:26 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2024-10-10 10:27:53 -0300
commitf6e849fd7ce2a8954022bd23b94703975b3db0d1 (patch)
treee1661f1fbbe81a2e00a6073c3c011bb21a6e9985
parent86f06282ccb1b11de7a07fc10f7b77991b7d121a (diff)
downloadglibc-f6e849fd7ce2a8954022bd23b94703975b3db0d1.zip
glibc-f6e849fd7ce2a8954022bd23b94703975b3db0d1.tar.gz
glibc-f6e849fd7ce2a8954022bd23b94703975b3db0d1.tar.bz2
linux: Add MAP_DROPPABLE from Linux 6.11
This request the page to be never written out to swap, it will be zeroed under memory pressure (so kernel can just drop the page), it is inherited by fork, it is not counted against @code{mlock} budget, and if there is no enough memory to service a page faults there is no fatal error (so not signal is sent). Tested with build-many-glibcs.py. Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
-rw-r--r--manual/llio.texi9
-rw-r--r--sysdeps/unix/sysv/linux/bits/mman-linux.h1
-rw-r--r--sysdeps/unix/sysv/linux/tst-mman-consts.py2
3 files changed, 11 insertions, 1 deletions
diff --git a/manual/llio.texi b/manual/llio.texi
index a035c3e..05ab44c 100644
--- a/manual/llio.texi
+++ b/manual/llio.texi
@@ -1762,6 +1762,15 @@ write dirty metadata out whenever dirty data is written out. Unlike
most other flags, this one will fail unless @code{MAP_SHARED_VALIDATE}
is also given.
+@item MAP_DROPPABLE
+Request the page to be never written out to swap, it will be zeroed
+under memory pressure (so kernel can just drop the page), it is inherited
+by fork, it is not counted against @code{mlock} budget, and if there is
+not enough memory to service a page fault there is no fatal error (so no
+signal is sent).
+
+The @code{MAP_DROPPABLE} flag is specific to Linux.
+
@end vtable
@code{mmap} returns the address of the new mapping, or
diff --git a/sysdeps/unix/sysv/linux/bits/mman-linux.h b/sysdeps/unix/sysv/linux/bits/mman-linux.h
index 522333c..161a885 100644
--- a/sysdeps/unix/sysv/linux/bits/mman-linux.h
+++ b/sysdeps/unix/sysv/linux/bits/mman-linux.h
@@ -43,6 +43,7 @@
#define MAP_PRIVATE 0x02 /* Changes are private. */
#define MAP_SHARED_VALIDATE 0x03 /* Share changes and validate
extension flags. */
+#define MAP_DROPPABLE 0x08 /* Zero memory under memory pressure. */
#define MAP_TYPE 0x0f /* Mask for type of mapping. */
/* Other flags. */
diff --git a/sysdeps/unix/sysv/linux/tst-mman-consts.py b/sysdeps/unix/sysv/linux/tst-mman-consts.py
index a1137eb..2191bea 100644
--- a/sysdeps/unix/sysv/linux/tst-mman-consts.py
+++ b/sysdeps/unix/sysv/linux/tst-mman-consts.py
@@ -33,7 +33,7 @@ def main():
help='C compiler (including options) to use')
args = parser.parse_args()
linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc)
- linux_version_glibc = (6, 10)
+ linux_version_glibc = (6, 11)
sys.exit(glibcextract.compare_macro_consts(
'#define _GNU_SOURCE 1\n'
'#include <sys/mman.h>\n',