From nobody Mon May 25 04:35:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E741D3815FD; Mon, 18 May 2026 18:17:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779128266; cv=none; b=fFaE4Ibf9w0u26tKr1rkMnGQiNKbNso2am4nxCe7W4hIj16Ua9TzUmoJxnXx78s1Tx19UBenoA50xVicdJgR9LXrKc3GT68K/RS8MWjZWPMdu5xQ329/jbI3d2pGlJZfSkbhoSbB8DOoMhjZXs28orV/ogTHAZ+FRe8v+suveE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779128266; c=relaxed/simple; bh=uPaUXRhcKqK9gTwZzqyg3dsJT+ESOmLgskDTFq08dN4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IXTHle8GKfPAX/ODXeETLoPzlr4lYJNESidrSUiUMx1/jTrKN3PgsvyRKsg5+L1M86BJi+AvbQ9yOkqJG7u4WsQsgxt0b12y8D+F23Onme1wMudT0o3O8cvL074srmh5GnXbbD/qBpGHZ8COjSdlSvAJnSsanbRRdm7b+jYkmzg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iqCNxRdq; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="iqCNxRdq" Received: by smtp.kernel.org (Postfix) with ESMTPS id 968D9C2BCC6; Mon, 18 May 2026 18:17:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779128265; bh=uPaUXRhcKqK9gTwZzqyg3dsJT+ESOmLgskDTFq08dN4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=iqCNxRdqLxB4wvgj9cMjt8jNzLW7SuPq6eCfmjflUK1BOhqh2ryUyskaTt7nXGE5z qkhBIAxHYOp00DQQ0Iu8eScWkeEMgUgYLjbFaBIGVCrBOOuwEMMGS2vh5Pko7Z7BRa F7Ytfby7tDmjA3g3Ibq9tiQ3yvIGBH14hN85AR8kgTT/i4rrlXchzBnJU6p+iAHc2y fkV19X+sYc3Hh4564uiTJ/CVCx2LL5WAVW4lCpMdOZF7nq+cbRZZzEOMS07dV23ny8 lGbgKMuvy9GIc9yNQFSOsrBmDWRy8lT0nPUP765Ac12Zg39eJk1Wl0f6aaMdi6C14p SSMH2vwK0qclQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 87296CD4F4A; Mon, 18 May 2026 18:17:45 +0000 (UTC) From: Ackerley Tng via B4 Relay Date: Mon, 18 May 2026 11:17:33 -0700 Subject: [PATCH RFC 1/5] mm: selftests: Inline check_bytes() function into caller Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-port-hugetlb-selftests-v1-1-d64ba3a785fe@google.com> References: <20260518-port-hugetlb-selftests-v1-0-d64ba3a785fe@google.com> In-Reply-To: <20260518-port-hugetlb-selftests-v1-0-d64ba3a785fe@google.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Shuah Khan , muchun.song@linux.dev, osalvador@suse.de Cc: linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Ackerley Tng X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1779128265; l=1508; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=ojhFIsSt5J/Ln9Qe8lS4lDGB7t2xMx2nI91/0IgGnFg=; b=aCFGbDzyqxAT6wHgkBwWRA+y1A982R53xn0sOG+7hlA8GCoWXFQxD8QyELbiTEhSynpWciYyf 8NJ5sYUzWfbAuyRupSfrHOzNUScKBzd0pxj9IFOKrSOl1MraP43NkT/ X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Endpoint-Received: by B4 Relay for ackerleytng@google.com/20260225 with auth_id=649 X-Original-From: Ackerley Tng Reply-To: ackerleytng@google.com From: Ackerley Tng Inline the check_bytes() function to prepare for using the kselftest harness, where TH_LOG() relies on the variable _metadata being present in the caller. Instead of passing _metadata to a helper function like check_bytes(), call TH_LOG() directly. Signed-off-by: Ackerley Tng --- tools/testing/selftests/mm/hugepage-mmap.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/mm/hugepage-mmap.c b/tools/testing/sel= ftests/mm/hugepage-mmap.c index d543419de0407..8c246070572f9 100644 --- a/tools/testing/selftests/mm/hugepage-mmap.c +++ b/tools/testing/selftests/mm/hugepage-mmap.c @@ -20,11 +20,6 @@ #define LENGTH (256UL*1024*1024) #define PROTECTION (PROT_READ | PROT_WRITE) =20 -static void check_bytes(char *addr) -{ - ksft_print_msg("First hex is %x\n", *((unsigned int *)addr)); -} - static void write_bytes(char *addr) { unsigned long i; @@ -37,7 +32,7 @@ static int read_bytes(char *addr) { unsigned long i; =20 - check_bytes(addr); + ksft_print_msg("First hex is %x\n", *((unsigned int *)addr)); for (i =3D 0; i < LENGTH; i++) if (*(addr + i) !=3D (char)i) { ksft_print_msg("Error: Mismatch at %lu\n", i); @@ -65,7 +60,7 @@ int main(void) } =20 ksft_print_msg("Returned address is %p\n", addr); - check_bytes(addr); + ksft_print_msg("First hex is %x\n", *((unsigned int *)addr)); write_bytes(addr); ret =3D read_bytes(addr); =20 --=20 2.54.0.563.g4f69b47b94-goog From nobody Mon May 25 04:35:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E73943806D6; Mon, 18 May 2026 18:17:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779128266; cv=none; b=pWoEw3ATN3UN5fY0UrvWExC36tEvatu8CujQxrBUY8ZCxvVmR1BNT+VVd4TdMs1c/xyhXyCpSufXfRFyho+pasKqv1W7yUm4w/6zgSbYLpwaoaUIGy9Ot15V35/CjYYOux1ZlZGSNqoy8env3/j8W4fJIkTVyHVPpmmEhXzZmM4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779128266; c=relaxed/simple; bh=BUdOCaQuOCSBBDHR2jUyq+U+9zPMuOuv59bLWu+eXK8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tYV8yhOQyGTgU31jfQ+L/9yrLXIRx3whvrrFgSGkY7MhMV5r7rtiHzpWGUZiBZFD8lOD855a4kXCYIJzii5i/UhSTKCAYJ0aQf9K0fhkNexZWhvk6SPn3tZEQ9jTyehNdsjEPTeB439rNlHEJOC/HjzuysdTiGoI0PRIl18WlmQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=M58eeV4u; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="M58eeV4u" Received: by smtp.kernel.org (Postfix) with ESMTPS id A373EC2BCF5; Mon, 18 May 2026 18:17:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779128265; bh=BUdOCaQuOCSBBDHR2jUyq+U+9zPMuOuv59bLWu+eXK8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=M58eeV4uIMxcWwQE2urHUh/QNnc1jCQBqSjK9PPpmrrgybimA9xYcjou1TUZCjuvI AvcAUrVa6eGU5NMe5rREDkifS95Rlxmdkt1niQq2t+QLUY6VQQ+8cJMIAF5FXxDt74 eINX0SB8yeSkm5KrzwlirNCZ6TAa4HV+Y2Ph+rU6HTr1P5ZdFR5fnhgAcRBzNHY/dx boDlFqxn1DBobvQFL6JfB83LimuOi3PZyAwKCBc/S+FgtiQ1Bk9ed6l4UlqTTTfEHR ChVB3Qk+S2zHVfZos0SXxXl3cQEzroxHU7LEXqU4eFfVM1Wtg3kmcyEuhimu9ialjT G4KPykVIF8sSA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 95DE4CD4F50; Mon, 18 May 2026 18:17:45 +0000 (UTC) From: Ackerley Tng via B4 Relay Date: Mon, 18 May 2026 11:17:34 -0700 Subject: [PATCH RFC 2/5] mm: selftests: Inline {read,write}_bytes functions Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-port-hugetlb-selftests-v1-2-d64ba3a785fe@google.com> References: <20260518-port-hugetlb-selftests-v1-0-d64ba3a785fe@google.com> In-Reply-To: <20260518-port-hugetlb-selftests-v1-0-d64ba3a785fe@google.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Shuah Khan , muchun.song@linux.dev, osalvador@suse.de Cc: linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Ackerley Tng X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1779128265; l=1888; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=3vqV15tnc/KP7l17CqT82I3LVdfcrBoQAIsUGRd62xc=; b=8wRWXv6/rOnk4l6CutfsJgow0n6eIr/AsAi5gOQiNeOSPDM5g7SuG9MmaRX7tv6dn3aqhQhb+ PQUacAigGvODbw69xP477YxGOx0ttnT+euh7SJS2UaNIeMbKaErkZ1g X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Endpoint-Received: by B4 Relay for ackerleytng@google.com/20260225 with auth_id=649 X-Original-From: Ackerley Tng Reply-To: ackerleytng@google.com From: Ackerley Tng When the kselftest_harness is used in a later patch, making assertions like ASSERT_EQ() relies on _metadata's existence at the macro site, hence using helper functions makes it more complicated. Signed-off-by: Ackerley Tng --- tools/testing/selftests/mm/hugepage-mmap.c | 38 +++++++++++---------------= ---- 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/tools/testing/selftests/mm/hugepage-mmap.c b/tools/testing/sel= ftests/mm/hugepage-mmap.c index 8c246070572f9..64f7d28a97fdf 100644 --- a/tools/testing/selftests/mm/hugepage-mmap.c +++ b/tools/testing/selftests/mm/hugepage-mmap.c @@ -20,31 +20,11 @@ #define LENGTH (256UL*1024*1024) #define PROTECTION (PROT_READ | PROT_WRITE) =20 -static void write_bytes(char *addr) -{ - unsigned long i; - - for (i =3D 0; i < LENGTH; i++) - *(addr + i) =3D (char)i; -} - -static int read_bytes(char *addr) -{ - unsigned long i; - - ksft_print_msg("First hex is %x\n", *((unsigned int *)addr)); - for (i =3D 0; i < LENGTH; i++) - if (*(addr + i) !=3D (char)i) { - ksft_print_msg("Error: Mismatch at %lu\n", i); - return 1; - } - return 0; -} - int main(void) { void *addr; - int fd, ret; + int fd, ret =3D 0; + unsigned long i; =20 ksft_print_header(); ksft_set_plan(1); @@ -61,8 +41,18 @@ int main(void) =20 ksft_print_msg("Returned address is %p\n", addr); ksft_print_msg("First hex is %x\n", *((unsigned int *)addr)); - write_bytes(addr); - ret =3D read_bytes(addr); + + for (i =3D 0; i < LENGTH; i++) + *(char *)(addr + i) =3D (char)i; + + ksft_print_msg("First hex is %x\n", *((unsigned int *)addr)); + for (i =3D 0; i < LENGTH; i++) { + if (*(char *)(addr + i) !=3D (char)i) { + ksft_print_msg("Error: Mismatch at %lu\n", i); + ret =3D 1; + break; + } + } =20 munmap(addr, LENGTH); close(fd); --=20 2.54.0.563.g4f69b47b94-goog From nobody Mon May 25 04:35:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E72D121254B; Mon, 18 May 2026 18:17:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779128266; cv=none; b=acsfkjJrBTr9YtY0pSHGwxIC8iRzyIjqeP30LJ1gyZdf5aYLhDIlJb+Z0UnneNvR0Fja30GZvrD8jKVWrXkr8JTljJW8EEby4ImGxv2Hw0eJN6H0Oxf8xtI2o53+tJVXb/vJKKvDXG+tc3JIkvgdPW+3e2ju5bhkOsA+UtuViV4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779128266; c=relaxed/simple; bh=PykAxIkeN0jFfz1Zn2ciq+xbGylYcs6mwYJtCuA0HUY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dfuegJsiK+iVAvpAsOwrUASKkyWMKDWb08z3okDg03Y3YFUOajDeUL4JYWtXR0M7rropugzxNmZ4f6C49I7prqc6eSzBoftZOf3OQoLPuRP07VuZ20Fv8WzHhk4V7BzQ31S8Ie8Bj1E5uGkyDvP+Rm2I5SHQwwgvWXmjxSzXMZ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=m6wbsmLV; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="m6wbsmLV" Received: by smtp.kernel.org (Postfix) with ESMTPS id B429BC2BCF6; Mon, 18 May 2026 18:17:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779128265; bh=PykAxIkeN0jFfz1Zn2ciq+xbGylYcs6mwYJtCuA0HUY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=m6wbsmLVMwi7Upb11/kQFX/HyNxuFSFY5SFBz3UwQGuxUi6FhGgQdqJzoy+cKeH4e tPCPwU3YB9c0o/BtYlHeeE1y8JDE5FJgOCUCI9FtUrjk6G6w78UaQvNQRyOh6/55OD fsF89KiQ/a1iuU/ofksPPU8aGKV+eimTBJI/nDuEuGfxH95OM+jnxqa2822dryZy1S uEWYjfBUp9WW4IXR7DUzpfAk9TQ6P2Ap1eIQ/X43JtueojXeaNwdt0ma4n5AaojQnc jE73+KyKYR/T42Jrpt6NOcmrQM7GCGV9z6mTERsBad6YvRUdTSzqf0OpMm2a66budD 7LrtB4FhSfwxQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A7EB3CD4F58; Mon, 18 May 2026 18:17:45 +0000 (UTC) From: Ackerley Tng via B4 Relay Date: Mon, 18 May 2026 11:17:35 -0700 Subject: [PATCH RFC 3/5] mm: selftests: Refactor hugepage-mmap to use kselftest harness Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-port-hugetlb-selftests-v1-3-d64ba3a785fe@google.com> References: <20260518-port-hugetlb-selftests-v1-0-d64ba3a785fe@google.com> In-Reply-To: <20260518-port-hugetlb-selftests-v1-0-d64ba3a785fe@google.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Shuah Khan , muchun.song@linux.dev, osalvador@suse.de Cc: linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Ackerley Tng X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1779128265; l=2847; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=+iX/sXuCWZ7Cvdfn9EiGTfuvG8jGBSzvIKiil83JdTo=; b=cCP3PNDbEeViZeHLywrqRCI3U02IjNAxaY6JYUaLkxHKd7lXQu1aRkOkIki96+D7u+Eg7seg3 Ck69Pd15PnTCJdoyr6CcFCDPFOqZ+N4TulPvxistfAsTOhpiopVYqat X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Endpoint-Received: by B4 Relay for ackerleytng@google.com/20260225 with auth_id=649 X-Original-From: Ackerley Tng Reply-To: ackerleytng@google.com From: Ackerley Tng 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 --- 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/sel= ftests/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 #include #include -#include "kselftest.h" +#include "kselftest_harness.h" =20 #define LENGTH (256UL*1024*1024) #define PROTECTION (PROT_READ | PROT_WRITE) =20 -int main(void) +FIXTURE(hugepage_mmap) { - void *addr; - int fd, ret =3D 0; - unsigned long i; - - ksft_print_header(); - ksft_set_plan(1); + int fd; + char *addr; +}; =20 - fd =3D 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 =3D memfd_create("hugepage-mmap", MFD_HUGETLB); + ASSERT_GE(self->fd, 0) { + TH_LOG("memfd_create() failed: %s", strerror(errno)); + } =20 - addr =3D mmap(NULL, LENGTH, PROTECTION, MAP_SHARED, fd, 0); - if (addr =3D=3D MAP_FAILED) { - close(fd); - ksft_exit_fail_msg("mmap(): %s\n", strerror(errno)); + self->addr =3D 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); +} =20 - 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); +} =20 - for (i =3D 0; i < LENGTH; i++) - *(char *)(addr + i) =3D (char)i; +TEST_F(hugepage_mmap, read_write) +{ + unsigned long i; =20 - ksft_print_msg("First hex is %x\n", *((unsigned int *)addr)); - for (i =3D 0; i < LENGTH; i++) { - if (*(char *)(addr + i) !=3D (char)i) { - ksft_print_msg("Error: Mismatch at %lu\n", i); - ret =3D 1; - break; - } - } + TH_LOG("First hex is %x", *((unsigned int *)self->addr)); =20 - munmap(addr, LENGTH); - close(fd); + for (i =3D 0; i < LENGTH; i++) + self->addr[i] =3D (char)i; =20 - ksft_test_result(!ret, "Read same data\n"); + TH_LOG("First hex is %x", *((unsigned int *)self->addr)); =20 - ksft_exit(!ret); + for (i =3D 0; i < LENGTH; i++) { + ASSERT_EQ(self->addr[i], (char)i) { + TH_LOG("Error: Mismatch at %lu\n", i); + }; + } } + +TEST_HARNESS_MAIN --=20 2.54.0.563.g4f69b47b94-goog From nobody Mon May 25 04:35:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ED1BA381AFA; Mon, 18 May 2026 18:17:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779128266; cv=none; b=nsNqgJqVnqGLiEwUOqVgUeGwlW+hIneorg+gO5BneQIWFtS4JhQvIQOj3Mba1m4v2jK3ogVTZBOIyAYPE+R7u/xl5hDTwFkdXneB4riKVNrswr5ccoUY58lNpYnyxBItI/STW9ItHuS7Cbh3HLTyUmg9NVMTelwL40fMm3yH/cA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779128266; c=relaxed/simple; bh=JHk3R6g816OuqB1Hgt1l1LwWqhgjH6v3Sfs+FGIL2jU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bOcfy1mHr5j2iFH3KFwCvGlfqhZ8Uo/s3GCt5iu4G/G0UTjPfGEPT7D3H7M07fP0fHtXx5BXgLCOQrKNxVtioTBwVNuIoMsRPd2Ex80LQUmu3ccAge1tJKlkrGKHcyy3D/7uxeXmA2EpZeq1ILYB1GMkPKvcDD8WbU+STj9kbkM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=f1CzrJ4Y; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="f1CzrJ4Y" Received: by smtp.kernel.org (Postfix) with ESMTPS id C42C9C4AF13; Mon, 18 May 2026 18:17:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779128265; bh=JHk3R6g816OuqB1Hgt1l1LwWqhgjH6v3Sfs+FGIL2jU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=f1CzrJ4Yqo95t6yHU0KmyGCBnjXUxXIbLF0XKmEgnPj3QDd8hfz31iQj29DUC66yG LdF9lVGvLdHoF/sUkrp8RZt5iD1L1l61bY+3TxtOuwXSU0FvdR4Cq/gYsXDvqLepmq XsvrnkmqZ59yXphWF/RX/Vdem0JYu/U6cZo1frf6iVwu1wyX/qTFBoV4cr/LZmG2/D sf4B1gL3QCWDW8rrSzd+8UDmUVesy/lDXVtpYMX9XjOMGyybi7pe/cKb9Qj5qVwmik rOkP4uEc+5+QQD20ApwmBkbyE3bX+Yqtg9KEeGLScDfvUnOXNmi9oMmEezi/SOGy7d APim1AMvT0muw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id BB958CD4F57; Mon, 18 May 2026 18:17:45 +0000 (UTC) From: Ackerley Tng via B4 Relay Date: Mon, 18 May 2026 11:17:36 -0700 Subject: [PATCH RFC 4/5] mm: selftests: Update hugepage-mmap to support hugetlbfs mount Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-port-hugetlb-selftests-v1-4-d64ba3a785fe@google.com> References: <20260518-port-hugetlb-selftests-v1-0-d64ba3a785fe@google.com> In-Reply-To: <20260518-port-hugetlb-selftests-v1-0-d64ba3a785fe@google.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Shuah Khan , muchun.song@linux.dev, osalvador@suse.de Cc: linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Ackerley Tng X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1779128265; l=3375; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=UohDzF0IDPJpVfS8tMj24WgpCofY5vpUdRHF24vk2iU=; b=5uxe5mBqfzQ1SIKIcquQms4vhqqdYB3BUyQSZlrS81kmhC9iHur6Z1P4KUT/FsGZeEPqSznpj duVeqsyGbkjAeZx/X2wU4RhXQfpUX9wLvfFv9lFXFBOjzJc+o3dh6gl X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Endpoint-Received: by B4 Relay for ackerleytng@google.com/20260225 with auth_id=649 X-Original-From: Ackerley Tng Reply-To: ackerleytng@google.com From: Ackerley Tng Run the same write/read test for a file on a hugetlbfs mount, in addition to a memfd. Use FIXTURE_VARIANT for parametrized testing. Use an unlinked fd to make save cleanup steps later. Signed-off-by: Ackerley Tng --- tools/testing/selftests/mm/hugepage-mmap.c | 85 ++++++++++++++++++++++++++= ++-- 1 file changed, 80 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/mm/hugepage-mmap.c b/tools/testing/sel= ftests/mm/hugepage-mmap.c index 9c8a0638d04b8..dd9fccb209b10 100644 --- a/tools/testing/selftests/mm/hugepage-mmap.c +++ b/tools/testing/selftests/mm/hugepage-mmap.c @@ -15,36 +15,111 @@ #include #include #include +#include +#include +#include #include "kselftest_harness.h" =20 +static int hugetlbfs_unlinked_fd(const char *mount) +{ + char path[PATH_MAX]; + int fd; + + snprintf(path, sizeof(path), "%s/hugepage-mmap-XXXXXX", mount); + fd =3D mkstemp(path); + if (fd < 0) + return fd; + + unlink(path); + return fd; +} + #define LENGTH (256UL*1024*1024) #define PROTECTION (PROT_READ | PROT_WRITE) =20 +enum fd_kind { + MEMFD, + HUGETLBFS_FD, +}; + FIXTURE(hugepage_mmap) { int fd; char *addr; + char mount_dir[PATH_MAX]; +}; + +static int fd_create(struct __test_metadata *_metadata, + FIXTURE_DATA(hugepage_mmap) *self, enum fd_kind fd_kind) +{ + switch (fd_kind) { + case MEMFD: + return memfd_create("hugepage-mmap", MFD_HUGETLB); + case HUGETLBFS_FD: { + snprintf(self->mount_dir, sizeof(self->mount_dir), + "/tmp/hugepage-mmap-XXXXXX"); + ASSERT_NE(NULL, mkdtemp(self->mount_dir)) + { + TH_LOG("mkdtemp() failed: %s", strerror(errno)); + } + ASSERT_EQ(0, mount("none", self->mount_dir, "hugetlbfs", 0, + "pagesize=3D2M")) + { + TH_LOG("mount() failed: %s", strerror(errno)); + } + return hugetlbfs_unlinked_fd(self->mount_dir); + } + default: + return -1; + }; +} + +FIXTURE_VARIANT(hugepage_mmap) +{ + enum fd_kind fd_kind; +}; + +FIXTURE_VARIANT_ADD(hugepage_mmap, memfd) +{ + .fd_kind =3D MEMFD, +}; + +FIXTURE_VARIANT_ADD(hugepage_mmap, hugetlbfs_fd) +{ + .fd_kind =3D HUGETLBFS_FD, }; =20 FIXTURE_SETUP(hugepage_mmap) { - self->fd =3D memfd_create("hugepage-mmap", MFD_HUGETLB); + self->fd =3D -1; + self->addr =3D MAP_FAILED; + self->mount_dir[0] =3D '\0'; + /* Enable teardown to cleanup on any assertions in FIXTURE_SETUP(). */ + *_metadata->no_teardown =3D false; + + self->fd =3D fd_create(_metadata, self, variant->fd_kind); ASSERT_GE(self->fd, 0) { - TH_LOG("memfd_create() failed: %s", strerror(errno)); + TH_LOG("fd creation failed: %s", strerror(errno)); } =20 self->addr =3D 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); } =20 FIXTURE_TEARDOWN(hugepage_mmap) { - munmap(self->addr, LENGTH); - close(self->fd); + if (self->addr !=3D MAP_FAILED) + munmap(self->addr, LENGTH); + if (self->fd >=3D 0) + close(self->fd); + + if (variant->fd_kind =3D=3D HUGETLBFS_FD && self->mount_dir[0]) { + umount(self->mount_dir); + rmdir(self->mount_dir); + } } =20 TEST_F(hugepage_mmap, read_write) --=20 2.54.0.563.g4f69b47b94-goog From nobody Mon May 25 04:35:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1A304387598; Mon, 18 May 2026 18:17:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779128266; cv=none; b=tk0jjTFLBJtIMu0nLlMj/krhJILmx50EcBl+/wkwTZJWD4Ka6ifF6ra428oALwv3omUsE5yF+o/VmaSJhyHScXoANSHTv/8uDB2PnP679QIwgmFctXMa91zRAj3jwBOBByKyBN/9rwo4QCoxuVQHONSNq9CUOyCZRfpmOJ586Aw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779128266; c=relaxed/simple; bh=4CO55womEnBoPWCctzW+OpQftEjr2hhkfmJD62dJN44=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PW35IYboOmtHBigPAvwGqmTDpl2XjmLXSk+5Uj0bsocel9AHtO0ScdS2sO4GJrCw0iOQ6n+io8PQrTlE8ob1QVR/2bo3NI5ia6EJ0Oi6psG2AcWPtcZnTEyylXbmSOBOBTvUTwmpEYFM2VMQ6waF8pRXMHysOWbF5MCHIq/hRcE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CaSA7KfQ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CaSA7KfQ" Received: by smtp.kernel.org (Postfix) with ESMTPS id D6913C2BCFF; Mon, 18 May 2026 18:17:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779128265; bh=4CO55womEnBoPWCctzW+OpQftEjr2hhkfmJD62dJN44=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=CaSA7KfQVyQtRv+yyn5br6OHX/yPIzATzUCHi1Eb/EZspFaXkpKymTJOMyR8d9M3b jR+P8fhRKGpBlxdTRzAdg+IHe0u6ScPeT1mj2WJU8i29ZZTnbHeJJGAdF1mktLD9V5 Xy1fM0l2ZxnhJ3zkJZBdeMOSXTScHIuWNo7zZlDQTjwfS00oIxOlu+QoItCMmYUK4o kBzoL18v7OEwvqn9n8gUma7GhpA9cYchtQQZfeH1wlAvA2aPq818oZvFlK7HGEwJZ5 xyya+ZVcgYi2qH8i0YUH0i1mEBpe1jbyV0Ce0d9FJXB+E7l3iHdK9Bin2/Kn75I2c2 93SbdK1aEZ1HA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id CBE3DCD4F4A; Mon, 18 May 2026 18:17:45 +0000 (UTC) From: Ackerley Tng via B4 Relay Date: Mon, 18 May 2026 11:17:37 -0700 Subject: [PATCH RFC 5/5] mm: selftests: Port readback test logic from libhugetlbfs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-port-hugetlb-selftests-v1-5-d64ba3a785fe@google.com> References: <20260518-port-hugetlb-selftests-v1-0-d64ba3a785fe@google.com> In-Reply-To: <20260518-port-hugetlb-selftests-v1-0-d64ba3a785fe@google.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Shuah Khan , muchun.song@linux.dev, osalvador@suse.de Cc: linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Ackerley Tng X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1779128265; l=1602; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=89off7URPXKpNOqQZuCiXrCqLPNnXfaicuty8kmghyM=; b=2EmdrC/gCQ3MioA72AfovP0JnhYZTfmTmBwAMfNu2EP7oCwZxCKgxIPZaCXufUhQE+ZEiaPpM EdlNF/U6uRBBLfpGgRNE33I/AxPAC835iYY/3i4b0CTZgeAgV36UEn3 X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Endpoint-Received: by B4 Relay for ackerleytng@google.com/20260225 with auth_id=649 X-Original-From: Ackerley Tng Reply-To: ackerleytng@google.com From: Ackerley Tng 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 --- 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/sel= ftests/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]; }; =20 @@ -122,19 +122,21 @@ FIXTURE_TEARDOWN(hugepage_mmap) } } =20 +#define RANDOM_CONSTANT 0x1234ABCD + TEST_F(hugepage_mmap, read_write) { unsigned long i; =20 - TH_LOG("First hex is %x", *((unsigned int *)self->addr)); + TH_LOG("First hex is %x", *self->addr); =20 - for (i =3D 0; i < LENGTH; i++) - self->addr[i] =3D (char)i; + for (i =3D 0; i < LENGTH / sizeof(*self->addr); i++) + self->addr[i] =3D RANDOM_CONSTANT ^ i; =20 - TH_LOG("First hex is %x", *((unsigned int *)self->addr)); + TH_LOG("First hex is %x", *self->addr); =20 - for (i =3D 0; i < LENGTH; i++) { - ASSERT_EQ(self->addr[i], (char)i) { + for (i =3D 0; i < LENGTH / sizeof(*self->addr); i++) { + ASSERT_EQ(self->addr[i], RANDOM_CONSTANT ^ i) { TH_LOG("Error: Mismatch at %lu\n", i); }; } --=20 2.54.0.563.g4f69b47b94-goog