[PATCH RFC 3/5] mm: selftests: Refactor hugepage-mmap to use kselftest harness
From: Ackerley Tng via B4 Relay
Date: Mon May 18 2026 - 14:23:23 EST
From: Ackerley Tng <ackerleytng@xxxxxxxxxx>
Refactor hugepage-mmap.c to use the kselftest harness so that a later patch
can add a different setup flow.
Use a fixture for managing the hugetlbfs-backed memfd lifecycle (setup and
teardown).
Signed-off-by: Ackerley Tng <ackerleytng@xxxxxxxxxx>
---
tools/testing/selftests/mm/hugepage-mmap.c | 67 ++++++++++++++++--------------
1 file changed, 36 insertions(+), 31 deletions(-)
diff --git a/tools/testing/selftests/mm/hugepage-mmap.c b/tools/testing/selftests/mm/hugepage-mmap.c
index 64f7d28a97fdf..9c8a0638d04b8 100644
--- a/tools/testing/selftests/mm/hugepage-mmap.c
+++ b/tools/testing/selftests/mm/hugepage-mmap.c
@@ -15,49 +15,54 @@
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
-#include "kselftest.h"
+#include "kselftest_harness.h"
#define LENGTH (256UL*1024*1024)
#define PROTECTION (PROT_READ | PROT_WRITE)
-int main(void)
+FIXTURE(hugepage_mmap)
{
- void *addr;
- int fd, ret = 0;
- unsigned long i;
-
- ksft_print_header();
- ksft_set_plan(1);
+ int fd;
+ char *addr;
+};
- fd = memfd_create("hugepage-mmap", MFD_HUGETLB);
- if (fd < 0)
- ksft_exit_fail_msg("memfd_create() failed: %s\n", strerror(errno));
+FIXTURE_SETUP(hugepage_mmap)
+{
+ self->fd = memfd_create("hugepage-mmap", MFD_HUGETLB);
+ ASSERT_GE(self->fd, 0) {
+ TH_LOG("memfd_create() failed: %s", strerror(errno));
+ }
- addr = mmap(NULL, LENGTH, PROTECTION, MAP_SHARED, fd, 0);
- if (addr == MAP_FAILED) {
- close(fd);
- ksft_exit_fail_msg("mmap(): %s\n", strerror(errno));
+ self->addr = mmap(NULL, LENGTH, PROTECTION, MAP_SHARED, self->fd, 0);
+ ASSERT_NE(MAP_FAILED, self->addr) {
+ TH_LOG("mmap(): %s", strerror(errno));
+ close(self->fd);
}
+ TH_LOG("Returned address is %p", self->addr);
+}
- ksft_print_msg("Returned address is %p\n", addr);
- ksft_print_msg("First hex is %x\n", *((unsigned int *)addr));
+FIXTURE_TEARDOWN(hugepage_mmap)
+{
+ munmap(self->addr, LENGTH);
+ close(self->fd);
+}
- for (i = 0; i < LENGTH; i++)
- *(char *)(addr + i) = (char)i;
+TEST_F(hugepage_mmap, read_write)
+{
+ unsigned long i;
- ksft_print_msg("First hex is %x\n", *((unsigned int *)addr));
- for (i = 0; i < LENGTH; i++) {
- if (*(char *)(addr + i) != (char)i) {
- ksft_print_msg("Error: Mismatch at %lu\n", i);
- ret = 1;
- break;
- }
- }
+ TH_LOG("First hex is %x", *((unsigned int *)self->addr));
- munmap(addr, LENGTH);
- close(fd);
+ for (i = 0; i < LENGTH; i++)
+ self->addr[i] = (char)i;
- ksft_test_result(!ret, "Read same data\n");
+ TH_LOG("First hex is %x", *((unsigned int *)self->addr));
- ksft_exit(!ret);
+ for (i = 0; i < LENGTH; i++) {
+ ASSERT_EQ(self->addr[i], (char)i) {
+ TH_LOG("Error: Mismatch at %lu\n", i);
+ };
+ }
}
+
+TEST_HARNESS_MAIN
--
2.54.0.563.g4f69b47b94-goog