Created
October 3, 2020 22:22
-
-
Save azat/12ba2c825b710653ece34dba7f926ece to your computer and use it in GitHub Desktop.
test-MADV_DONTNEED.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Gist to check possible issues with MADV_DONTNEED | |
// For example it does not supported by qemu user | |
// There is a patch for this [1], but it hasn't been applied. | |
// [1]: https://lists.gnu.org/archive/html/qemu-devel/2018-08/msg05422.html | |
#include <sys/mman.h> | |
#include <stdio.h> | |
#include <stddef.h> | |
#include <assert.h> | |
#include <string.h> | |
int main(int argc, char **argv) | |
{ | |
void *addr = mmap(NULL, 1<<16, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); | |
if (addr == MAP_FAILED) { | |
perror("mmap"); | |
return 1; | |
} | |
memset(addr, 'A', 1<<16); | |
if (!madvise(addr, 1<<16, MADV_DONTNEED)) { | |
puts("MADV_DONTNEED does not return error. Check memory."); | |
for (int i = 0; i < 1<<16; ++i) { | |
assert(((unsigned char *)addr)[i] == 0); | |
} | |
} else { | |
perror("madvise"); | |
} | |
if (munmap(addr, 1<<16)) { | |
perror("munmap"); | |
return 1; | |
} | |
return 0; | |
} |
patched qemu (by returning ENOSYS error)
qemu-x86_64 /tmp/test-MADV_DONTNEED
madvise: Success
patch for qemu to return ENOSYS
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 897d20c076..5540792e0e 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -11775,7 +11775,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
turns private file-backed mappings into anonymous mappings.
This will break MADV_DONTNEED.
This is a hint, so ignoring and returning success is ok. */
- return 0;
+ return ENOSYS;
#endif
#ifdef TARGET_NR_fcntl64
case TARGET_NR_fcntl64:
There is also https://patchwork.kernel.org/patch/10576637/ but it hasn't been applied
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
unpatched qemu