linux-user: Add partial support for MADV_DONTNEED
commit892a4f6a750abceeda4c1ee8324f58f82fd6bd89
authorIlya Leoshkevich <iii@linux.ibm.com>
Tue, 21 Jun 2022 14:42:05 +0000 (21 16:42 +0200)
committerLaurent Vivier <laurent@vivier.eu>
Fri, 24 Jun 2022 08:00:00 +0000 (24 10:00 +0200)
treee0653c18cff17f077638a38762d310072d649c7e
parent9263ba847352c2ec2fc37ad7f7d0558332bd077f
linux-user: Add partial support for MADV_DONTNEED

Currently QEMU ignores madvise(MADV_DONTNEED), which break apps that
rely on this for zeroing out memory [1]. Improve the situation by doing
a passthrough when the range in question is a host-page-aligned
anonymous mapping.

This is based on the patches from Simon Hausmann [2] and Chris Fallin
[3]. The structure is taken from Simon's patch. The PAGE_MAP_ANONYMOUS
bits are superseded by commit 26bab757d41b ("linux-user: Introduce
PAGE_ANON"). In the end the patch acts like the one from Chris: we
either pass-through the entire syscall, or do nothing, since doing this
only partially would not help the affected applications much. Finally,
add some extra checks to match the behavior of the Linux kernel [4].

[1] https://gitlab.com/qemu-project/qemu/-/issues/326
[2] https://patchew.org/QEMU/20180827084037.25316-1-simon.hausmann@qt.io/
[3] https://github.com/bytecodealliance/wasmtime/blob/v0.37.0/ci/qemu-madvise.patch
[4] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/mm/madvise.c?h=v5.19-rc3#n1368

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20220621144205.158452-1-iii@linux.ibm.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
linux-user/mmap.c
linux-user/syscall.c
linux-user/user-internals.h
linux-user/user-mmap.h