[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 17/37] tests/tcg/linux-test: Add linux-madvise test
From: |
Laurent Vivier |
Subject: |
[PULL 17/37] tests/tcg/linux-test: Add linux-madvise test |
Date: |
Wed, 28 Sep 2022 22:27:17 +0200 |
From: Ilya Leoshkevich <iii@linux.ibm.com>
Add a test that checks madvise(MADV_DONTNEED) behavior with anonymous
and file mappings in order to prevent regressions.
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220906000839.1672934-6-iii@linux.ibm.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
tests/tcg/multiarch/linux/linux-madvise.c | 70 +++++++++++++++++++++++
1 file changed, 70 insertions(+)
create mode 100644 tests/tcg/multiarch/linux/linux-madvise.c
diff --git a/tests/tcg/multiarch/linux/linux-madvise.c
b/tests/tcg/multiarch/linux/linux-madvise.c
new file mode 100644
index 000000000000..29d0997e687c
--- /dev/null
+++ b/tests/tcg/multiarch/linux/linux-madvise.c
@@ -0,0 +1,70 @@
+#include <assert.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+static void test_anonymous(void)
+{
+ int pagesize = getpagesize();
+ char *page;
+ int ret;
+
+ page = mmap(NULL, pagesize, PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+ assert(page != MAP_FAILED);
+
+ /* Check that mprotect() does not interfere with MADV_DONTNEED. */
+ ret = mprotect(page, pagesize, PROT_READ | PROT_WRITE);
+ assert(ret == 0);
+
+ /* Check that MADV_DONTNEED clears the page. */
+ *page = 42;
+ ret = madvise(page, pagesize, MADV_DONTNEED);
+ assert(ret == 0);
+ assert(*page == 0);
+
+ ret = munmap(page, pagesize);
+ assert(ret == 0);
+}
+
+static void test_file(void)
+{
+ char tempname[] = "/tmp/.cmadviseXXXXXX";
+ int pagesize = getpagesize();
+ ssize_t written;
+ char c = 42;
+ char *page;
+ int ret;
+ int fd;
+
+ fd = mkstemp(tempname);
+ assert(fd != -1);
+ ret = unlink(tempname);
+ assert(ret == 0);
+ written = write(fd, &c, sizeof(c));
+ assert(written == sizeof(c));
+ page = mmap(NULL, pagesize, PROT_READ, MAP_PRIVATE, fd, 0);
+ assert(page != MAP_FAILED);
+
+ /* Check that mprotect() does not interfere with MADV_DONTNEED. */
+ ret = mprotect(page, pagesize, PROT_READ | PROT_WRITE);
+ assert(ret == 0);
+
+ /* Check that MADV_DONTNEED resets the page. */
+ *page = 0;
+ ret = madvise(page, pagesize, MADV_DONTNEED);
+ assert(ret == 0);
+ assert(*page == c);
+
+ ret = munmap(page, pagesize);
+ assert(ret == 0);
+ ret = close(fd);
+ assert(ret == 0);
+}
+
+int main(void)
+{
+ test_anonymous();
+ test_file();
+
+ return EXIT_SUCCESS;
+}
--
2.37.3
- [PULL 10/37] linux-user/hppa: Set TASK_UNMAPPED_BASE to 0xfa000000 for hppa arch, (continued)
- [PULL 10/37] linux-user/hppa: Set TASK_UNMAPPED_BASE to 0xfa000000 for hppa arch, Laurent Vivier, 2022/09/28
- [PULL 12/37] linux-user: Show timespec on strace for futex(), Laurent Vivier, 2022/09/28
- [PULL 08/37] linux-user/hppa: Dump IIR on register dump, Laurent Vivier, 2022/09/28
- [PULL 14/37] linux-user: Fix madvise(MADV_DONTNEED) on alpha, Laurent Vivier, 2022/09/28
- [PULL 18/37] linux-user: Fix TARGET_PROT_SEM for XTENSA, Laurent Vivier, 2022/09/28
- [PULL 13/37] linux-user: Provide MADV_* definitions, Laurent Vivier, 2022/09/28
- [PULL 15/37] linux-user: Implement stracing madvise(), Laurent Vivier, 2022/09/28
- [PULL 21/37] linux-user/hppa: Drop stack guard page on hppa target, Laurent Vivier, 2022/09/28
- [PULL 20/37] linux-user/hppa: Add signal trampoline for hppa target, Laurent Vivier, 2022/09/28
- [PULL 16/37] linux-user: Passthrough MADV_DONTNEED for certain file mappings, Laurent Vivier, 2022/09/28
- [PULL 17/37] tests/tcg/linux-test: Add linux-madvise test,
Laurent Vivier <=
- [PULL 23/37] linux-user/hppa: Allow PROT_GROWSUP and PROT_GROWSDOWN in mprotect(), Laurent Vivier, 2022/09/28
- [PULL 22/37] linux-user/hppa: Increase guest stack size to 80MB for hppa target, Laurent Vivier, 2022/09/28
- [PULL 24/37] linux-user/hppa: Fix setup_sigcontext(), Laurent Vivier, 2022/09/28
- [PULL 26/37] linux-user: Don't assume 0 is not a valid host timer_t value, Laurent Vivier, 2022/09/28
- [PULL 30/37] linux-user: Combine do_futex and do_futex_time64, Laurent Vivier, 2022/09/28
- [PULL 27/37] linux-user/s390x: Save/restore fpc when handling a signal, Laurent Vivier, 2022/09/28
- [PULL 32/37] linux-user: Implement FUTEX_WAKE_BITSET, Laurent Vivier, 2022/09/28
- [PULL 33/37] linux-user: Convert signal number for FUTEX_FD, Laurent Vivier, 2022/09/28
- [PULL 29/37] linux-user: Set ELF_BASE_PLATFORM for MIPS, Laurent Vivier, 2022/09/28
- [PULL 19/37] linux-user: Add proper strace format strings for getdents()/getdents64(), Laurent Vivier, 2022/09/28