[PATCH v2 4/8] linux: Add MAP_DROPPABLE from Linux 6.11

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Wed Oct 9 11:45:10 GMT 2024



On 08/10/24 17:28, H.J. Lu wrote:
> On Wed, Oct 9, 2024 at 2:47 AM Adhemerval Zanella
> <adhemerval.zanella@linaro.org> wrote:
>>
>> 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.
>> ---
>>  manual/llio.texi                           | 9 +++++++++
>>  sysdeps/unix/sysv/linux/bits/mman-linux.h  | 1 +
>>  sysdeps/unix/sysv/linux/tst-mman-consts.py | 2 +-
>>  3 files changed, 11 insertions(+), 1 deletion(-)
>>
>> diff --git a/manual/llio.texi b/manual/llio.texi
>> index a035c3e20f..05ab44c6e7 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 522333c50a..161a885096 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 a1137eb1d5..2191bea36f 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',
>> --
>> 2.43.0
>>
> 
> We should add a test for it.
> 

I think it would make sense when glibc itself would use this new flag, this patch
is just the usual sync one that just update glibc when a kernel release. 

In any case, we do have a test for [1] where vgetrandom uses it implicitly. 

[1] https://patchwork.sourceware.org/project/glibc/patch/20240927192310.2504686-1-adhemerval.zanella@linaro.org/



More information about the Libc-alpha mailing list