[PATCH RFC 5/5] mm: selftests: Port readback test logic from libhugetlbfs

From: Ackerley Tng via B4 Relay

Date: Mon May 18 2026 - 14:20:14 EST


From: Ackerley Tng <ackerleytng@xxxxxxxxxx>

Port verification logic from libhugetlbfs' tests/readback.c.

Iterate using an unsigned int pointer instead of a char pointer, which
enables testing against a greater range of stored values beyond [0, 255].

Signed-off-by: Ackerley Tng <ackerleytng@xxxxxxxxxx>
---
tools/testing/selftests/mm/hugepage-mmap.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/tools/testing/selftests/mm/hugepage-mmap.c b/tools/testing/selftests/mm/hugepage-mmap.c
index dd9fccb209b10..a7d4a3eba3dd7 100644
--- a/tools/testing/selftests/mm/hugepage-mmap.c
+++ b/tools/testing/selftests/mm/hugepage-mmap.c
@@ -45,7 +45,7 @@ enum fd_kind {
FIXTURE(hugepage_mmap)
{
int fd;
- char *addr;
+ unsigned int *addr;
char mount_dir[PATH_MAX];
};

@@ -122,19 +122,21 @@ FIXTURE_TEARDOWN(hugepage_mmap)
}
}

+#define RANDOM_CONSTANT 0x1234ABCD
+
TEST_F(hugepage_mmap, read_write)
{
unsigned long i;

- TH_LOG("First hex is %x", *((unsigned int *)self->addr));
+ TH_LOG("First hex is %x", *self->addr);

- for (i = 0; i < LENGTH; i++)
- self->addr[i] = (char)i;
+ for (i = 0; i < LENGTH / sizeof(*self->addr); i++)
+ self->addr[i] = RANDOM_CONSTANT ^ i;

- TH_LOG("First hex is %x", *((unsigned int *)self->addr));
+ TH_LOG("First hex is %x", *self->addr);

- for (i = 0; i < LENGTH; i++) {
- ASSERT_EQ(self->addr[i], (char)i) {
+ for (i = 0; i < LENGTH / sizeof(*self->addr); i++) {
+ ASSERT_EQ(self->addr[i], RANDOM_CONSTANT ^ i) {
TH_LOG("Error: Mismatch at %lu\n", i);
};
}

--
2.54.0.563.g4f69b47b94-goog