From nobody Sun Jun 14 21:18:04 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 572C137F733; Mon, 6 Apr 2026 14:17:52 +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=1775485072; cv=none; b=BzdWus7VhqKm3x20jwhZiDtmPx+pnwXMx9TptjB//KmHnP2ZuTGqQaYaPGRW4wAe0V7wXG4rrqykcgNKrUzQ03WbeT5yWOxAu/kTm1n41gZrKvpea+S2Dl+jW2Id12nHjuiNTpnRAS71kNsasnOurK84H5dGci6+TScoAsY/iDc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485072; c=relaxed/simple; bh=6vj0uSM6vP/d0qVg1g+ptcF5MLY8M8muWRFmIKUP/YU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aGCxVeR9iTbxSfiQFb7Vx39TBKuFwp9gHn4iDCRDIsNPkvFoU4G3NS+hPStwtE1bUmuNxSNE8QJSVkacepejoCt0ItZFGnFGlVbxQmXko8AavZowXtZN5NqNBhbkZMyMtVuSJkUmxRmLm5WONZsOqQ2adTOydwBizJDOKXTGRN4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CxpDm9aw; 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="CxpDm9aw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A8BE0C2BC9E; Mon, 6 Apr 2026 14:17:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485072; bh=6vj0uSM6vP/d0qVg1g+ptcF5MLY8M8muWRFmIKUP/YU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CxpDm9awfQNQqzRyBPfzjxy/ha7bCdXAq0vOwun5VdxQJzBlzmpeoyaq0d8iPWC2v A8FBYM17bB4CGMQqFL6THW1GvU5YntiIuJHQmOVUgBzRzHaJpVBjiPI9SUUE2SXSFx R7VjOfYze7UhL4nWmRzv4dcgjks71aAB9U8GG7CgeVlL6mqyc+b6Sq0HKRrl5b78RB 3tSRWiZHksl3twyTwnhyWnj43PmGwE3BTrwsxOWke71W6DKDqISpb0POxkO+v9oehE vB0J6VmxpP8v2/qPh8MIlrcRwLlL1vfsQSolQyjmJVBiShNZZ+O+r+rgZD2AOyFUQw h1z1uYn4Y8ahA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 01/53] selftests/mm: hugetlb-read-hwpoison: add SIGBUS handler Date: Mon, 6 Apr 2026 17:16:43 +0300 Message-ID: <20260406141735.2179309-2-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Access of poisoned memory causes SIGBUS, which terminates the hugetlb-read-hwpoison test prematurely. Add a dummy SIGBUS handler to allow the test to continue regardless of SIGBUS. Signed-off-by: Mike Rapoport (Microsoft) Tested-by: Sarthak Sharma --- tools/testing/selftests/mm/hugetlb-read-hwpoison.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/testing/selftests/mm/hugetlb-read-hwpoison.c b/tools/tes= ting/selftests/mm/hugetlb-read-hwpoison.c index 46230462ad48..6bbf15f78061 100644 --- a/tools/testing/selftests/mm/hugetlb-read-hwpoison.c +++ b/tools/testing/selftests/mm/hugetlb-read-hwpoison.c @@ -10,6 +10,7 @@ #include #include #include +#include =20 #include "kselftest.h" =20 @@ -261,6 +262,11 @@ static int create_hugetlbfs_file(struct statfs *file_s= tat) return -1; } =20 +static void sigbus_handler(int sig) +{ + printf(PREFIX "received SIGBUS\n"); +} + int main(void) { int fd; @@ -273,6 +279,7 @@ int main(void) }; size_t i; =20 + signal(SIGBUS, sigbus_handler); for (i =3D 0; i < ARRAY_SIZE(wr_chunk_sizes); ++i) { printf("Write/read chunk size=3D0x%lx\n", wr_chunk_sizes[i]); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 2938A311C1B; Mon, 6 Apr 2026 14:17:57 +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=1775485078; cv=none; b=Dy1vy0UILY5htTIH2oe7uKjv2CSY/+UXNjvg31EQ84Zoxd1Jb2P+SgWCkwyHJY4hadIq5gjl9UDWi2WONvbrfwqsZIyfuyYSV0vq4cFw8vlSQuqPSiuwxNycrIzZOdP00djizss8suuLjDLHF+kBgPhhErujLP7z65RBRx50fBA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485078; c=relaxed/simple; bh=a4vQJGv5oSnYFOAuEaEUtLL2TvNcolXC7zAnBLawpZo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U3d94IiZAcZb+xXoekoaq88+mD8iEA2Ry1AnMBMkYtknJc2iyCoROlFfLLPtJEmwIbL+OzvD5n6L0vYJ9GFpHgUbtRbaJxyv6dS7OFXGpM9aLLgpF0pCmtSH1kJMtX7240W/p911BI3+yxB/+cLpOWGfHMTYOmg2mKJYgT3glmE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fEpsZlte; 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="fEpsZlte" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 70F26C4CEF7; Mon, 6 Apr 2026 14:17:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485077; bh=a4vQJGv5oSnYFOAuEaEUtLL2TvNcolXC7zAnBLawpZo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fEpsZltem1eqf2vgJDiHXUdg8MFqoj8Y/2ecLrFLGPhbPbGX5Ow5vo+HPlwwFJij6 CpuMNgzQJuuZJujPtp7VOQwLZhTNyXOYCMvy6ua10Fmx2vJUf8pk808Y5CV1lgtX7w FvPPhk8IxfI+P5H+Enip053hbmb4PiBcQ4aGqOv95QQepXA9P+eaBE/QGkk/Jwg8s+ zXehD+T8JwqNQ26TJTRNOZrxSCG6iOpPCSnEKViBiHXUsLLWJDte7+BNhUi5BmnFxY IH3nI0Je2ybhKam6EMDj5vedW+w8Qg0GduWk/9e1ayp38PL5wAwN5T4fekNfFIRpWS khM9ESJ7g02GQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 02/53] selftests/mm: khugepaged: enable collapse_single_pte_entry_compound for shmem Date: Mon, 6 Apr 2026 17:16:44 +0300 Message-ID: <20260406141735.2179309-3-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" A comment in collapse_single_pte_entry_compound() says it can't run on shmem because "MADV_DONTNEED can't evict tmpfs pages". But MADV_REMOVE can! Use MADV_REMOVE for tmpfs to evict pages and enable collapse_single_pte_entry_compound() test for shmem. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/khugepaged.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selfte= sts/mm/khugepaged.c index 3fe7ef04ac62..e6fb01ca44ed 100644 --- a/tools/testing/selftests/mm/khugepaged.c +++ b/tools/testing/selftests/mm/khugepaged.c @@ -783,20 +783,17 @@ static void collapse_max_ptes_swap(struct collapse_co= ntext *c, struct mem_ops *o =20 static void collapse_single_pte_entry_compound(struct collapse_context *c,= struct mem_ops *ops) { + int advise =3D MADV_DONTNEED; void *p; =20 p =3D alloc_hpage(ops); =20 - if (is_tmpfs(ops)) { - /* MADV_DONTNEED won't evict tmpfs pages */ - printf("tmpfs..."); - skip("Skip"); - goto skip; - } + if (is_tmpfs(ops)) + advise =3D MADV_REMOVE; =20 madvise(p, hpage_pmd_size, MADV_NOHUGEPAGE); printf("Split huge page leaving single PTE mapping compound page..."); - madvise(p + page_size, hpage_pmd_size - page_size, MADV_DONTNEED); + madvise(p + page_size, hpage_pmd_size - page_size, advise); if (ops->check_huge(p, 0)) success("OK"); else @@ -805,7 +802,6 @@ static void collapse_single_pte_entry_compound(struct c= ollapse_context *c, struc c->collapse("Collapse PTE table with single PTE mapping compound page", p, 1, ops, true); validate_memory(p, 0, page_size); -skip: ops->cleanup_area(p, hpage_pmd_size); } =20 @@ -1251,8 +1247,10 @@ int main(int argc, char **argv) =20 TEST(collapse_single_pte_entry_compound, khugepaged_context, anon_ops); TEST(collapse_single_pte_entry_compound, khugepaged_context, file_ops); + TEST(collapse_single_pte_entry_compound, khugepaged_context, shmem_ops); TEST(collapse_single_pte_entry_compound, madvise_context, anon_ops); TEST(collapse_single_pte_entry_compound, madvise_context, file_ops); + TEST(collapse_single_pte_entry_compound, madvise_context, shmem_ops); =20 TEST(collapse_full_of_compound, khugepaged_context, anon_ops); TEST(collapse_full_of_compound, khugepaged_context, file_ops); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 BBC35311C1B; Mon, 6 Apr 2026 14:18:03 +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=1775485083; cv=none; b=BnzreoaMDeFxjjX3pQNFXrn4V6qPFpW+xbnLTD8/BrmmCPl4WZQyPi8k14M2k1Xtm5XBniEH3J9ad/jVC/fH1aPBcIq5Y9qempDdwC7I+Kxvelb2TxxlFMRSvCTJArnH9sMPEtlcKBynYPOb8zcSMArW34QyDPAuRViz/8IADCM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485083; c=relaxed/simple; bh=ZunzhmESrw/FYLfIvxz1F/zRnAmBbpTHiht0efTR3bI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VrC5h7Jcgsmlo2lv+NkSlRve+ajEembNmwCF6UBCWJ6d2Xx5OXakhi0KgG7vmbnVnCD9yh1YnFtldvO6Yf8CIiwYOkg0dgezgSChliNumlnuG2RboBt0EfmfRsiS0XTQmWYhWMOkr4GeJn5wjdAVpjBe4BNaCdMx9r1koS6sr+A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=R5TQWUnp; 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="R5TQWUnp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 37BB5C2BC9E; Mon, 6 Apr 2026 14:17:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485083; bh=ZunzhmESrw/FYLfIvxz1F/zRnAmBbpTHiht0efTR3bI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=R5TQWUnpGRw5gFKB++Upg4UCfhIJL9e/HjKz3+SmlmDR4drQCTNCOgzMoOd23EWpJ MwMaYYq9o0e2XZ0hBs+P4pAzOacOZsRANW4AAIncObmA+ChFRnDzZTDqNSwJnU3SNo kYeLhr+8qZ7mp7+w7CKNFRK27NRx/phR5sTRmgDF0zzTKHzSNYc/lcKOTdGmXBGdHU KitznWBZu1UD545br+AHcFi+m+UINl1R9KvdYx2B/Sg8yifW9Ye+pzyYYowHdl2lKa MpZ5MFboKhVw8Su1j5AnoX45eXQq46zt5FC8XOu7+du4oCsOUFqwzlbjGL+7vnIyvQ BeBIkOf4tdkNQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 03/53] selftests/mm: migration: don't assume hupe page is TWOMEG Date: Mon, 6 Apr 2026 17:16:45 +0300 Message-ID: <20260406141735.2179309-4-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" migration tests presume that both THP and HugeTLB huge pages are 2MB. Add dynamic detection of huge page size with read_pmd_pagesize() for THP and with default_huge_page_size() for HugeTLB. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/migration.c | 44 +++++++++++++++++++------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/mm/migration.c b/tools/testing/selftes= ts/mm/migration.c index 60e78bbfc0e3..e3c2f831e15a 100644 --- a/tools/testing/selftests/mm/migration.c +++ b/tools/testing/selftests/mm/migration.c @@ -184,22 +184,27 @@ TEST_F_TIMEOUT(migration, shared_anon, 2*RUNTIME) */ TEST_F_TIMEOUT(migration, private_anon_thp, 2*RUNTIME) { + unsigned long pmdsize; uint64_t *ptr; int i; =20 if (!thp_is_enabled()) SKIP(return, "Transparent Hugepages not available"); =20 + pmdsize =3D read_pmd_pagesize(); + if (!pmdsize) + SKIP(return, "Reading PMD pagesize failed"); + if (self->nthreads < 2 || self->n1 < 0 || self->n2 < 0) SKIP(return, "Not enough threads or NUMA nodes available"); =20 - ptr =3D mmap(NULL, 2*TWOMEG, PROT_READ | PROT_WRITE, + ptr =3D mmap(NULL, 2 * pmdsize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); ASSERT_NE(ptr, MAP_FAILED); =20 - ptr =3D (uint64_t *) ALIGN((uintptr_t) ptr, TWOMEG); - ASSERT_EQ(madvise(ptr, TWOMEG, MADV_HUGEPAGE), 0); - memset(ptr, 0xde, TWOMEG); + ptr =3D (uint64_t *) ALIGN((uintptr_t) ptr, pmdsize); + ASSERT_EQ(madvise(ptr, pmdsize, MADV_HUGEPAGE), 0); + memset(ptr, 0xde, pmdsize); for (i =3D 0; i < self->nthreads - 1; i++) if (pthread_create(&self->threads[i], NULL, access_mem, ptr)) perror("Couldn't create thread"); @@ -215,6 +220,7 @@ TEST_F_TIMEOUT(migration, private_anon_thp, 2*RUNTIME) =20 TEST_F_TIMEOUT(migration, shared_anon_thp, 2*RUNTIME) { + unsigned long pmdsize; pid_t pid; uint64_t *ptr; int i; @@ -222,17 +228,21 @@ TEST_F_TIMEOUT(migration, shared_anon_thp, 2*RUNTIME) if (!thp_is_enabled()) SKIP(return, "Transparent Hugepages not available"); =20 + pmdsize =3D read_pmd_pagesize(); + if (!pmdsize) + SKIP(return, "Reading PMD pagesize failed"); + if (self->nthreads < 2 || self->n1 < 0 || self->n2 < 0) SKIP(return, "Not enough threads or NUMA nodes available"); =20 - ptr =3D mmap(NULL, 2 * TWOMEG, PROT_READ | PROT_WRITE, + ptr =3D mmap(NULL, 2 * pmdsize, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); ASSERT_NE(ptr, MAP_FAILED); =20 - ptr =3D (uint64_t *) ALIGN((uintptr_t) ptr, TWOMEG); - ASSERT_EQ(madvise(ptr, TWOMEG, MADV_HUGEPAGE), 0); + ptr =3D (uint64_t *) ALIGN((uintptr_t) ptr, pmdsize); + ASSERT_EQ(madvise(ptr, pmdsize, MADV_HUGEPAGE), 0); =20 - memset(ptr, 0xde, TWOMEG); + memset(ptr, 0xde, pmdsize); for (i =3D 0; i < self->nthreads - 1; i++) { pid =3D fork(); if (!pid) { @@ -256,17 +266,22 @@ TEST_F_TIMEOUT(migration, shared_anon_thp, 2*RUNTIME) */ TEST_F_TIMEOUT(migration, private_anon_htlb, 2*RUNTIME) { + unsigned long hugepage_size; uint64_t *ptr; int i; =20 if (self->nthreads < 2 || self->n1 < 0 || self->n2 < 0) SKIP(return, "Not enough threads or NUMA nodes available"); =20 - ptr =3D mmap(NULL, TWOMEG, PROT_READ | PROT_WRITE, + hugepage_size =3D default_huge_page_size(); + if (!hugepage_size) + SKIP(return, "Reading HugeTLB pagesize failed\n"); + + ptr =3D mmap(NULL, hugepage_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0); ASSERT_NE(ptr, MAP_FAILED); =20 - memset(ptr, 0xde, TWOMEG); + memset(ptr, 0xde, hugepage_size); for (i =3D 0; i < self->nthreads - 1; i++) if (pthread_create(&self->threads[i], NULL, access_mem, ptr)) perror("Couldn't create thread"); @@ -281,6 +296,7 @@ TEST_F_TIMEOUT(migration, private_anon_htlb, 2*RUNTIME) */ TEST_F_TIMEOUT(migration, shared_anon_htlb, 2*RUNTIME) { + unsigned long hugepage_size; pid_t pid; uint64_t *ptr; int i; @@ -288,11 +304,15 @@ TEST_F_TIMEOUT(migration, shared_anon_htlb, 2*RUNTIME) if (self->nthreads < 2 || self->n1 < 0 || self->n2 < 0) SKIP(return, "Not enough threads or NUMA nodes available"); =20 - ptr =3D mmap(NULL, TWOMEG, PROT_READ | PROT_WRITE, + hugepage_size =3D default_huge_page_size(); + if (!hugepage_size) + SKIP(return, "Reading HugeTLB pagesize failed\n"); + + ptr =3D mmap(NULL, hugepage_size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0); ASSERT_NE(ptr, MAP_FAILED); =20 - memset(ptr, 0xde, TWOMEG); + memset(ptr, 0xde, hugepage_size); for (i =3D 0; i < self->nthreads - 1; i++) { pid =3D fork(); if (!pid) { --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 8FBAA37FF73; Mon, 6 Apr 2026 14:18:09 +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=1775485089; cv=none; b=djOiAn+XG7T9tkNt50D8i3NHCQf+ZBL4DAfB5CigjkvMeJQopFOYYtttYvxpA+1cug4Lj+xaoGmHo/icLM6jVlvEnVAAcSNO93H1kqzgcqwFdFgtvvcWcKLo0k/tRdiGBRylzrQLdERTdpnTiS2+07gBAY+KA/E5yB8Ci0DSJaU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485089; c=relaxed/simple; bh=HP6NlM6bvsHL46OUqlPVamucjfq0ryG8JPKt7QsDS+o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GIQC76X9DbQyvGAXRfevy69rkVjIsGInhKiWxyV3uCl10LBnRK11rKB8HHmpzp0SwAfZHGgvk8zoDZvmNg5JeRErEmTuB9z3oVphwifBzZHiZ+4Gsr/GJsYx9lqjrRnWADbmEjeA4pW5udpTSAEX4K9fPvv9RJWJxXs+5/71fsU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eELZP2t5; 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="eELZP2t5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2644CC4CEF7; Mon, 6 Apr 2026 14:18:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485089; bh=HP6NlM6bvsHL46OUqlPVamucjfq0ryG8JPKt7QsDS+o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eELZP2t56SEYYr6dEjupCpgolItnOiDrwIk1wz0W5Vy9Ch/B1tOSnB4OzpnrymdFU R/J/THWiCmNjAJJ5/tsILSLComfIP7fi+rE0pZmtDQ47sziKEIVLrGFOwXjV3gtS0m cSQuLnAxofX1UE8/gPLwyEdwRTVh8Wu+47cNS8PnMkSjgE4cR4Cm4HnmoLhvx/xmGv fGc59rO9V8vM5RcbKdvRaUjgD69N8Tv8roXoKyr0HQMfMOZ1h/zrJn7qeCPSn+jGwO lpRSl6K6wKW5ZqoOTLvAS+aZ1ST4dh14P2sKeeVZ6BLUGyGPseW1OggOX1b4ueNrrQ PEwKZ/Turz28g== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 04/53] selftests/mm: run_vmtests.sh: don't gate THP and KSM tests on HAVE_HUGEPAGES Date: Mon, 6 Apr 2026 17:16:46 +0300 Message-ID: <20260406141735.2179309-5-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" HAVE_HUGEPAGES indicates availability of free HugeTLB pages. It should not be used to gate KSM test that merges transparent huge pages or split_huge_page_test. Remove check for HAVE_HUGEPAGES when running these tests. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/run_vmtests.sh | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/self= tests/mm/run_vmtests.sh index d8468451b3a3..e2dc9ac87bfc 100755 --- a/tools/testing/selftests/mm/run_vmtests.sh +++ b/tools/testing/selftests/mm/run_vmtests.sh @@ -436,9 +436,7 @@ CATEGORY=3D"memfd_secret" run_test ./memfd_secret fi =20 # KSM KSM_MERGE_TIME_HUGE_PAGES test with size of 100 -if [ "${HAVE_HUGEPAGES}" =3D "1" ]; then - CATEGORY=3D"ksm" run_test ./ksm_tests -H -s 100 -fi +CATEGORY=3D"ksm" run_test ./ksm_tests -H -s 100 # KSM KSM_MERGE_TIME test with size of 100 CATEGORY=3D"ksm" run_test ./ksm_tests -P -s 100 # KSM MADV_MERGEABLE test with 10 identical pages @@ -493,16 +491,14 @@ CATEGORY=3D"thp" run_test ./transhuge-stress -d 20 =20 # Try to create XFS if not provided if [ -z "${SPLIT_HUGE_PAGE_TEST_XFS_PATH}" ]; then - if [ "${HAVE_HUGEPAGES}" =3D "1" ]; then - if test_selected "thp"; then - if grep xfs /proc/filesystems &>/dev/null; then - XFS_IMG=3D$(mktemp /tmp/xfs_img_XXXXXX) - SPLIT_HUGE_PAGE_TEST_XFS_PATH=3D$(mktemp -d /tmp/xfs_dir_XXXXXX) - truncate -s 314572800 ${XFS_IMG} - mkfs.xfs -q ${XFS_IMG} - mount -o loop ${XFS_IMG} ${SPLIT_HUGE_PAGE_TEST_XFS_PATH} - MOUNTED_XFS=3D1 - fi + if test_selected "thp"; then + if grep xfs /proc/filesystems &>/dev/null; then + XFS_IMG=3D$(mktemp /tmp/xfs_img_XXXXXX) + SPLIT_HUGE_PAGE_TEST_XFS_PATH=3D$(mktemp -d /tmp/xfs_dir_XXXXXX) + truncate -s 314572800 ${XFS_IMG} + mkfs.xfs -q ${XFS_IMG} + mount -o loop ${XFS_IMG} ${SPLIT_HUGE_PAGE_TEST_XFS_PATH} + MOUNTED_XFS=3D1 fi fi fi --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 6BEE537DEBB; Mon, 6 Apr 2026 14:18:15 +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=1775485095; cv=none; b=KbQEYdTB6pTBdYSh1Ns9y3e9qcajukT6JmRU4lShCWJV/MTRuJClpCb+cizhGYoqerZkswbDn1Obbr/RTp9eGqxxKJoI3PhanLErNJ5LrtmPBzagU5F2UYWDgmW5BPJG5N+ogInWfo+uAzGVGusF+8YKH5R4OaC2filTjc6PqQ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485095; c=relaxed/simple; bh=W4jslfUkZMLaDuTVLz/SpzkNKTO6vwroVT4wzIlVBmw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j477WOPhRAFMou+fqlD2O4wTuNapPoydH2jmKM9jDTw5CQtKnL1VoBeZWMbchpB0I6zvHH7EVn5yRUr9Kw2qKqgducJsQ62LFHXB1ikfo42WH4rAyw5/FTvqyq+0g2mEzHgV96XSiNN7mAZ7ImrRmZPKWLX/b8bWwvEGj4QqVVs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dcz6DnPv; 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="dcz6DnPv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E1CA2C4CEF7; Mon, 6 Apr 2026 14:18:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485095; bh=W4jslfUkZMLaDuTVLz/SpzkNKTO6vwroVT4wzIlVBmw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dcz6DnPvxDmJObgi4JjFaQT08p8+iEqAIMRLMoPPZC9zhE8UXZvY1qcWvfkVUcb3K 9IC9PmtVcNhbI/WA7FTeDQgxgllG/hZKbwJINcMl/dAEC0PBLmoTXBwLI3VfY0+/De Z1HPakhz109bMWv6i92nCKB5SJKIdN5UqFyw+089wVxXp44wwacuQv+W3ISAI/IUlf iFMIFPH6mDREZYLWpeLS9BD0g5Cyw2T27YLgrmVsyEPudfbFu5BQPpjQxNF19bfaEi 0X8X/MKmwMjqzg0NBz3N8tGjlGVWGs4QKVkU3/DQdKQoRc2BuWsG8d+1+uftWfOOpD 71E6jHE6waI/Q== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 05/53] selftests/mm: merge map_hugetlb into hugepage-mmap Date: Mon, 6 Apr 2026 17:16:47 +0300 Message-ID: <20260406141735.2179309-6-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Both tests create a hugettlb mapping, fill it with data and verify the data, the only difference is that one uses file-backed memory and another one uses anonymous memory. Merge both tests into a single file. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/Makefile | 1 - tools/testing/selftests/mm/hugepage-mmap.c | 113 ++++++++++++++++----- tools/testing/selftests/mm/map_hugetlb.c | 88 ---------------- tools/testing/selftests/mm/run_vmtests.sh | 1 - 4 files changed, 86 insertions(+), 117 deletions(-) delete mode 100644 tools/testing/selftests/mm/map_hugetlb.c diff --git a/tools/testing/selftests/mm/Makefile b/tools/testing/selftests/= mm/Makefile index cd24596cdd27..cbda989f6b6a 100644 --- a/tools/testing/selftests/mm/Makefile +++ b/tools/testing/selftests/mm/Makefile @@ -70,7 +70,6 @@ TEST_GEN_FILES +=3D hugepage-vmemmap TEST_GEN_FILES +=3D khugepaged TEST_GEN_FILES +=3D madv_populate TEST_GEN_FILES +=3D map_fixed_noreplace -TEST_GEN_FILES +=3D map_hugetlb TEST_GEN_FILES +=3D map_populate ifneq (,$(filter $(ARCH),arm64 riscv riscv64 x86 x86_64 loongarch32 loonga= rch64)) TEST_GEN_FILES +=3D memfd_secret diff --git a/tools/testing/selftests/mm/hugepage-mmap.c b/tools/testing/sel= ftests/mm/hugepage-mmap.c index d543419de040..de210043045a 100644 --- a/tools/testing/selftests/mm/hugepage-mmap.c +++ b/tools/testing/selftests/mm/hugepage-mmap.c @@ -15,6 +15,7 @@ #include #include #include +#include "vm_util.h" #include "kselftest.h" =20 #define LENGTH (256UL*1024*1024) @@ -25,54 +26,112 @@ static void check_bytes(char *addr) ksft_print_msg("First hex is %x\n", *((unsigned int *)addr)); } =20 -static void write_bytes(char *addr) +static void write_bytes(char *addr, size_t length) { unsigned long i; =20 - for (i =3D 0; i < LENGTH; i++) + for (i =3D 0; i < length; i++) *(addr + i) =3D (char)i; } =20 -static int read_bytes(char *addr) +static bool verify_bytes(char *addr, size_t length) { unsigned long i; =20 check_bytes(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; + for (i =3D 0; i < length; i++) + if (*(addr + i) !=3D (char)i) + return false; + + return true; } =20 -int main(void) +static bool test_mmap(size_t length, int mmap_flags, int fd, + const char *test_name) { + int flags =3D MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB; void *addr; - int fd, ret; =20 - ksft_print_header(); - ksft_set_plan(1); + addr =3D mmap(NULL, length, PROTECTION, flags, -1, 0); + if (addr =3D=3D MAP_FAILED) + ksft_exit_fail_perror("mmap"); + + ksft_print_msg("Returned address is %p\n", addr); + check_bytes(addr); + write_bytes(addr, length); + if (!verify_bytes(addr, length)) + ksft_exit_fail_msg("%s\n", test_name); + + /* munmap() length of MAP_HUGETLB memory must be hugepage aligned */ + if (munmap(addr, length)) + ksft_exit_fail_perror("munmap"); + + return true; +} + +static void test_anon_mmap(size_t length, int shift) +{ + const char *test_name =3D "hugetlb anonymous mmap"; + int mmap_flags =3D MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB; + bool passed; + + if (shift) + mmap_flags |=3D (shift & MAP_HUGE_MASK) << MAP_HUGE_SHIFT; + + passed =3D test_mmap(length, mmap_flags, -1, test_name); + ksft_test_result(passed, "%s\n", test_name); +} + +static void test_file_mmap(size_t length, int shift) +{ + const char *test_name =3D "hugetlb file mmap"; + int mmap_flags =3D MAP_SHARED; + bool passed; + int fd; + + if (shift) + mmap_flags |=3D (shift & MAP_HUGE_MASK) << MAP_HUGE_SHIFT; =20 - fd =3D memfd_create("hugepage-mmap", MFD_HUGETLB); + fd =3D memfd_create("hugetlb-mmap", MFD_HUGETLB); if (fd < 0) - ksft_exit_fail_msg("memfd_create() failed: %s\n", strerror(errno)); + ksft_exit_fail_perror("memfd_create"); + + passed =3D test_mmap(length, mmap_flags, fd, test_name); + + close(fd); + ksft_test_result(passed, "%s\n", test_name); +} + +int main(int argc, char **argv) +{ + size_t hugepage_size; + size_t length =3D LENGTH; + int shift =3D 0; + + ksft_print_header(); + ksft_set_plan(2); + + if (argc > 1) + length =3D atol(argv[1]) << 20; + if (argc > 2) + shift =3D atoi(argv[2]); =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)); + if (shift) { + hugepage_size =3D (1 << shift); + ksft_print_msg("%u kB hugepages\n", 1 << (shift - 10)); + } else { + hugepage_size =3D default_huge_page_size(); + ksft_print_msg("Default size hugepages (%lu Kb)\n", hugepage_size >> 10); } =20 - ksft_print_msg("Returned address is %p\n", addr); - check_bytes(addr); - write_bytes(addr); - ret =3D read_bytes(addr); + /* munmap with fail if the length is not page aligned */ + if (hugepage_size > length) + length =3D hugepage_size; =20 - munmap(addr, LENGTH); - close(fd); + ksft_print_msg("Mapping %lu Mbytes\n", (unsigned long)length >> 20); =20 - ksft_test_result(!ret, "Read same data\n"); + test_anon_mmap(length, shift); + test_file_mmap(length, shift); =20 - ksft_exit(!ret); + ksft_finished(); } diff --git a/tools/testing/selftests/mm/map_hugetlb.c b/tools/testing/selft= ests/mm/map_hugetlb.c deleted file mode 100644 index aa409107611b..000000000000 --- a/tools/testing/selftests/mm/map_hugetlb.c +++ /dev/null @@ -1,88 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Example of using hugepage memory in a user application using the mmap - * system call with MAP_HUGETLB flag. Before running this program make - * sure the administrator has allocated enough default sized huge pages - * to cover the 256 MB allocation. - */ -#include -#include -#include -#include -#include -#include "vm_util.h" -#include "kselftest.h" - -#define LENGTH (256UL*1024*1024) -#define PROTECTION (PROT_READ | PROT_WRITE) - -static void check_bytes(char *addr) -{ - ksft_print_msg("First hex is %x\n", *((unsigned int *)addr)); -} - -static void write_bytes(char *addr, size_t length) -{ - unsigned long i; - - for (i =3D 0; i < length; i++) - *(addr + i) =3D (char)i; -} - -static void read_bytes(char *addr, size_t length) -{ - unsigned long i; - - check_bytes(addr); - for (i =3D 0; i < length; i++) - if (*(addr + i) !=3D (char)i) - ksft_exit_fail_msg("Mismatch at %lu\n", i); - - ksft_test_result_pass("Read correct data\n"); -} - -int main(int argc, char **argv) -{ - void *addr; - size_t hugepage_size; - size_t length =3D LENGTH; - int flags =3D MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB; - int shift =3D 0; - - hugepage_size =3D default_huge_page_size(); - /* munmap with fail if the length is not page aligned */ - if (hugepage_size > length) - length =3D hugepage_size; - - ksft_print_header(); - ksft_set_plan(1); - - if (argc > 1) - length =3D atol(argv[1]) << 20; - if (argc > 2) { - shift =3D atoi(argv[2]); - if (shift) - flags |=3D (shift & MAP_HUGE_MASK) << MAP_HUGE_SHIFT; - } - - if (shift) - ksft_print_msg("%u kB hugepages\n", 1 << (shift - 10)); - else - ksft_print_msg("Default size hugepages\n"); - ksft_print_msg("Mapping %lu Mbytes\n", (unsigned long)length >> 20); - - addr =3D mmap(NULL, length, PROTECTION, flags, -1, 0); - if (addr =3D=3D MAP_FAILED) - ksft_exit_fail_msg("mmap: %s\n", strerror(errno)); - - ksft_print_msg("Returned address is %p\n", addr); - check_bytes(addr); - write_bytes(addr, length); - read_bytes(addr, length); - - /* munmap() length of MAP_HUGETLB memory must be hugepage aligned */ - if (munmap(addr, length)) - ksft_exit_fail_msg("munmap: %s\n", strerror(errno)); - - ksft_finished(); -} diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/self= tests/mm/run_vmtests.sh index e2dc9ac87bfc..61b450032af8 100755 --- a/tools/testing/selftests/mm/run_vmtests.sh +++ b/tools/testing/selftests/mm/run_vmtests.sh @@ -292,7 +292,6 @@ CATEGORY=3D"hugetlb" run_test ./hugepage-shm echo "$shmmax" > /proc/sys/kernel/shmmax echo "$shmall" > /proc/sys/kernel/shmall =20 -CATEGORY=3D"hugetlb" run_test ./map_hugetlb CATEGORY=3D"hugetlb" run_test ./hugepage-mremap CATEGORY=3D"hugetlb" run_test ./hugepage-vmemmap CATEGORY=3D"hugetlb" run_test ./hugetlb-madvise --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 0F7F037F8BD; Mon, 6 Apr 2026 14:18:21 +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=1775485101; cv=none; b=kDB0OgAm57Xlkrod+7tNlYtGVt/ApkflLPLZQ717QB4EP/eushrunUqzR0Ji270qRVpQESPrf3qGWOd0GkqOCr1EdpB1iBVn06osHDJ0ZIko3GYyBbdEg8bfNECqONwgthJJrC7LEy57urxMAG8h7qbKeLf4dQpwPZur8WSVAS0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485101; c=relaxed/simple; bh=FlieAnc4FruMQ6QrS7CarGSRQDTGnwuXJngoZqFbG3I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mPYPViouM0yHjgvZWl7AmJQx/XnjAdOvKgcYO6c0FAQILJEfsWcgEGpI5Qbbgl8xtZAOmJQz1/B59qhgTSYkg5vNIo+mUuYwSLoUhVado7JTjm48QnxJ71oM6vM4MMor+jaFnKQn89chI69DQ85CH99P6tCg0aCynkitcFxmgtI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rNpdvEwM; 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="rNpdvEwM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A89CDC4CEF7; Mon, 6 Apr 2026 14:18:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485100; bh=FlieAnc4FruMQ6QrS7CarGSRQDTGnwuXJngoZqFbG3I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rNpdvEwMpUYGFmdKc0S6GzedlIcHxn4nEiU2s0V1b5U65KtSXqEy2OBmMqY3Wg+Fi +42YEnx2ENiaXN7BfnnqtG6oiQZGkOy4vEkglyUgkl1jnstPtHHil7dwjnZODe3qXn xnSAEsx+Z3S0RK2XcY74X05trQc17q8iKkTiWXa7aDRrTXnB7a0rrB6RRFDXuCG7l1 uVySfR4hfvVyGPqWBSK/f5SH3+kr/WVTcSNXMitDqT1vsS80C8ZdnZzayiiFzCl3te VFO4Wn8wsEGlp5KnIVzq+qG05lWAd6bEvJ/94BQ/qqMhOOfru6AiRRS7AJ3ZJtPwrJ EGsc1JEf+d8lQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 06/53] selftests/mm: rename hugepage-* tests to hugetlb-* Date: Mon, 6 Apr 2026 17:16:48 +0300 Message-ID: <20260406141735.2179309-7-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hugepage could mean both THP and HugeTLB these days. Rename hugepage-* tests for HugeTLB to hugetlb-* to avoid confusion. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/.gitignore | 4 ++++ tools/testing/selftests/mm/Makefile | 8 ++++---- tools/testing/selftests/mm/hugetlb-madvise.c | 2 +- .../selftests/mm/{hugepage-mmap.c =3D> hugetlb-mmap.c} | 2 +- .../selftests/mm/{hugepage-mremap.c =3D> hugetlb-mremap.c} | 2 +- .../selftests/mm/{hugepage-shm.c =3D> hugetlb-shm.c} | 2 +- .../mm/{hugepage-vmemmap.c =3D> hugetlb-vmemmap.c} | 0 tools/testing/selftests/mm/run_vmtests.sh | 8 ++++---- 8 files changed, 16 insertions(+), 12 deletions(-) rename tools/testing/selftests/mm/{hugepage-mmap.c =3D> hugetlb-mmap.c} (9= 9%) rename tools/testing/selftests/mm/{hugepage-mremap.c =3D> hugetlb-mremap.c= } (99%) rename tools/testing/selftests/mm/{hugepage-shm.c =3D> hugetlb-shm.c} (99%) rename tools/testing/selftests/mm/{hugepage-vmemmap.c =3D> hugetlb-vmemmap= .c} (100%) diff --git a/tools/testing/selftests/mm/.gitignore b/tools/testing/selftest= s/mm/.gitignore index b0c30c5ee9e3..9ccd9e1447e6 100644 --- a/tools/testing/selftests/mm/.gitignore +++ b/tools/testing/selftests/mm/.gitignore @@ -4,6 +4,10 @@ hugepage-mmap hugepage-mremap hugepage-shm hugepage-vmemmap +hugetlb-mmap +hugetlb-mremap +hugetlb-shm +hugetlb-vmemmap hugetlb-madvise hugetlb-read-hwpoison hugetlb-soft-offline diff --git a/tools/testing/selftests/mm/Makefile b/tools/testing/selftests/= mm/Makefile index cbda989f6b6a..a6955660a806 100644 --- a/tools/testing/selftests/mm/Makefile +++ b/tools/testing/selftests/mm/Makefile @@ -63,10 +63,10 @@ TEST_GEN_FILES +=3D hmm-tests TEST_GEN_FILES +=3D hugetlb-madvise TEST_GEN_FILES +=3D hugetlb-read-hwpoison TEST_GEN_FILES +=3D hugetlb-soft-offline -TEST_GEN_FILES +=3D hugepage-mmap -TEST_GEN_FILES +=3D hugepage-mremap -TEST_GEN_FILES +=3D hugepage-shm -TEST_GEN_FILES +=3D hugepage-vmemmap +TEST_GEN_FILES +=3D hugetlb-mremap +TEST_GEN_FILES +=3D hugetlb-shm +TEST_GEN_FILES +=3D hugetlb-vmemmap +TEST_GEN_FILES +=3D hugetlb-mmap TEST_GEN_FILES +=3D khugepaged TEST_GEN_FILES +=3D madv_populate TEST_GEN_FILES +=3D map_fixed_noreplace diff --git a/tools/testing/selftests/mm/hugetlb-madvise.c b/tools/testing/s= elftests/mm/hugetlb-madvise.c index 5b12041fa310..898cc90b314f 100644 --- a/tools/testing/selftests/mm/hugetlb-madvise.c +++ b/tools/testing/selftests/mm/hugetlb-madvise.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * hugepage-madvise: + * hugetlb-madvise: * * Basic functional testing of madvise MADV_DONTNEED and MADV_REMOVE * on hugetlb mappings. diff --git a/tools/testing/selftests/mm/hugepage-mmap.c b/tools/testing/sel= ftests/mm/hugetlb-mmap.c similarity index 99% rename from tools/testing/selftests/mm/hugepage-mmap.c rename to tools/testing/selftests/mm/hugetlb-mmap.c index de210043045a..71a444d8b1cb 100644 --- a/tools/testing/selftests/mm/hugepage-mmap.c +++ b/tools/testing/selftests/mm/hugetlb-mmap.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * hugepage-mmap: + * hugetlb-mmap: * * Example of using huge page memory in a user application using the mmap * system call. Before running this application, make sure that the diff --git a/tools/testing/selftests/mm/hugepage-mremap.c b/tools/testing/s= elftests/mm/hugetlb-mremap.c similarity index 99% rename from tools/testing/selftests/mm/hugepage-mremap.c rename to tools/testing/selftests/mm/hugetlb-mremap.c index b8f7d92e5a35..1c87c39780c5 100644 --- a/tools/testing/selftests/mm/hugepage-mremap.c +++ b/tools/testing/selftests/mm/hugetlb-mremap.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * hugepage-mremap: + * hugetlb-mremap: * * Example of remapping huge page memory in a user application using the * mremap system call. The path to a file in a hugetlbfs filesystem must diff --git a/tools/testing/selftests/mm/hugepage-shm.c b/tools/testing/self= tests/mm/hugetlb-shm.c similarity index 99% rename from tools/testing/selftests/mm/hugepage-shm.c rename to tools/testing/selftests/mm/hugetlb-shm.c index ef06260802b5..de8f5d523084 100644 --- a/tools/testing/selftests/mm/hugepage-shm.c +++ b/tools/testing/selftests/mm/hugetlb-shm.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * hugepage-shm: + * hugetlb-shm: * * Example of using huge page memory in a user application using Sys V sha= red * memory system calls. In this example the app is requesting 256MB of diff --git a/tools/testing/selftests/mm/hugepage-vmemmap.c b/tools/testing/= selftests/mm/hugetlb-vmemmap.c similarity index 100% rename from tools/testing/selftests/mm/hugepage-vmemmap.c rename to tools/testing/selftests/mm/hugetlb-vmemmap.c diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/self= tests/mm/run_vmtests.sh index 61b450032af8..b9e520194634 100755 --- a/tools/testing/selftests/mm/run_vmtests.sh +++ b/tools/testing/selftests/mm/run_vmtests.sh @@ -282,18 +282,18 @@ run_test() { =20 echo "TAP version 13" | tap_output =20 -CATEGORY=3D"hugetlb" run_test ./hugepage-mmap +CATEGORY=3D"hugetlb" run_test ./hugetlb-mmap =20 shmmax=3D$(cat /proc/sys/kernel/shmmax) shmall=3D$(cat /proc/sys/kernel/shmall) echo 268435456 > /proc/sys/kernel/shmmax echo 4194304 > /proc/sys/kernel/shmall -CATEGORY=3D"hugetlb" run_test ./hugepage-shm +CATEGORY=3D"hugetlb" run_test ./hugetlb-shm echo "$shmmax" > /proc/sys/kernel/shmmax echo "$shmall" > /proc/sys/kernel/shmall =20 -CATEGORY=3D"hugetlb" run_test ./hugepage-mremap -CATEGORY=3D"hugetlb" run_test ./hugepage-vmemmap +CATEGORY=3D"hugetlb" run_test ./hugetlb-mremap +CATEGORY=3D"hugetlb" run_test ./hugetlb-vmemmap CATEGORY=3D"hugetlb" run_test ./hugetlb-madvise CATEGORY=3D"hugetlb" run_test ./hugetlb_dio =20 --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 6646E37E317; Mon, 6 Apr 2026 14:18:26 +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=1775485107; cv=none; b=Fm5a8YutI6q9z9UkVdIZKst8C0Oo49XLRa9Yvql7lz0YFN5rZGnFujBn9P84PzzTyNnHKdH6YArGT0EdpDw9j2lHOE3EibswYO4SVOv9YqzyBdFKlL6zQtGyi7zEGM/fcu5NKDXd6vwkt/7piBtE7TEYp+iUF1mEJ3Fv0+dgQIk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485107; c=relaxed/simple; bh=0Pimjk9A/zLvbB52+YrtlDUIAYwfREb2pbqcH7aoQw0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YTYtaUERRipc4VZ6RhgC9FuQo/oqDJh6uIPMlSO2FUm7OtZ+8wMLfPIIC3nrC2j4vi0FBna4sa8WB1AGFdn4kM2jHBvMUYLBpvfUtbmDpaLx1yGV+Fraucfy2KSi98Ux993/m5XZ1OGgvzGloB9DQpDZNerZuufqEnxDpUb7ias= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EPPVCPWA; 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="EPPVCPWA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6E420C2BCB0; Mon, 6 Apr 2026 14:18:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485106; bh=0Pimjk9A/zLvbB52+YrtlDUIAYwfREb2pbqcH7aoQw0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EPPVCPWAiyqEEeDI15bL64yH/NoXAMiHO7Md1KNN43yMn5XjXFvJTt2K197GAw0xc V2BcMHWnp+OPti9CMa/wgSZRo4YQs8m/GCIR47TfLsHAd6HbSveKY2ISb6F+gmrNjb oFH0RItlv79gAAqIJQfdu+3aRZo6mYfnTMFmllqQQ4vgVXesl2/dwUJ1GzU792K/dZ agje6ECvSjpxmZGLgAPVF4bW2AC1hKZpPM52JjRaY5GtPBB0inl2LvxxM0mTJFpEk0 EWHsrhnDKSqwnIT1jnE/A293WpE5CdUYN3pE2ZM/s3f4YwRgzUf04JHou5go7nWcgG v5n6l8KnYatAQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 07/53] selftests/mm: hugetlb-shm: use kselftest framework Date: Mon, 6 Apr 2026 17:16:49 +0300 Message-ID: <20260406141735.2179309-8-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Convert hugetlb-shm test to use kselftest framework for reporting and tracking successful and failing runs. Signed-off-by: Mike Rapoport (Microsoft) Reviewed-by: Mark Brown --- tools/testing/selftests/mm/hugetlb-shm.c | 46 ++++++++++++------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/tools/testing/selftests/mm/hugetlb-shm.c b/tools/testing/selft= ests/mm/hugetlb-shm.c index de8f5d523084..10e4baa091f2 100644 --- a/tools/testing/selftests/mm/hugetlb-shm.c +++ b/tools/testing/selftests/mm/hugetlb-shm.c @@ -28,9 +28,9 @@ #include #include =20 -#define LENGTH (256UL*1024*1024) +#include "vm_util.h" =20 -#define dprintf(x) printf(x) +#define LENGTH (256UL*1024*1024) =20 int main(void) { @@ -38,44 +38,44 @@ int main(void) unsigned long i; char *shmaddr; =20 + ksft_print_header(); + ksft_set_plan(1); + shmid =3D shmget(2, LENGTH, SHM_HUGETLB | IPC_CREAT | SHM_R | SHM_W); - if (shmid < 0) { - perror("shmget"); - exit(1); - } - printf("shmid: 0x%x\n", shmid); + if (shmid < 0) + ksft_exit_fail_perror("shmget"); + + ksft_print_msg("shmid: 0x%x\n", shmid); =20 shmaddr =3D shmat(shmid, NULL, 0); if (shmaddr =3D=3D (char *)-1) { - perror("Shared memory attach failure"); + ksft_perror("Shared memory attach failure"); shmctl(shmid, IPC_RMID, NULL); - exit(2); + ksft_exit_fail(); } - printf("shmaddr: %p\n", shmaddr); + ksft_print_msg("shmaddr: %p\n", shmaddr); =20 - dprintf("Starting the writes:\n"); - for (i =3D 0; i < LENGTH; i++) { + ksft_print_msg("Starting the writes:\n"); + for (i =3D 0; i < LENGTH; i++) shmaddr[i] =3D (char)(i); - if (!(i % (1024 * 1024))) - dprintf("."); - } - dprintf("\n"); =20 - dprintf("Starting the Check..."); + ksft_print_msg("Starting the Check..."); for (i =3D 0; i < LENGTH; i++) if (shmaddr[i] !=3D (char)i) { - printf("\nIndex %lu mismatched\n", i); - exit(3); + ksft_print_msg("Index %lu mismatched\n", i); + shmctl(shmid, IPC_RMID, NULL); + ksft_exit_fail_msg("Data mismatch at index %lu\n", i); } - dprintf("Done.\n"); + ksft_print_msg("Done.\n"); =20 if (shmdt((const void *)shmaddr) !=3D 0) { - perror("Detach failure"); + ksft_perror("Detach failure"); shmctl(shmid, IPC_RMID, NULL); - exit(4); + ksft_exit_fail(); } =20 shmctl(shmid, IPC_RMID, NULL); =20 - return 0; + ksft_test_result_pass("hugepage using SysV shmget/shmat\n"); + ksft_finished(); } --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 DBB8537E317; Mon, 6 Apr 2026 14:18:32 +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=1775485112; cv=none; b=cXx/qqAfikXPyTgTsBLmwF9ZZrelqlSjHgQ2l71jsATpim0cha9/Kimg78o/IGUC1N1wwWpnxd1J0bhkAGAg08m5yLM9t8xGaS/YWCJxDfaB5dfai+cbsfaEiWTlzpbOW9GciM6HOliBYkGGMwWs4zXua62KqzWGg6DKdLyq0Ms= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485112; c=relaxed/simple; bh=cHW95NZ42YfNcufefUqyP5vy9sk2uSEi5NqGd6FjA9o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oFB1bV/85F+kb6kvOomNwqZkBIprVEYG67Cb4o07m0ljbX4ctyWNHds+3+3TBMa2lQgljFUbJ/RMY634B9KPXfXnhUbMXfwToVJ2ZFp28AXYAjfSRGQzvlGoKOqtN0iIDYiAYRb4I6AyBIASrCO8/pSwRcRV0xH3mhCPW9npEU0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UbDpBxXk; 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="UbDpBxXk" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3500BC2BC9E; Mon, 6 Apr 2026 14:18:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485112; bh=cHW95NZ42YfNcufefUqyP5vy9sk2uSEi5NqGd6FjA9o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UbDpBxXkoh2MOdnNvogyfcjAd9o0RD0BIw5YWHsmCZEsSyouqb2A7B7qKWwXSuNL5 zU1k8lkIyulvmUhm5+oHtElMogza3qEtmnAsQTVQIsVpcn/zk8MDwvjxx1Rs88y5X+ jGR7y59IhXmfOC8/hkmCEJilYFRDQl1prX+P52/dPuHCILqGj8Xzo5dPghyfg1LjSC q+heU+tRNJmzpCq30Zgnums5QbRXB1FDsiSglkpizQw+wQt6511TUj9WiP/75JhXHd yP4o0JUBpw4hHuApGXB1xPjf/MhyyUzDfecYAm6fdE5tFmvVMTOBYbkBQzhK9VNOrv rBfMhQ0x1BhSw== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 08/53] selftests/mm: hugetlb-vmemmap: use kselftest framework Date: Mon, 6 Apr 2026 17:16:50 +0300 Message-ID: <20260406141735.2179309-9-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Convert hugetlb-vmemmap test to use kselftest framework for reporting and tracking successful and failing runs. Signed-off-by: Mike Rapoport (Microsoft) Reviewed-by: Mark Brown --- tools/testing/selftests/mm/hugetlb-vmemmap.c | 42 +++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/tools/testing/selftests/mm/hugetlb-vmemmap.c b/tools/testing/s= elftests/mm/hugetlb-vmemmap.c index df366a4d1b92..485a6978b40f 100644 --- a/tools/testing/selftests/mm/hugetlb-vmemmap.c +++ b/tools/testing/selftests/mm/hugetlb-vmemmap.c @@ -63,7 +63,7 @@ static int check_page_flags(unsigned long pfn) read(fd, &pageflags, sizeof(pageflags)); if ((pageflags & HEAD_PAGE_FLAGS) !=3D HEAD_PAGE_FLAGS) { close(fd); - printf("Head page flags (%lx) is invalid\n", pageflags); + ksft_print_msg("Head page flags (%lx) is invalid\n", pageflags); return -1; } =20 @@ -77,7 +77,7 @@ static int check_page_flags(unsigned long pfn) if ((pageflags & TAIL_PAGE_FLAGS) !=3D TAIL_PAGE_FLAGS || (pageflags & HEAD_PAGE_FLAGS) =3D=3D HEAD_PAGE_FLAGS) { close(fd); - printf("Tail page flags (%lx) is invalid\n", pageflags); + ksft_print_msg("Tail page flags (%lx) is invalid\n", pageflags); return -1; } } @@ -91,44 +91,38 @@ int main(int argc, char **argv) { void *addr; unsigned long pfn; + int ret; + + ksft_print_header(); + ksft_set_plan(1); =20 pagesize =3D psize(); maplength =3D default_huge_page_size(); - if (!maplength) { - printf("Unable to determine huge page size\n"); - exit(1); - } + if (!maplength) + ksft_exit_skip("Unable to determine huge page size\n"); =20 addr =3D mmap(NULL, maplength, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0); - if (addr =3D=3D MAP_FAILED) { - perror("mmap"); - exit(1); - } + if (addr =3D=3D MAP_FAILED) + ksft_exit_fail_perror("mmap"); =20 /* Trigger allocation of HugeTLB page. */ write_bytes(addr, maplength); =20 pfn =3D virt_to_pfn(addr); if (pfn =3D=3D -1UL) { + ksft_perror("virt_to_pfn"); munmap(addr, maplength); - perror("virt_to_pfn"); - exit(1); + ksft_exit_fail(); } =20 - printf("Returned address is %p whose pfn is %lx\n", addr, pfn); + ksft_print_msg("Returned address is %p whose pfn is %lx\n", addr, pfn); =20 - if (check_page_flags(pfn) < 0) { - munmap(addr, maplength); - perror("check_page_flags"); - exit(1); - } + ret =3D check_page_flags(pfn); =20 - /* munmap() length of MAP_HUGETLB memory must be hugepage aligned */ - if (munmap(addr, maplength)) { - perror("munmap"); - exit(1); - } + if (munmap(addr, maplength)) + ksft_exit_fail_perror("munmap"); =20 - return 0; + ksft_test_result(!ret, "HugeTLB vmemmap page flags\n"); + ksft_finished(); } --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 9992037DEBB; Mon, 6 Apr 2026 14:18:38 +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=1775485118; cv=none; b=nT5Q5HZUpKJ9DcCr4FSE7iqQkZR9cEpAjn0F/FjBc4WIJqbrq8keTudMT3jjaLXh8a4DMdKfRYjCXhvo9LRBXMJ25ejTit9j3rG2fVWOteW6izLjIWgj7pIY7Xe78wtntRv1M2We8e+84bFGcpq9w0mao3N1B6KzmMLyvUIvPwA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485118; c=relaxed/simple; bh=NlqEN1Up11h0mvo02ZJ0SFo+7mbDu/Hjb+POKuNEMGc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V9wpl+7Q7AHnB/0syG8XO/rZ7p8i8qBlYlWvuIDHHIKufafR2NbyRaeS1BtVVqi48LDCxLYtrRiCM1k1XhufHrPIZUz9V/sBinwtUSAkiWshPQrmbr7EZKfBBah8Dhb1yCO+BWXMwOsyz/D0W+sDTCkRsy/OTJYt3n8CGozRhto= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=e9b4SvF5; 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="e9b4SvF5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F0004C4CEF7; Mon, 6 Apr 2026 14:18:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485118; bh=NlqEN1Up11h0mvo02ZJ0SFo+7mbDu/Hjb+POKuNEMGc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=e9b4SvF5wG9/Tok+MynNcVbSmUxyEzLCXy++V5IAFW3mhnb1oB1Qrm/Kn/+bbkUtL zsbfSHLTe5fixxg79651bcbhcEC4kEgVIytYbTmvDdvsk+XXETgCOqsP/uvilaFEXZ y49cs3MXwQmTzenKHauCnaIUZSraERo9Mk/LnUTs7Au79fs5SIeDcgksJLf1avRO0+ +eSExRC9rl7/i/gPBXFUgmB/v/DBpM7ItHDSNeZto0z4CyS6pjRVQChniAs+3WNgc+ IeNW1emXHSVPSBqj0bCsqUOwEzBqyiCxAmL93c+Rn1DP81ahND+Tp5gSPVgj8rCBuy /76HW+nbI8msQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 09/53] selftests/mm: hugetlb-madvise: use kselftest framework Date: Mon, 6 Apr 2026 17:16:51 +0300 Message-ID: <20260406141735.2179309-10-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Convert hugetlb-madvise test to use kselftest framework for reporting and tracking successful and failing runs. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/hugetlb-madvise.c | 204 ++++++++----------- 1 file changed, 82 insertions(+), 122 deletions(-) diff --git a/tools/testing/selftests/mm/hugetlb-madvise.c b/tools/testing/s= elftests/mm/hugetlb-madvise.c index 898cc90b314f..4c6c346a3af5 100644 --- a/tools/testing/selftests/mm/hugetlb-madvise.c +++ b/tools/testing/selftests/mm/hugetlb-madvise.c @@ -26,12 +26,11 @@ =20 #define validate_free_pages(exp_free) \ do { \ - int fhp =3D get_free_hugepages(); \ - if (fhp !=3D (exp_free)) { \ - printf("Unexpected number of free huge " \ - "pages line %d\n", __LINE__); \ - exit(1); \ - } \ + unsigned long fhp =3D get_free_hugepages(); \ + if (fhp !=3D (exp_free)) \ + ksft_exit_fail_msg("Unexpected number of free " \ + "huge pages %ld, expected %ld line %d\n", \ + fhp, (exp_free), __LINE__); \ } while (0) =20 unsigned long huge_page_size; @@ -57,28 +56,24 @@ int main(int argc, char **argv) int fd; int ret; =20 + ksft_print_header(); + ksft_set_plan(1); + huge_page_size =3D default_huge_page_size(); - if (!huge_page_size) { - printf("Unable to determine huge page size, exiting!\n"); - exit(1); - } + if (!huge_page_size) + ksft_exit_skip("Unable to determine huge page size\n"); + base_page_size =3D sysconf(_SC_PAGE_SIZE); - if (!huge_page_size) { - printf("Unable to determine base page size, exiting!\n"); - exit(1); - } + if (!base_page_size) + ksft_exit_fail_msg("Unable to determine base page size\n"); =20 free_hugepages =3D get_free_hugepages(); - if (free_hugepages < MIN_FREE_PAGES) { - printf("Not enough free huge pages to test, exiting!\n"); - exit(KSFT_SKIP); - } + if (free_hugepages < MIN_FREE_PAGES) + ksft_exit_skip("Not enough free huge pages (have %lu, need %d)\n", free_= hugepages, MIN_FREE_PAGES); =20 fd =3D memfd_create(argv[0], MFD_HUGETLB); - if (fd < 0) { - perror("memfd_create() failed"); - exit(1); - } + if (fd < 0) + ksft_exit_fail_perror("memfd_create"); =20 /* * Test validity of MADV_DONTNEED addr and length arguments. mmap @@ -90,16 +85,13 @@ int main(int argc, char **argv) PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0); - if (addr =3D=3D MAP_FAILED) { - perror("mmap"); - exit(1); - } + if (addr =3D=3D MAP_FAILED) + ksft_exit_fail_perror("mmap"); + if (munmap(addr, huge_page_size) || munmap(addr + (NR_HUGE_PAGES + 1) * huge_page_size, - huge_page_size)) { - perror("munmap"); - exit(1); - } + huge_page_size)) + ksft_exit_fail_perror("munmap"); addr =3D addr + huge_page_size; =20 write_fault_pages(addr, NR_HUGE_PAGES); @@ -108,20 +100,14 @@ int main(int argc, char **argv) /* addr before mapping should fail */ ret =3D madvise(addr - base_page_size, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED); - if (!ret) { - printf("Unexpected success of madvise call with invalid addr line %d\n", - __LINE__); - exit(1); - } + if (!ret) + ksft_exit_fail_msg("madvise with invalid addr unexpectedly succeeded lin= e %d\n", __LINE__); =20 /* addr + length after mapping should fail */ ret =3D madvise(addr, (NR_HUGE_PAGES * huge_page_size) + base_page_size, MADV_DONTNEED); - if (!ret) { - printf("Unexpected success of madvise call with invalid length line %d\n= ", - __LINE__); - exit(1); - } + if (!ret) + ksft_exit_fail_msg("madvise with invalid length unexpectedly succeeded l= ine %d\n", __LINE__); =20 (void)munmap(addr, NR_HUGE_PAGES * huge_page_size); =20 @@ -132,10 +118,9 @@ int main(int argc, char **argv) PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0); - if (addr =3D=3D MAP_FAILED) { - perror("mmap"); - exit(1); - } + if (addr =3D=3D MAP_FAILED) + ksft_exit_fail_perror("mmap"); + write_fault_pages(addr, NR_HUGE_PAGES); validate_free_pages(free_hugepages - NR_HUGE_PAGES); =20 @@ -143,19 +128,14 @@ int main(int argc, char **argv) ret =3D madvise(addr + base_page_size, NR_HUGE_PAGES * huge_page_size - base_page_size, MADV_DONTNEED); - if (!ret) { - printf("Unexpected success of madvise call with unaligned start address = %d\n", - __LINE__); - exit(1); - } + if (!ret) + ksft_exit_fail_msg("madvise with unaligned start unexpectedly succeeded = line %d\n", __LINE__); =20 /* addr + length should be aligned down to huge page size */ if (madvise(addr, ((NR_HUGE_PAGES - 1) * huge_page_size) + base_page_size, - MADV_DONTNEED)) { - perror("madvise"); - exit(1); - } + MADV_DONTNEED)) + ksft_exit_fail_perror("madvise"); =20 /* should free all but last page in mapping */ validate_free_pages(free_hugepages - 1); @@ -170,17 +150,14 @@ int main(int argc, char **argv) PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0); - if (addr =3D=3D MAP_FAILED) { - perror("mmap"); - exit(1); - } + if (addr =3D=3D MAP_FAILED) + ksft_exit_fail_perror("mmap"); + write_fault_pages(addr, NR_HUGE_PAGES); validate_free_pages(free_hugepages - NR_HUGE_PAGES); =20 - if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) { - perror("madvise"); - exit(1); - } + if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) + ksft_exit_fail_perror("madvise"); =20 /* should free all pages in mapping */ validate_free_pages(free_hugepages); @@ -190,29 +167,25 @@ int main(int argc, char **argv) /* * Test MADV_DONTNEED on private mapping of hugetlb file */ - if (fallocate(fd, 0, 0, NR_HUGE_PAGES * huge_page_size)) { - perror("fallocate"); - exit(1); - } + if (fallocate(fd, 0, 0, NR_HUGE_PAGES * huge_page_size)) + ksft_exit_fail_perror("fallocate"); + validate_free_pages(free_hugepages - NR_HUGE_PAGES); =20 addr =3D mmap(NULL, NR_HUGE_PAGES * huge_page_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); - if (addr =3D=3D MAP_FAILED) { - perror("mmap"); - exit(1); - } + if (addr =3D=3D MAP_FAILED) + ksft_exit_fail_perror("mmap"); =20 /* read should not consume any pages */ read_fault_pages(addr, NR_HUGE_PAGES); validate_free_pages(free_hugepages - NR_HUGE_PAGES); =20 /* madvise should not free any pages */ - if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) { - perror("madvise"); - exit(1); - } + if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) + ksft_exit_fail_perror("madvise"); + validate_free_pages(free_hugepages - NR_HUGE_PAGES); =20 /* writes should allocate private pages */ @@ -220,10 +193,9 @@ int main(int argc, char **argv) validate_free_pages(free_hugepages - (2 * NR_HUGE_PAGES)); =20 /* madvise should free private pages */ - if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) { - perror("madvise"); - exit(1); - } + if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) + ksft_exit_fail_perror("madvise"); + validate_free_pages(free_hugepages - NR_HUGE_PAGES); =20 /* writes should allocate private pages */ @@ -238,10 +210,9 @@ int main(int argc, char **argv) * implementation. */ if (fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, - 0, NR_HUGE_PAGES * huge_page_size)) { - perror("fallocate"); - exit(1); - } + 0, NR_HUGE_PAGES * huge_page_size)) + ksft_exit_fail_perror("fallocate"); + validate_free_pages(free_hugepages); =20 (void)munmap(addr, NR_HUGE_PAGES * huge_page_size); @@ -249,29 +220,25 @@ int main(int argc, char **argv) /* * Test MADV_DONTNEED on shared mapping of hugetlb file */ - if (fallocate(fd, 0, 0, NR_HUGE_PAGES * huge_page_size)) { - perror("fallocate"); - exit(1); - } + if (fallocate(fd, 0, 0, NR_HUGE_PAGES * huge_page_size)) + ksft_exit_fail_perror("fallocate"); + validate_free_pages(free_hugepages - NR_HUGE_PAGES); =20 addr =3D mmap(NULL, NR_HUGE_PAGES * huge_page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (addr =3D=3D MAP_FAILED) { - perror("mmap"); - exit(1); - } + if (addr =3D=3D MAP_FAILED) + ksft_exit_fail_perror("mmap"); =20 /* write should not consume any pages */ write_fault_pages(addr, NR_HUGE_PAGES); validate_free_pages(free_hugepages - NR_HUGE_PAGES); =20 /* madvise should not free any pages */ - if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) { - perror("madvise"); - exit(1); - } + if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) + ksft_exit_fail_perror("madvise"); + validate_free_pages(free_hugepages - NR_HUGE_PAGES); =20 /* @@ -279,29 +246,25 @@ int main(int argc, char **argv) * * madvise is same as hole punch and should free all pages. */ - if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_REMOVE)) { - perror("madvise"); - exit(1); - } + if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_REMOVE)) + ksft_exit_fail_perror("madvise"); + validate_free_pages(free_hugepages); (void)munmap(addr, NR_HUGE_PAGES * huge_page_size); =20 /* * Test MADV_REMOVE on shared and private mapping of hugetlb file */ - if (fallocate(fd, 0, 0, NR_HUGE_PAGES * huge_page_size)) { - perror("fallocate"); - exit(1); - } + if (fallocate(fd, 0, 0, NR_HUGE_PAGES * huge_page_size)) + ksft_exit_fail_perror("fallocate"); + validate_free_pages(free_hugepages - NR_HUGE_PAGES); =20 addr =3D mmap(NULL, NR_HUGE_PAGES * huge_page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (addr =3D=3D MAP_FAILED) { - perror("mmap"); - exit(1); - } + if (addr =3D=3D MAP_FAILED) + ksft_exit_fail_perror("mmap"); =20 /* shared write should not consume any additional pages */ write_fault_pages(addr, NR_HUGE_PAGES); @@ -310,10 +273,8 @@ int main(int argc, char **argv) addr2 =3D mmap(NULL, NR_HUGE_PAGES * huge_page_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); - if (addr2 =3D=3D MAP_FAILED) { - perror("mmap"); - exit(1); - } + if (addr2 =3D=3D MAP_FAILED) + ksft_exit_fail_perror("mmap"); =20 /* private read should not consume any pages */ read_fault_pages(addr2, NR_HUGE_PAGES); @@ -324,17 +285,15 @@ int main(int argc, char **argv) validate_free_pages(free_hugepages - (2 * NR_HUGE_PAGES)); =20 /* madvise of shared mapping should not free any pages */ - if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) { - perror("madvise"); - exit(1); - } + if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) + ksft_exit_fail_perror("madvise"); + validate_free_pages(free_hugepages - (2 * NR_HUGE_PAGES)); =20 /* madvise of private mapping should free private pages */ - if (madvise(addr2, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) { - perror("madvise"); - exit(1); - } + if (madvise(addr2, NR_HUGE_PAGES * huge_page_size, MADV_DONTNEED)) + ksft_exit_fail_perror("madvise"); + validate_free_pages(free_hugepages - NR_HUGE_PAGES); =20 /* private write should consume additional pages again */ @@ -346,15 +305,16 @@ int main(int argc, char **argv) * not correct. private pages should not be freed, but this is * expected. See comment associated with FALLOC_FL_PUNCH_HOLE call. */ - if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_REMOVE)) { - perror("madvise"); - exit(1); - } + if (madvise(addr, NR_HUGE_PAGES * huge_page_size, MADV_REMOVE)) + ksft_exit_fail_perror("madvise"); + validate_free_pages(free_hugepages); =20 (void)munmap(addr, NR_HUGE_PAGES * huge_page_size); (void)munmap(addr2, NR_HUGE_PAGES * huge_page_size); =20 close(fd); - return 0; + + ksft_test_result_pass("MADV_DONTNEED and MADV_REMOVE on hugetlb\n"); + ksft_finished(); } --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 276623803DE; Mon, 6 Apr 2026 14:18:44 +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=1775485124; cv=none; b=M2hvA6NyGBXerUqmNyaclsYmMfwzGAJGeWxxcJMMagTlYOp8LolO1xJtmZUyE13rOA2ZtTR3E0SK7lvoufWoo/ZJG8M5wr63Y70iG4uTufsN+eiEwi4M5nqqrvygt9UVqByhYEiy4ph4GI6yhhuusAXf5VAidMUG4fuQiqtU5Xs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485124; c=relaxed/simple; bh=8GoszL+JlmoI+AJRMJnrANTWZ3idAH1q8ZSfdoO1bk4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Je4eaTiegpyU600bY8XsXPdxExwlQUUqaSkn7/3v1/+0Umu6NT018m76NySZvyN0w3YLDrd/P9ulLQajiDC1ohP5N8SEYvLxMOPz0zAR1FncrFfZ1oB7vyJxndMdeGwr6H2TPzlbFszAGX0YhcgnxbhDdlrCUHB408U/P+fBD8Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FMSJmZTP; 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="FMSJmZTP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B80BEC2BC9E; Mon, 6 Apr 2026 14:18:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485124; bh=8GoszL+JlmoI+AJRMJnrANTWZ3idAH1q8ZSfdoO1bk4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FMSJmZTPIf4Lm+nJxlliwe5kTMfXJpD49yadYlY8EPUpUqYMU3Nm9wxsF3OeXaOBs FVgBEfH7K1av3dwXyRatUaZRu81qC7g//vAM9+zHHhVzg6Wwood6LqvKeXvwAxEvmf AjTzS513KfY93/izuCzCFR07snMZHIX1fwswEZA0bEOxY4M+dyLL+nabEJk40lUofo F9BTFfRQ3Zt+qo6tta+PUc/nawX/IbI5LHZMZFi0DX9QXrTvzj71c8K8AvuRtySfnO 5DOBbQmBCYHl035tHCN67xKZsujIhumxokhkvgiO/LGSXVTt+Dc+nzAXUKzY2mi8rm dIPwbdsmWdAYw== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 10/53] selftests/mm: hugetlb_madv_vs_map: use kselftest framework Date: Mon, 6 Apr 2026 17:16:52 +0300 Message-ID: <20260406141735.2179309-11-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Convert hugetlb_madv_vs_map test to use kselftest framework for reporting and tracking successful and failing runs. Signed-off-by: Mike Rapoport (Microsoft) Reviewed-by: Mark Brown --- .../testing/selftests/mm/hugetlb_madv_vs_map.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/mm/hugetlb_madv_vs_map.c b/tools/testi= ng/selftests/mm/hugetlb_madv_vs_map.c index efd774b41389..c7105c6d319b 100644 --- a/tools/testing/selftests/mm/hugetlb_madv_vs_map.c +++ b/tools/testing/selftests/mm/hugetlb_madv_vs_map.c @@ -25,7 +25,6 @@ #include =20 #include "vm_util.h" -#include "kselftest.h" =20 #define INLOOP_ITER 100 =20 @@ -86,12 +85,14 @@ int main(void) */ int max =3D 10; =20 + ksft_print_header(); + ksft_set_plan(1); + free_hugepages =3D get_free_hugepages(); =20 - if (free_hugepages !=3D 1) { + if (free_hugepages !=3D 1) ksft_exit_skip("This test needs one and only one page to execute. Got %l= u\n", free_hugepages); - } =20 mmap_size =3D default_huge_page_size(); =20 @@ -100,10 +101,8 @@ int main(void) MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0); =20 - if ((unsigned long)huge_ptr =3D=3D -1) { - ksft_test_result_fail("Failed to allocate huge page\n"); - return KSFT_FAIL; - } + if ((unsigned long)huge_ptr =3D=3D -1) + ksft_exit_fail_msg("Failed to allocate huge page\n"); =20 pthread_create(&thread1, NULL, madv, NULL); pthread_create(&thread2, NULL, touch, NULL); @@ -115,12 +114,13 @@ int main(void) =20 if (ret) { ksft_test_result_fail("Unexpected huge page allocation\n"); - return KSFT_FAIL; + ksft_finished(); } =20 /* Unmap and restart */ munmap(huge_ptr, mmap_size); } =20 - return KSFT_PASS; + ksft_test_result_pass("No unexpected huge page allocations\n"); + ksft_finished(); } --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 1D71537DEAF; Mon, 6 Apr 2026 14:18:49 +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=1775485130; cv=none; b=dmco8ouhpUQHo0slPN61I66caMFio/aQ1bShkooZ3JSZqn5KBr/kVhAqo1Ke7SwvLGrbijnta4VUWktpqcDdCWfueqZrpwjGcpkb6flpqkmtjzCHr0gdrOJJ/AoGtwSu4grG1A3RCqcBHLVLh221bYc8YhdR5lqF/BjGMGq9p1Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485130; c=relaxed/simple; bh=PkEdAGyL9GZv6C343RMX0IGM2zFuHLbvmC+y8ai9FVI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EX5QRDvJ6C/VgreIFZmBHStc8ElbO/Zxoivk8bJBpULhyBf6gT1q84LCTE0MM0pzcfBkNEMoXXs7kKZx55aNSRVAvSxKMRVC4n/fWy74+AfqrSHon7hBLgfwolsFeJx8knU7BVrqTTivRt+ANwow/eHfQmpRspZzU+2rwkNJGxM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VOBs53ik; 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="VOBs53ik" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 82E39C4CEF7; Mon, 6 Apr 2026 14:18:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485129; bh=PkEdAGyL9GZv6C343RMX0IGM2zFuHLbvmC+y8ai9FVI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VOBs53ikh58KE4aiMuMuwW1gJvgV8aj0SmOrUKtK7OTdHxyZ4SEmHNODwIcONaCct aqmmb7j+nZrmNHKCeJWw/Mob1+hU6m5fVkZ2IloLFoWl6xv7ZidJWCXFpKvCeFF6yI b03tgVWhUYt/4YZlMh9KPHw9Oh1wH/ZnTyV5WTIjLEDjSny4+fxWUbrgOeaoyoirYM 2Ais8Akm0dhqTZsQpcxL2QRK+E91pNpkYTT13coPffbu6xWG0xComni7uWnUKp6Zfr PEZg5+x8e598pOjRFQj6MDB6Swho6OFtIDaO5BTmIrDbtYtZzyPdR10M3hoOAJnwpn hzDiz5aCH/5YQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 11/53] selftests/mm: hugetlb-read-hwpoison: use kselftest framework Date: Mon, 6 Apr 2026 17:16:53 +0300 Message-ID: <20260406141735.2179309-12-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Convert hugetlb-read-hwpoison test to use kselftest framework for reporting and tracking successful and failing runs. Signed-off-by: Mike Rapoport (Microsoft) Reviewed-by: Mark Brown --- .../selftests/mm/hugetlb-read-hwpoison.c | 118 +++++++++--------- 1 file changed, 57 insertions(+), 61 deletions(-) diff --git a/tools/testing/selftests/mm/hugetlb-read-hwpoison.c b/tools/tes= ting/selftests/mm/hugetlb-read-hwpoison.c index 6bbf15f78061..01cd5465e0f8 100644 --- a/tools/testing/selftests/mm/hugetlb-read-hwpoison.c +++ b/tools/testing/selftests/mm/hugetlb-read-hwpoison.c @@ -13,9 +13,7 @@ #include =20 #include "kselftest.h" - -#define PREFIX " ... " -#define ERROR_PREFIX " !!! " +#include "vm_util.h" =20 #define MAX_WRITE_READ_CHUNK_SIZE (getpagesize() * 16) #define MAX(a, b) (((a) > (b)) ? (a) : (b)) @@ -26,17 +24,22 @@ enum test_status { TEST_SKIPPED =3D 2, }; =20 -static char *status_to_str(enum test_status status) +static void report_status(enum test_status status, const char *test_name, + size_t chunk_size) { switch (status) { case TEST_PASSED: - return "TEST_PASSED"; + ksft_test_result_pass("%s chunk_size=3D0x%lx\n", + test_name, chunk_size); + break; case TEST_FAILED: - return "TEST_FAILED"; + ksft_test_result_fail("%s chunk_size=3D0x%lx\n", + test_name, chunk_size); + break; case TEST_SKIPPED: - return "TEST_SKIPPED"; - default: - return "TEST_???"; + ksft_test_result_skip("%s chunk_size=3D0x%lx\n", + test_name, chunk_size); + break; } } =20 @@ -59,8 +62,8 @@ static bool verify_chunk(char *buf, size_t len, char val) =20 for (i =3D 0; i < len; ++i) { if (buf[i] !=3D val) { - printf(PREFIX ERROR_PREFIX "check fail: buf[%lu] =3D %u !=3D %u\n", - i, buf[i], val); + ksft_print_msg("check fail: buf[%lu] =3D %u !=3D %u\n", + i, buf[i], val); return false; } } @@ -76,21 +79,21 @@ static bool seek_read_hugepage_filemap(int fd, size_t l= en, size_t wr_chunk_size, ssize_t total_ret_count =3D 0; char val =3D offset / wr_chunk_size + offset % wr_chunk_size; =20 - printf(PREFIX PREFIX "init val=3D%u with offset=3D0x%lx\n", val, offset); - printf(PREFIX PREFIX "expect to read 0x%lx bytes of data in total\n", - expected); + ksft_print_msg("init val=3D%u with offset=3D0x%lx\n", val, offset); + ksft_print_msg("expect to read 0x%lx bytes of data in total\n", + expected); if (lseek(fd, offset, SEEK_SET) < 0) { - perror(PREFIX ERROR_PREFIX "seek failed"); + ksft_perror("seek failed"); return false; } =20 while (offset + total_ret_count < len) { ret_count =3D read(fd, buf, wr_chunk_size); if (ret_count =3D=3D 0) { - printf(PREFIX PREFIX "read reach end of the file\n"); + ksft_print_msg("read reach end of the file\n"); break; } else if (ret_count < 0) { - perror(PREFIX ERROR_PREFIX "read failed"); + ksft_perror("read failed"); break; } ++val; @@ -99,8 +102,8 @@ static bool seek_read_hugepage_filemap(int fd, size_t le= n, size_t wr_chunk_size, =20 total_ret_count +=3D ret_count; } - printf(PREFIX PREFIX "actually read 0x%lx bytes of data in total\n", - total_ret_count); + ksft_print_msg("actually read 0x%lx bytes of data in total\n", + total_ret_count); =20 return total_ret_count =3D=3D expected; } @@ -113,15 +116,15 @@ static bool read_hugepage_filemap(int fd, size_t len, ssize_t total_ret_count =3D 0; char val =3D 0; =20 - printf(PREFIX PREFIX "expect to read 0x%lx bytes of data in total\n", - expected); + ksft_print_msg("expect to read 0x%lx bytes of data in total\n", + expected); while (total_ret_count < len) { ret_count =3D read(fd, buf, wr_chunk_size); if (ret_count =3D=3D 0) { - printf(PREFIX PREFIX "read reach end of the file\n"); + ksft_print_msg("read reach end of the file\n"); break; } else if (ret_count < 0) { - perror(PREFIX ERROR_PREFIX "read failed"); + ksft_perror("read failed"); break; } ++val; @@ -130,8 +133,8 @@ static bool read_hugepage_filemap(int fd, size_t len, =20 total_ret_count +=3D ret_count; } - printf(PREFIX PREFIX "actually read 0x%lx bytes of data in total\n", - total_ret_count); + ksft_print_msg("actually read 0x%lx bytes of data in total\n", + total_ret_count); =20 return total_ret_count =3D=3D expected; } @@ -143,14 +146,14 @@ test_hugetlb_read(int fd, size_t len, size_t wr_chunk= _size) char *filemap =3D NULL; =20 if (ftruncate(fd, len) < 0) { - perror(PREFIX ERROR_PREFIX "ftruncate failed"); + ksft_perror("ftruncate failed"); return status; } =20 filemap =3D mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, fd, 0); if (filemap =3D=3D MAP_FAILED) { - perror(PREFIX ERROR_PREFIX "mmap for primary mapping failed"); + ksft_perror("mmap for primary mapping failed"); goto done; } =20 @@ -163,7 +166,7 @@ test_hugetlb_read(int fd, size_t len, size_t wr_chunk_s= ize) munmap(filemap, len); done: if (ftruncate(fd, 0) < 0) { - perror(PREFIX ERROR_PREFIX "ftruncate back to 0 failed"); + ksft_perror("ftruncate back to 0 failed"); status =3D TEST_FAILED; } =20 @@ -180,14 +183,14 @@ test_hugetlb_read_hwpoison(int fd, size_t len, size_t= wr_chunk_size, const unsigned long pagesize =3D getpagesize(); =20 if (ftruncate(fd, len) < 0) { - perror(PREFIX ERROR_PREFIX "ftruncate failed"); + ksft_perror("ftruncate failed"); return status; } =20 filemap =3D mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, fd, 0); if (filemap =3D=3D MAP_FAILED) { - perror(PREFIX ERROR_PREFIX "mmap for primary mapping failed"); + ksft_perror("mmap for primary mapping failed"); goto done; } =20 @@ -202,7 +205,7 @@ test_hugetlb_read_hwpoison(int fd, size_t len, size_t w= r_chunk_size, */ hwp_addr =3D filemap + len / 2 + pagesize; if (madvise(hwp_addr, pagesize, MADV_HWPOISON) < 0) { - perror(PREFIX ERROR_PREFIX "MADV_HWPOISON failed"); + ksft_perror("MADV_HWPOISON failed"); goto unmap; } =20 @@ -229,7 +232,7 @@ test_hugetlb_read_hwpoison(int fd, size_t len, size_t w= r_chunk_size, munmap(filemap, len); done: if (ftruncate(fd, 0) < 0) { - perror(PREFIX ERROR_PREFIX "ftruncate back to 0 failed"); + ksft_perror("ftruncate back to 0 failed"); status =3D TEST_FAILED; } =20 @@ -242,17 +245,17 @@ static int create_hugetlbfs_file(struct statfs *file_= stat) =20 fd =3D memfd_create("hugetlb_tmp", MFD_HUGETLB); if (fd < 0) { - perror(PREFIX ERROR_PREFIX "could not open hugetlbfs file"); + ksft_perror("could not open hugetlbfs file"); return -1; } =20 memset(file_stat, 0, sizeof(*file_stat)); if (fstatfs(fd, file_stat)) { - perror(PREFIX ERROR_PREFIX "fstatfs failed"); + ksft_perror("fstatfs failed"); goto close; } if (file_stat->f_type !=3D HUGETLBFS_MAGIC) { - printf(PREFIX ERROR_PREFIX "not hugetlbfs file\n"); + ksft_print_msg("not hugetlbfs file\n"); goto close; } =20 @@ -264,7 +267,7 @@ static int create_hugetlbfs_file(struct statfs *file_st= at) =20 static void sigbus_handler(int sig) { - printf(PREFIX "received SIGBUS\n"); + ksft_print_msg("received SIGBUS\n"); } =20 int main(void) @@ -279,51 +282,44 @@ int main(void) }; size_t i; =20 + ksft_print_header(); + ksft_set_plan(ARRAY_SIZE(wr_chunk_sizes) * 3); + signal(SIGBUS, sigbus_handler); for (i =3D 0; i < ARRAY_SIZE(wr_chunk_sizes); ++i) { - printf("Write/read chunk size=3D0x%lx\n", - wr_chunk_sizes[i]); + ksft_print_msg("Write/read chunk size=3D0x%lx\n", + wr_chunk_sizes[i]); =20 fd =3D create_hugetlbfs_file(&file_stat); if (fd < 0) - goto create_failure; - printf(PREFIX "HugeTLB read regression test...\n"); + ksft_exit_fail_msg("Failed to create hugetlbfs file\n"); + status =3D test_hugetlb_read(fd, file_stat.f_bsize, wr_chunk_sizes[i]); - printf(PREFIX "HugeTLB read regression test...%s\n", - status_to_str(status)); close(fd); - if (status =3D=3D TEST_FAILED) - return -1; + report_status(status, "HugeTLB read regression", + wr_chunk_sizes[i]); =20 fd =3D create_hugetlbfs_file(&file_stat); if (fd < 0) - goto create_failure; - printf(PREFIX "HugeTLB read HWPOISON test...\n"); + ksft_exit_fail_msg("Failed to create hugetlbfs file\n"); + status =3D test_hugetlb_read_hwpoison(fd, file_stat.f_bsize, wr_chunk_sizes[i], false); - printf(PREFIX "HugeTLB read HWPOISON test...%s\n", - status_to_str(status)); close(fd); - if (status =3D=3D TEST_FAILED) - return -1; + report_status(status, "HugeTLB read HWPOISON", + wr_chunk_sizes[i]); =20 fd =3D create_hugetlbfs_file(&file_stat); if (fd < 0) - goto create_failure; - printf(PREFIX "HugeTLB seek then read HWPOISON test...\n"); + ksft_exit_fail_msg("Failed to create hugetlbfs file\n"); + status =3D test_hugetlb_read_hwpoison(fd, file_stat.f_bsize, wr_chunk_sizes[i], true); - printf(PREFIX "HugeTLB seek then read HWPOISON test...%s\n", - status_to_str(status)); close(fd); - if (status =3D=3D TEST_FAILED) - return -1; + report_status(status, "HugeTLB seek then read HWPOISON", + wr_chunk_sizes[i]); } =20 - return 0; - -create_failure: - printf(ERROR_PREFIX "Abort test: failed to create hugetlbfs file\n"); - return -1; + ksft_finished(); } --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 A5AEF37E317; Mon, 6 Apr 2026 14:18:55 +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=1775485135; cv=none; b=QDZiADYscCfQIpkcblpwQ3eS7YgJIRbCEnwDpO2jCtxWXpw6orqawRZ36y2KNfkOXoF45MJPSzFU01atuK92D3xXUJ1VGEF2Ebp1YnIHJwD40HHnqx9xqXSzp4g9Sz2jrNDRiqFLp+agRiTMnCcSFLYkAIYnqGZj41rAPBPC7h4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485135; c=relaxed/simple; bh=XhpXuGv3Q2N5RR3SFrfFVeXHJDW2/LrteJ1gRZygmv8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TzKdf0IoGGtyW7cgbAVKC3iK6Zw5BkA/XP+Vv2k++wgB+pN51ftIEr+1DcaolAv7qXQtjvO8gwLA1GhWX3veTP/w7eBbRRJ6dsFw48Wl5zlQGM+hvVfrzOcDXtjFLU2EwvSWcSPkWqSOuU8P9xs16O+9fNb15J5nz29waHqKcTc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=h8nwyTgS; 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="h8nwyTgS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4949DC4CEF7; Mon, 6 Apr 2026 14:18:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485135; bh=XhpXuGv3Q2N5RR3SFrfFVeXHJDW2/LrteJ1gRZygmv8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=h8nwyTgS4YxERVKRIl2J6mmLTYZmy2J2Bl6MhuHG1WEbspQaH44DvdR/FSR5Mk6cl HS87h7FLp3GiprDlQRc/9sdMdVPrrKxpAe3VYkLYonXe4uuGuzOBbCH05LHIgKkt10 OK7cK7inCWzdP4X6KWo2wCweoHTPwbWDayt8COtHN4sckOHDpHgUj/k+IJOrigVjvg KvzFOA2oJJ97uTcnkJJ3HMOfa3qlIsH2qTKozKhqfPJ92xb6fnlt734cy44gfv3/Fl 1N0xyuMkWOaAd8k/SD5sSGUPpgoC3FQ2nzzxKJ2sqnnd9hu+zsDx9SDgaCHgb6tGSE +Ci8c/qpSG5Gg== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 12/53] selftests/mm: khugepaged: group tests in an array Date: Mon, 6 Apr 2026 17:16:54 +0300 Message-ID: <20260406141735.2179309-13-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Currently khugepaged decides if a test can run using TEST() macro that checks what mem_ops and collapse_context are set by the command line arguments. For better compatibility with ksefltest framework, add an array of 'struct test_case's and redefine TEST() macro to conditionally add enabled tests to that array. Then execute the enabled test by looping the test_case's array. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/khugepaged.c | 43 +++++++++++++++++++++---- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selfte= sts/mm/khugepaged.c index e6fb01ca44ed..1cdc5918d20d 100644 --- a/tools/testing/selftests/mm/khugepaged.c +++ b/tools/testing/selftests/mm/khugepaged.c @@ -1161,6 +1161,34 @@ static void parse_test_type(int argc, char **argv) get_finfo(argv[1]); } =20 +typedef void (*test_fn)(struct collapse_context *c, struct mem_ops *ops); + +struct test_case { + struct collapse_context *ctx; + struct mem_ops *ops; + const char *desc; + test_fn fn; +}; + +#define MAX_TEST_CASES 45 +static struct test_case test_cases[MAX_TEST_CASES]; +static int nr_test_cases; + +#define TEST(t, c, o) do { \ + if (c && o) { \ + if (nr_test_cases >=3D MAX_TEST_CASES) { \ + printf("MAX_ADD_CASES is too small\n"); \ + exit(EXIT_FAILURE); \ + } \ + test_cases[nr_test_cases++] =3D (struct test_case){ \ + .ctx =3D c, \ + .ops =3D o, \ + .desc =3D #t, \ + .fn =3D t, \ + }; \ + } \ + } while (0) + int main(int argc, char **argv) { int hpage_pmd_order; @@ -1216,13 +1244,6 @@ int main(int argc, char **argv) =20 alloc_at_fault(); =20 -#define TEST(t, c, o) do { \ - if (c && o) { \ - printf("\nRun test: " #t " (%s:%s)\n", c->name, o->name); \ - t(c, o); \ - } \ - } while (0) - TEST(collapse_full, khugepaged_context, anon_ops); TEST(collapse_full, khugepaged_context, file_ops); TEST(collapse_full, khugepaged_context, shmem_ops); @@ -1284,5 +1305,13 @@ int main(int argc, char **argv) TEST(madvise_retracted_page_tables, madvise_context, file_ops); TEST(madvise_retracted_page_tables, madvise_context, shmem_ops); =20 + for (int i =3D 0; i < nr_test_cases; i++) { + struct test_case *t =3D &test_cases[i]; + + exit_status =3D KSFT_PASS; + printf("\nRun test: %s: (%s:%s)\n", t->desc, t->ctx->name, t->ops->name); + t->fn(t->ctx, t->ops); + } + restore_settings(0); } --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 0C4CB37DEAF; Mon, 6 Apr 2026 14:19:02 +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=1775485142; cv=none; b=q7zgAOeGhQ9U3Zyr07QdA7Hg3O+dKJFlTdkE5DHuDckAU/C/GuBEapE+NMN/49IgVrFqoLhGGtsaZI1uXgXvwaXQoRMsLvF+D0voE2C7EnxD4aNRoL60lyWJ/4yAnXNsYEFBO1h39et6UspS3SZQAdfBkirLAPatzCtvDEHrP5I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485142; c=relaxed/simple; bh=3liRXUIFUz9n65f+n+Or24v8rdV/4o7aDYWf06s6EyA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IkQcrvecocGInJIHgPc0TJobSDWJo5Hk9oyghFhYgMEBfTZqnY538SAIoiS3ThcyBePDrVs8q48HDIGJ0wZp3ndfMg3PTatxIcIQ4xZ9B7Hhbyv+X70ydqm2s8CVPOejXzRz84FYdLt5zwy8hJ/9ZnmdgpBxU4u6PQ8TnZ5yNko= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=p/L0QOaC; 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="p/L0QOaC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 13773C2BCAF; Mon, 6 Apr 2026 14:18:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485141; bh=3liRXUIFUz9n65f+n+Or24v8rdV/4o7aDYWf06s6EyA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=p/L0QOaChgtYNGGGjBHkfPkpgDh9tmjAAB0UmMJpCIRjUv++1eHWBllc1krFEXyw+ tWz5a54s3+8CUeTua6r9AZRhg9+j2ZmrGuVA2E2hSfw+Vl8mfopYnJzKJAtJuy0PNx uLJo1BZiOQOAhDGmvPH96KeNfuARLx55SPrY33zYqdaB3MdTU1/iRMV65gFDEeBIHl Jpy5DPolir57c+n8pFxpQevYrlhREO6HgKNgrKflqH3Uu82nLHP+kP7GHDs+1JaiSf wwZsY4G8PvvU9ReGETuI0Ab5oztnlJPPmu3g9M4F3S16MtGC0VdwJKT0ZDumfZcKjk LdMx0eTwdBorA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 13/53] selftests/mm: khugepaged: use ksefltest framework Date: Mon, 6 Apr 2026 17:16:55 +0300 Message-ID: <20260406141735.2179309-14-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Convert khugepaged tests to use kselftest framework for reporting and tracking successful and failing runs. The conversion is mostly about replacing printf()/perror() + exit() pairs with their ksft_ counterparts. The nice colored success and failure indications are left intact. Replace the progress report in collapse_compound_extreme() with a single ksft_print_msg() to avoid headache with formatting and make the test output more concise. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/khugepaged.c | 311 ++++++++++-------------- 1 file changed, 128 insertions(+), 183 deletions(-) diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selfte= sts/mm/khugepaged.c index 1cdc5918d20d..ba0a9e14e600 100644 --- a/tools/testing/selftests/mm/khugepaged.c +++ b/tools/testing/selftests/mm/khugepaged.c @@ -83,12 +83,13 @@ static void success(const char *msg) static void fail(const char *msg) { printf(" \e[31m%s\e[0m\n", msg); - exit_status++; + exit_status =3D KSFT_FAIL; } =20 static void skip(const char *msg) { printf(" \e[33m%s\e[0m\n", msg); + exit_status =3D KSFT_SKIP; } =20 static void restore_settings_atexit(void) @@ -96,22 +97,23 @@ static void restore_settings_atexit(void) if (skip_settings_restore) return; =20 - printf("Restore THP and khugepaged settings..."); + ksft_print_msg("Restore THP and khugepaged settings..."); thp_restore_settings(); success("OK"); =20 skip_settings_restore =3D true; + ksft_finished(); } =20 static void restore_settings(int sig) { /* exit() will invoke the restore_settings_atexit handler. */ - exit(sig ? EXIT_FAILURE : exit_status); + exit(sig ? KSFT_FAIL : exit_status); } =20 static void save_settings(void) { - printf("Save THP and khugepaged settings..."); + ksft_print_msg("Save THP and khugepaged settings..."); if (file_ops && finfo.type =3D=3D VMA_FILE) thp_set_read_ahead_path(finfo.dev_queue_read_ahead_path); thp_save_settings(); @@ -135,19 +137,13 @@ static void get_finfo(const char *dir) =20 finfo.dir =3D dir; stat(finfo.dir, &path_stat); - if (!S_ISDIR(path_stat.st_mode)) { - printf("%s: Not a directory (%s)\n", __func__, finfo.dir); - exit(EXIT_FAILURE); - } + if (!S_ISDIR(path_stat.st_mode)) + ksft_exit_fail_msg("%s: Not a directory (%s)\n", __func__, finfo.dir); if (snprintf(finfo.path, sizeof(finfo.path), "%s/" TEST_FILE, - finfo.dir) >=3D sizeof(finfo.path)) { - printf("%s: Pathname is too long\n", __func__); - exit(EXIT_FAILURE); - } - if (statfs(finfo.dir, &fs)) { - perror("statfs()"); - exit(EXIT_FAILURE); - } + finfo.dir) >=3D sizeof(finfo.path)) + ksft_exit_fail_msg("%s: Pathname is too long\n", __func__); + if (statfs(finfo.dir, &fs)) + ksft_exit_fail_perror("statfs()"); finfo.type =3D fs.f_type =3D=3D TMPFS_MAGIC ? VMA_SHMEM : VMA_FILE; if (finfo.type =3D=3D VMA_SHMEM) return; @@ -155,40 +151,30 @@ static void get_finfo(const char *dir) /* Find owning device's queue/read_ahead_kb control */ if (snprintf(path, sizeof(path), "/sys/dev/block/%d:%d/uevent", major(path_stat.st_dev), minor(path_stat.st_dev)) - >=3D sizeof(path)) { - printf("%s: Pathname is too long\n", __func__); - exit(EXIT_FAILURE); - } - if (read_file(path, buf, sizeof(buf)) < 0) { - perror("read_file(read_num)"); - exit(EXIT_FAILURE); - } + >=3D sizeof(path)) + ksft_exit_fail_msg("%s: Pathname is too long\n", __func__); + if (read_file(path, buf, sizeof(buf)) < 0) + ksft_exit_fail_perror("read_file(read_num)"); if (strstr(buf, "DEVTYPE=3Ddisk")) { /* Found it */ if (snprintf(finfo.dev_queue_read_ahead_path, sizeof(finfo.dev_queue_read_ahead_path), "/sys/dev/block/%d:%d/queue/read_ahead_kb", major(path_stat.st_dev), minor(path_stat.st_dev)) - >=3D sizeof(finfo.dev_queue_read_ahead_path)) { - printf("%s: Pathname is too long\n", __func__); - exit(EXIT_FAILURE); - } + >=3D sizeof(finfo.dev_queue_read_ahead_path)) + ksft_exit_fail_msg("%s: Pathname is too long\n", __func__); return; } - if (!strstr(buf, "DEVTYPE=3Dpartition")) { - printf("%s: Unknown device type: %s\n", __func__, path); - exit(EXIT_FAILURE); - } + if (!strstr(buf, "DEVTYPE=3Dpartition")) + ksft_exit_fail_msg("%s: Unknown device type: %s\n", __func__, path); /* * Partition of block device - need to find actual device. * Using naming convention that devnameN is partition of * device devname. */ str =3D strstr(buf, "DEVNAME=3D"); - if (!str) { - printf("%s: Could not read: %s", __func__, path); - exit(EXIT_FAILURE); - } + if (!str) + ksft_exit_fail_msg("%s: Could not read: %s", __func__, path); str +=3D 8; end =3D str; while (*end) { @@ -197,16 +183,13 @@ static void get_finfo(const char *dir) if (snprintf(finfo.dev_queue_read_ahead_path, sizeof(finfo.dev_queue_read_ahead_path), "/sys/block/%s/queue/read_ahead_kb", - str) >=3D sizeof(finfo.dev_queue_read_ahead_path)) { - printf("%s: Pathname is too long\n", __func__); - exit(EXIT_FAILURE); - } + str) >=3D sizeof(finfo.dev_queue_read_ahead_path)) + ksft_exit_fail_msg("%s: Pathname is too long\n", __func__); return; } ++end; } - printf("%s: Could not read: %s\n", __func__, path); - exit(EXIT_FAILURE); + ksft_exit_fail_msg("%s: Could not read: %s\n", __func__, path); } =20 static bool check_swap(void *addr, unsigned long size) @@ -219,26 +202,19 @@ static bool check_swap(void *addr, unsigned long size) =20 ret =3D snprintf(addr_pattern, MAX_LINE_LENGTH, "%08lx-", (unsigned long) addr); - if (ret >=3D MAX_LINE_LENGTH) { - printf("%s: Pattern is too long\n", __func__); - exit(EXIT_FAILURE); - } - + if (ret >=3D MAX_LINE_LENGTH) + ksft_exit_fail_msg("%s: Pattern is too long\n", __func__); =20 fp =3D fopen(PID_SMAPS, "r"); - if (!fp) { - printf("%s: Failed to open file %s\n", __func__, PID_SMAPS); - exit(EXIT_FAILURE); - } + if (!fp) + ksft_exit_fail_msg("%s: Failed to open file %s\n", __func__, PID_SMAPS); if (!check_for_pattern(fp, addr_pattern, buffer, sizeof(buffer))) goto err_out; =20 ret =3D snprintf(addr_pattern, MAX_LINE_LENGTH, "Swap:%19ld kB", size >> 10); - if (ret >=3D MAX_LINE_LENGTH) { - printf("%s: Pattern is too long\n", __func__); - exit(EXIT_FAILURE); - } + if (ret >=3D MAX_LINE_LENGTH) + ksft_exit_fail_msg("%s: Pattern is too long\n", __func__); /* * Fetch the Swap: in the same block and check whether it got * the expected number of hugeepages next. @@ -261,10 +237,8 @@ static void *alloc_mapping(int nr) =20 p =3D mmap(BASE_ADDR, nr * hpage_pmd_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); - if (p !=3D BASE_ADDR) { - printf("Failed to allocate VMA at %p\n", BASE_ADDR); - exit(EXIT_FAILURE); - } + if (p !=3D BASE_ADDR) + ksft_exit_fail_msg("Failed to allocate VMA at %p\n", BASE_ADDR); =20 return p; } @@ -314,19 +288,13 @@ static void *alloc_hpage(struct mem_ops *ops) * khugepaged on low-load system (like a test machine), which * would cause MADV_COLLAPSE to fail with EAGAIN. */ - printf("Allocate huge page..."); - if (madvise_collapse_retry(p, hpage_pmd_size)) { - perror("madvise(MADV_COLLAPSE)"); - exit(EXIT_FAILURE); - } - if (!ops->check_huge(p, 1)) { - perror("madvise(MADV_COLLAPSE)"); - exit(EXIT_FAILURE); - } - if (madvise(p, hpage_pmd_size, MADV_HUGEPAGE)) { - perror("madvise(MADV_HUGEPAGE)"); - exit(EXIT_FAILURE); - } + ksft_print_msg("Allocate huge page..."); + if (madvise_collapse_retry(p, hpage_pmd_size)) + ksft_exit_fail_perror("madvise(MADV_COLLAPSE)"); + if (!ops->check_huge(p, 1)) + ksft_exit_fail_perror("madvise(MADV_COLLAPSE)"); + if (madvise(p, hpage_pmd_size, MADV_HUGEPAGE)) + ksft_exit_fail_perror("madvise(MADV_HUGEPAGE)"); success("OK"); return p; } @@ -336,11 +304,9 @@ static void validate_memory(int *p, unsigned long star= t, unsigned long end) int i; =20 for (i =3D start / page_size; i < end / page_size; i++) { - if (p[i * page_size / sizeof(*p)] !=3D i + 0xdead0000) { - printf("Page %d is corrupted: %#x\n", - i, p[i * page_size / sizeof(*p)]); - exit(EXIT_FAILURE); - } + if (p[i * page_size / sizeof(*p)] !=3D i + 0xdead0000) + ksft_exit_fail_msg("Page %d is corrupted: %#x\n", + i, p[i * page_size / sizeof(*p)]); } } =20 @@ -371,14 +337,12 @@ static void *file_setup_area(int nr_hpages) unsigned long size; =20 unlink(finfo.path); /* Cleanup from previous failed tests */ - printf("Creating %s for collapse%s...", finfo.path, - finfo.type =3D=3D VMA_SHMEM ? " (tmpfs)" : ""); + ksft_print_msg("Creating %s for collapse%s...", finfo.path, + finfo.type =3D=3D VMA_SHMEM ? " (tmpfs)" : ""); fd =3D open(finfo.path, O_DSYNC | O_CREAT | O_RDWR | O_TRUNC | O_EXCL, 777); - if (fd < 0) { - perror("open()"); - exit(EXIT_FAILURE); - } + if (fd < 0) + ksft_exit_fail_perror("open()"); =20 size =3D nr_hpages * hpage_pmd_size; p =3D alloc_mapping(nr_hpages); @@ -388,18 +352,14 @@ static void *file_setup_area(int nr_hpages) munmap(p, size); success("OK"); =20 - printf("Opening %s read only for collapse...", finfo.path); + ksft_print_msg("Opening %s read only for collapse...", finfo.path); finfo.fd =3D open(finfo.path, O_RDONLY, 777); - if (finfo.fd < 0) { - perror("open()"); - exit(EXIT_FAILURE); - } + if (finfo.fd < 0) + ksft_exit_fail_perror("open()"); p =3D mmap(BASE_ADDR, size, PROT_READ, MAP_PRIVATE, finfo.fd, 0); - if (p =3D=3D MAP_FAILED || p !=3D BASE_ADDR) { - perror("mmap()"); - exit(EXIT_FAILURE); - } + if (p =3D=3D MAP_FAILED || p !=3D BASE_ADDR) + ksft_exit_fail_perror("mmap()"); =20 /* Drop page cache */ write_file("/proc/sys/vm/drop_caches", "3", 2); @@ -416,10 +376,8 @@ static void file_cleanup_area(void *p, unsigned long s= ize) =20 static void file_fault(void *p, unsigned long start, unsigned long end) { - if (madvise(((char *)p) + start, end - start, MADV_POPULATE_READ)) { - perror("madvise(MADV_POPULATE_READ"); - exit(EXIT_FAILURE); - } + if (madvise(((char *)p) + start, end - start, MADV_POPULATE_READ)) + ksft_exit_fail_perror("madvise(MADV_POPULATE_READ"); } =20 static bool file_check_huge(void *addr, int nr_hpages) @@ -441,20 +399,14 @@ static void *shmem_setup_area(int nr_hpages) unsigned long size =3D nr_hpages * hpage_pmd_size; =20 finfo.fd =3D memfd_create("khugepaged-selftest-collapse-shmem", 0); - if (finfo.fd < 0) { - perror("memfd_create()"); - exit(EXIT_FAILURE); - } - if (ftruncate(finfo.fd, size)) { - perror("ftruncate()"); - exit(EXIT_FAILURE); - } + if (finfo.fd < 0) + ksft_exit_fail_perror("memfd_create()"); + if (ftruncate(finfo.fd, size)) + ksft_exit_fail_perror("ftruncate()"); p =3D mmap(BASE_ADDR, size, PROT_READ | PROT_WRITE, MAP_SHARED, finfo.fd, 0); - if (p !=3D BASE_ADDR) { - perror("mmap()"); - exit(EXIT_FAILURE); - } + if (p !=3D BASE_ADDR) + ksft_exit_fail_perror("mmap()"); return p; } =20 @@ -499,7 +451,7 @@ static void __madvise_collapse(const char *msg, char *p= , int nr_hpages, int ret; struct thp_settings settings =3D *thp_current_settings(); =20 - printf("%s...", msg); + ksft_print_msg("%s...", msg); =20 /* * Prevent khugepaged interference and tests that MADV_COLLAPSE @@ -526,10 +478,8 @@ static void madvise_collapse(const char *msg, char *p,= int nr_hpages, struct mem_ops *ops, bool expect) { /* Sanity check */ - if (!ops->check_huge(p, 0)) { - printf("Unexpected huge page\n"); - exit(EXIT_FAILURE); - } + if (!ops->check_huge(p, 0)) + ksft_exit_fail_msg("Unexpected huge page\n"); __madvise_collapse(msg, p, nr_hpages, ops, expect); } =20 @@ -541,17 +491,15 @@ static bool wait_for_scan(const char *msg, char *p, i= nt nr_hpages, int timeout =3D 6; /* 3 seconds */ =20 /* Sanity check */ - if (!ops->check_huge(p, 0)) { - printf("Unexpected huge page\n"); - exit(EXIT_FAILURE); - } + if (!ops->check_huge(p, 0)) + ksft_exit_fail_msg("Unexpected huge page\n"); =20 madvise(p, nr_hpages * hpage_pmd_size, MADV_HUGEPAGE); =20 /* Wait until the second full_scan completed */ full_scans =3D thp_read_num("khugepaged/full_scans") + 2; =20 - printf("%s...", msg); + ksft_print_msg("%s...", msg); while (timeout--) { if (ops->check_huge(p, nr_hpages)) break; @@ -621,7 +569,7 @@ static void alloc_at_fault(void) =20 p =3D alloc_mapping(1); *p =3D 1; - printf("Allocate huge page on fault..."); + ksft_print_msg("Allocate huge page on fault..."); if (check_huge_anon(p, 1, hpage_pmd_size)) success("OK"); else @@ -630,12 +578,14 @@ static void alloc_at_fault(void) thp_pop_settings(); =20 madvise(p, page_size, MADV_DONTNEED); - printf("Split huge PMD on MADV_DONTNEED..."); + ksft_print_msg("Split huge PMD on MADV_DONTNEED..."); if (check_huge_anon(p, 0, hpage_pmd_size)) success("OK"); else fail("Fail"); munmap(p, hpage_pmd_size); + + ksft_test_result_report(exit_status, "allocate on fault and split\n"); } =20 static void collapse_full(struct collapse_context *c, struct mem_ops *ops) @@ -650,6 +600,8 @@ static void collapse_full(struct collapse_context *c, s= truct mem_ops *ops) ops, true); validate_memory(p, 0, size); ops->cleanup_area(p, size); + + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void collapse_empty(struct collapse_context *c, struct mem_ops *ops) @@ -659,6 +611,7 @@ static void collapse_empty(struct collapse_context *c, = struct mem_ops *ops) p =3D ops->setup_area(1); c->collapse("Do not collapse empty PTE table", p, 1, ops, false); ops->cleanup_area(p, hpage_pmd_size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void collapse_single_pte_entry(struct collapse_context *c, struct m= em_ops *ops) @@ -670,6 +623,7 @@ static void collapse_single_pte_entry(struct collapse_c= ontext *c, struct mem_ops c->collapse("Collapse PTE table with single PTE entry present", p, 1, ops, true); ops->cleanup_area(p, hpage_pmd_size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void collapse_max_ptes_none(struct collapse_context *c, struct mem_= ops *ops) @@ -706,6 +660,7 @@ static void collapse_max_ptes_none(struct collapse_cont= ext *c, struct mem_ops *o skip: ops->cleanup_area(p, hpage_pmd_size); thp_pop_settings(); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void collapse_swapin_single_pte(struct collapse_context *c, struct = mem_ops *ops) @@ -715,11 +670,9 @@ static void collapse_swapin_single_pte(struct collapse= _context *c, struct mem_op p =3D ops->setup_area(1); ops->fault(p, 0, hpage_pmd_size); =20 - printf("Swapout one page..."); - if (madvise(p, page_size, MADV_PAGEOUT)) { - perror("madvise(MADV_PAGEOUT)"); - exit(EXIT_FAILURE); - } + ksft_print_msg("Swapout one page..."); + if (madvise(p, page_size, MADV_PAGEOUT)) + ksft_exit_fail_perror("madvise(MADV_PAGEOUT)"); if (check_swap(p, page_size)) { success("OK"); } else { @@ -732,6 +685,7 @@ static void collapse_swapin_single_pte(struct collapse_= context *c, struct mem_op validate_memory(p, 0, hpage_pmd_size); out: ops->cleanup_area(p, hpage_pmd_size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void collapse_max_ptes_swap(struct collapse_context *c, struct mem_= ops *ops) @@ -742,11 +696,9 @@ static void collapse_max_ptes_swap(struct collapse_con= text *c, struct mem_ops *o p =3D ops->setup_area(1); ops->fault(p, 0, hpage_pmd_size); =20 - printf("Swapout %d of %d pages...", max_ptes_swap + 1, hpage_pmd_nr); - if (madvise(p, (max_ptes_swap + 1) * page_size, MADV_PAGEOUT)) { - perror("madvise(MADV_PAGEOUT)"); - exit(EXIT_FAILURE); - } + ksft_print_msg("Swapout %d of %d pages...", max_ptes_swap + 1, hpage_pmd_= nr); + if (madvise(p, (max_ptes_swap + 1) * page_size, MADV_PAGEOUT)) + ksft_exit_fail_perror("madvise(MADV_PAGEOUT)"); if (check_swap(p, (max_ptes_swap + 1) * page_size)) { success("OK"); } else { @@ -760,12 +712,10 @@ static void collapse_max_ptes_swap(struct collapse_co= ntext *c, struct mem_ops *o =20 if (c->enforce_pte_scan_limits) { ops->fault(p, 0, hpage_pmd_size); - printf("Swapout %d of %d pages...", max_ptes_swap, + ksft_print_msg("Swapout %d of %d pages...", max_ptes_swap, hpage_pmd_nr); - if (madvise(p, max_ptes_swap * page_size, MADV_PAGEOUT)) { - perror("madvise(MADV_PAGEOUT)"); - exit(EXIT_FAILURE); - } + if (madvise(p, max_ptes_swap * page_size, MADV_PAGEOUT)) + ksft_exit_fail_perror("madvise(MADV_PAGEOUT)"); if (check_swap(p, max_ptes_swap * page_size)) { success("OK"); } else { @@ -779,6 +729,7 @@ static void collapse_max_ptes_swap(struct collapse_cont= ext *c, struct mem_ops *o } out: ops->cleanup_area(p, hpage_pmd_size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void collapse_single_pte_entry_compound(struct collapse_context *c,= struct mem_ops *ops) @@ -792,7 +743,7 @@ static void collapse_single_pte_entry_compound(struct c= ollapse_context *c, struc advise =3D MADV_REMOVE; =20 madvise(p, hpage_pmd_size, MADV_NOHUGEPAGE); - printf("Split huge page leaving single PTE mapping compound page..."); + ksft_print_msg("Split huge page leaving single PTE mapping compound page.= .."); madvise(p + page_size, hpage_pmd_size - page_size, advise); if (ops->check_huge(p, 0)) success("OK"); @@ -803,6 +754,7 @@ static void collapse_single_pte_entry_compound(struct c= ollapse_context *c, struc p, 1, ops, true); validate_memory(p, 0, page_size); ops->cleanup_area(p, hpage_pmd_size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void collapse_full_of_compound(struct collapse_context *c, struct m= em_ops *ops) @@ -810,7 +762,7 @@ static void collapse_full_of_compound(struct collapse_c= ontext *c, struct mem_ops void *p; =20 p =3D alloc_hpage(ops); - printf("Split huge page leaving single PTE page table full of compound pa= ges..."); + ksft_print_msg("Split huge page leaving single PTE page table full of com= pound pages..."); madvise(p, page_size, MADV_NOHUGEPAGE); madvise(p, hpage_pmd_size, MADV_NOHUGEPAGE); if (ops->check_huge(p, 0)) @@ -822,6 +774,7 @@ static void collapse_full_of_compound(struct collapse_c= ontext *c, struct mem_ops true); validate_memory(p, 0, hpage_pmd_size); ops->cleanup_area(p, hpage_pmd_size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void collapse_compound_extreme(struct collapse_context *c, struct m= em_ops *ops) @@ -830,16 +783,12 @@ static void collapse_compound_extreme(struct collapse= _context *c, struct mem_ops int i; =20 p =3D ops->setup_area(1); + ksft_print_msg("Construct PTE page table full of different PTE-mapped com= pound pagesd\n"); for (i =3D 0; i < hpage_pmd_nr; i++) { - printf("\rConstruct PTE page table full of different PTE-mapped compound= pages %3d/%d...", - i + 1, hpage_pmd_nr); - madvise(BASE_ADDR, hpage_pmd_size, MADV_HUGEPAGE); ops->fault(BASE_ADDR, 0, hpage_pmd_size); - if (!ops->check_huge(BASE_ADDR, 1)) { - printf("Failed to allocate huge page\n"); - exit(EXIT_FAILURE); - } + if (!ops->check_huge(BASE_ADDR, 1)) + ksft_exit_fail_msg("Failed to allocate huge page\n"); madvise(BASE_ADDR, hpage_pmd_size, MADV_NOHUGEPAGE); =20 p =3D mremap(BASE_ADDR - i * page_size, @@ -847,20 +796,16 @@ static void collapse_compound_extreme(struct collapse= _context *c, struct mem_ops (i + 1) * page_size, MREMAP_MAYMOVE | MREMAP_FIXED, BASE_ADDR + 2 * hpage_pmd_size); - if (p =3D=3D MAP_FAILED) { - perror("mremap+unmap"); - exit(EXIT_FAILURE); - } + if (p =3D=3D MAP_FAILED) + ksft_exit_fail_perror("mremap+unmap"); =20 p =3D mremap(BASE_ADDR + 2 * hpage_pmd_size, (i + 1) * page_size, (i + 1) * page_size + hpage_pmd_size, MREMAP_MAYMOVE | MREMAP_FIXED, BASE_ADDR - (i + 1) * page_size); - if (p =3D=3D MAP_FAILED) { - perror("mremap+alloc"); - exit(EXIT_FAILURE); - } + if (p =3D=3D MAP_FAILED) + ksft_exit_fail_perror("mremap+alloc"); } =20 ops->cleanup_area(BASE_ADDR, hpage_pmd_size); @@ -875,6 +820,7 @@ static void collapse_compound_extreme(struct collapse_c= ontext *c, struct mem_ops =20 validate_memory(p, 0, hpage_pmd_size); ops->cleanup_area(p, hpage_pmd_size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void collapse_fork(struct collapse_context *c, struct mem_ops *ops) @@ -884,18 +830,17 @@ static void collapse_fork(struct collapse_context *c,= struct mem_ops *ops) =20 p =3D ops->setup_area(1); =20 - printf("Allocate small page..."); + ksft_print_msg("Allocate small page..."); ops->fault(p, 0, page_size); if (ops->check_huge(p, 0)) success("OK"); else fail("Fail"); =20 - printf("Share small page over fork()..."); + ksft_print_msg("Share small page over fork()..."); if (!fork()) { /* Do not touch settings on child exit */ skip_settings_restore =3D true; - exit_status =3D 0; =20 if (ops->check_huge(p, 0)) success("OK"); @@ -912,15 +857,16 @@ static void collapse_fork(struct collapse_context *c,= struct mem_ops *ops) } =20 wait(&wstatus); - exit_status +=3D WEXITSTATUS(wstatus); + exit_status =3D WEXITSTATUS(wstatus); =20 - printf("Check if parent still has small page..."); + ksft_print_msg("Check if parent still has small page..."); if (ops->check_huge(p, 0)) success("OK"); else fail("Fail"); validate_memory(p, 0, page_size); ops->cleanup_area(p, hpage_pmd_size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void collapse_fork_compound(struct collapse_context *c, struct mem_= ops *ops) @@ -929,18 +875,17 @@ static void collapse_fork_compound(struct collapse_co= ntext *c, struct mem_ops *o void *p; =20 p =3D alloc_hpage(ops); - printf("Share huge page over fork()..."); + ksft_print_msg("Share huge page over fork()..."); if (!fork()) { /* Do not touch settings on child exit */ skip_settings_restore =3D true; - exit_status =3D 0; =20 if (ops->check_huge(p, 1)) success("OK"); else fail("Fail"); =20 - printf("Split huge page PMD in child process..."); + ksft_print_msg("Split huge page PMD in child process..."); madvise(p, page_size, MADV_NOHUGEPAGE); madvise(p, hpage_pmd_size, MADV_NOHUGEPAGE); if (ops->check_huge(p, 0)) @@ -961,15 +906,16 @@ static void collapse_fork_compound(struct collapse_co= ntext *c, struct mem_ops *o } =20 wait(&wstatus); - exit_status +=3D WEXITSTATUS(wstatus); + exit_status =3D WEXITSTATUS(wstatus); =20 - printf("Check if parent still has huge page..."); + ksft_print_msg("Check if parent still has huge page..."); if (ops->check_huge(p, 1)) success("OK"); else fail("Fail"); validate_memory(p, 0, hpage_pmd_size); ops->cleanup_area(p, hpage_pmd_size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void collapse_max_ptes_shared(struct collapse_context *c, struct me= m_ops *ops) @@ -979,18 +925,17 @@ static void collapse_max_ptes_shared(struct collapse_= context *c, struct mem_ops void *p; =20 p =3D alloc_hpage(ops); - printf("Share huge page over fork()..."); + ksft_print_msg("Share huge page over fork()..."); if (!fork()) { /* Do not touch settings on child exit */ skip_settings_restore =3D true; - exit_status =3D 0; =20 if (ops->check_huge(p, 1)) success("OK"); else fail("Fail"); =20 - printf("Trigger CoW on page %d of %d...", + ksft_print_msg("Trigger CoW on page %d of %d...", hpage_pmd_nr - max_ptes_shared - 1, hpage_pmd_nr); ops->fault(p, 0, (hpage_pmd_nr - max_ptes_shared - 1) * page_size); if (ops->check_huge(p, 0)) @@ -1002,7 +947,7 @@ static void collapse_max_ptes_shared(struct collapse_c= ontext *c, struct mem_ops 1, ops, !c->enforce_pte_scan_limits); =20 if (c->enforce_pte_scan_limits) { - printf("Trigger CoW on page %d of %d...", + ksft_print_msg("Trigger CoW on page %d of %d...", hpage_pmd_nr - max_ptes_shared, hpage_pmd_nr); ops->fault(p, 0, (hpage_pmd_nr - max_ptes_shared) * page_size); @@ -1021,15 +966,16 @@ static void collapse_max_ptes_shared(struct collapse= _context *c, struct mem_ops } =20 wait(&wstatus); - exit_status +=3D WEXITSTATUS(wstatus); + exit_status =3D WEXITSTATUS(wstatus); =20 - printf("Check if parent still has huge page..."); + ksft_print_msg("Check if parent still has huge page..."); if (ops->check_huge(p, 1)) success("OK"); else fail("Fail"); validate_memory(p, 0, hpage_pmd_size); ops->cleanup_area(p, hpage_pmd_size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void madvise_collapse_existing_thps(struct collapse_context *c, @@ -1046,6 +992,7 @@ static void madvise_collapse_existing_thps(struct coll= apse_context *c, __madvise_collapse("Re-collapse PMD-mapped hugepage", p, 1, ops, true); validate_memory(p, 0, hpage_pmd_size); ops->cleanup_area(p, hpage_pmd_size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 /* @@ -1073,6 +1020,7 @@ static void madvise_retracted_page_tables(struct coll= apse_context *c, true); validate_memory(p, 0, size); ops->cleanup_area(p, size); + ksft_test_result_report(exit_status, "%s\n", __func__); } =20 static void usage(void) @@ -1176,10 +1124,8 @@ static int nr_test_cases; =20 #define TEST(t, c, o) do { \ if (c && o) { \ - if (nr_test_cases >=3D MAX_TEST_CASES) { \ - printf("MAX_ADD_CASES is too small\n"); \ - exit(EXIT_FAILURE); \ - } \ + if (nr_test_cases >=3D MAX_TEST_CASES) \ + ksft_exit_fail_msg("MAX_ADD_CASES is too small\n"); \ test_cases[nr_test_cases++] =3D (struct test_case){ \ .ctx =3D c, \ .ops =3D o, \ @@ -1212,10 +1158,10 @@ int main(int argc, char **argv) .read_ahead_kb =3D 0, }; =20 - if (!thp_is_enabled()) { - printf("Transparent Hugepages not available\n"); - return KSFT_SKIP; - } + ksft_print_header(); + + if (!thp_is_enabled()) + ksft_exit_skip("Transparent Hugepages not available\n"); =20 parse_test_type(argc, argv); =20 @@ -1223,10 +1169,8 @@ int main(int argc, char **argv) =20 page_size =3D getpagesize(); hpage_pmd_size =3D read_pmd_pagesize(); - if (!hpage_pmd_size) { - printf("Reading PMD pagesize failed"); - exit(EXIT_FAILURE); - } + if (!hpage_pmd_size) + ksft_exit_fail_msg("Reading PMD pagesize failed\n"); hpage_pmd_nr =3D hpage_pmd_size / page_size; hpage_pmd_order =3D __builtin_ctz(hpage_pmd_nr); =20 @@ -1242,8 +1186,6 @@ int main(int argc, char **argv) save_settings(); thp_push_settings(&default_settings); =20 - alloc_at_fault(); - TEST(collapse_full, khugepaged_context, anon_ops); TEST(collapse_full, khugepaged_context, file_ops); TEST(collapse_full, khugepaged_context, shmem_ops); @@ -1305,11 +1247,14 @@ int main(int argc, char **argv) TEST(madvise_retracted_page_tables, madvise_context, file_ops); TEST(madvise_retracted_page_tables, madvise_context, shmem_ops); =20 + ksft_set_plan(nr_test_cases + 1); + + alloc_at_fault(); for (int i =3D 0; i < nr_test_cases; i++) { struct test_case *t =3D &test_cases[i]; =20 exit_status =3D KSFT_PASS; - printf("\nRun test: %s: (%s:%s)\n", t->desc, t->ctx->name, t->ops->name); + ksft_print_msg("\nRun test: %s: (%s:%s)\n", t->desc, t->ctx->name, t->op= s->name); t->fn(t->ctx, t->ops); } =20 --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 1ACE72F5A12; Mon, 6 Apr 2026 14:19:07 +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=1775485148; cv=none; b=J8DRhwXHkSIMHFz9fUkO2xavl4KPaRhUMKhwW9mgxX6USNbudkH3n0H54Yj1OcfLZIU9Sob5gmC5wQCv4bfTMDKjrQ726X6csdYENBD3sR5TMziGV6AsLFK28syk/PH4KgdY6/wTS0jl7KX8JCj5Dh20c4rkjBMBwT9dP+Lx2r0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485148; c=relaxed/simple; bh=piQz9jvPmYw4jyeiK5frLuCZf5HWY2aasCM1o0CbKSI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eQgTS/BgkkhCVA+TarHBn4VU6OPjwdlahtpAD6lmxN2/UdHbptDr9kdIzHf+zXWbDhDR8F4VZbfbmCWED8itr7PEMV5eKWaAf2D3Wv6YJpYtANbdL7NXgDORg1yYDuHFtySQpIpPbWsNIV4QDkmInsf3wJVj5fd6PjBVaTXpDIw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=m9NrRt75; 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="m9NrRt75" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 61109C2BCB1; Mon, 6 Apr 2026 14:19:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485147; bh=piQz9jvPmYw4jyeiK5frLuCZf5HWY2aasCM1o0CbKSI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=m9NrRt75NYCAG0EexjEUS7/E6ljn43tKX1qkWLaCwrfv3f0aNPVa/GpWLEDPbTUxM Lr215zBk9Re5NtLF6royAE0dQIUqTRUdHmiBeSBR4k8Vz9U6cLNUFAz6fmNxZSZIwS hcXKQx3KTYbjttRKTf1GMHcpbAOfyakblYsEQS3JtcSgzqK/Xcon82WMcKqWjtuq1N PB+knuSVn7fWqdXvf8RCoFAB4Uzfu/lFZJczWS467rr9mhFTFf7KB/GwibDm8WZtuZ qziKurKcAwcBMqNyE5lwWGau6yKsFCNDFQ6+4fOb9CYiBItCKxak8X6T54SJUPVzap fv+bpvswb+HOw== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 14/53] selftests/mm: ksm_tests: use kselftest framework Date: Mon, 6 Apr 2026 17:16:56 +0300 Message-ID: <20260406141735.2179309-15-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Convert ksm_tests to use kselftest framework for reporting and tracking successful and failing runs. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/ksm_tests.c | 180 +++++++++++-------------- 1 file changed, 81 insertions(+), 99 deletions(-) diff --git a/tools/testing/selftests/mm/ksm_tests.c b/tools/testing/selftes= ts/mm/ksm_tests.c index a0b48b839d54..752a2c0d06ab 100644 --- a/tools/testing/selftests/mm/ksm_tests.c +++ b/tools/testing/selftests/mm/ksm_tests.c @@ -175,12 +175,12 @@ static void *allocate_memory(void *ptr, int prot, in= t mapping, char data, size_ void *map_ptr =3D mmap(ptr, map_size, PROT_WRITE, mapping, -1, 0); =20 if (!map_ptr) { - perror("mmap"); + ksft_perror("mmap"); return NULL; } memset(map_ptr, data, map_size); if (mprotect(map_ptr, map_size, prot)) { - perror("mprotect"); + ksft_perror("mprotect"); munmap(map_ptr, map_size); return NULL; } @@ -201,11 +201,11 @@ static int ksm_do_scan(int scan_count, struct timespe= c start_time, int timeout) if (ksm_read_sysfs(KSM_FP("full_scans"), &cur_scan)) return 1; if (clock_gettime(CLOCK_MONOTONIC_RAW, &cur_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); return 1; } if ((cur_time.tv_sec - start_time.tv_sec) > timeout) { - printf("Scan time limit exceeded\n"); + ksft_print_msg("Scan time limit exceeded\n"); return 1; } } @@ -218,12 +218,12 @@ static int ksm_merge_pages(int merge_type, void *addr= , size_t size, { if (merge_type =3D=3D KSM_MERGE_MADVISE) { if (madvise(addr, size, MADV_MERGEABLE)) { - perror("madvise"); + ksft_perror("madvise"); return 1; } } else if (merge_type =3D=3D KSM_MERGE_PRCTL) { if (prctl(PR_SET_MEMORY_MERGE, 1, 0, 0, 0)) { - perror("prctl"); + ksft_perror("prctl"); return 1; } } @@ -242,7 +242,7 @@ static int ksm_unmerge_pages(void *addr, size_t size, struct timespec start_time, int timeout) { if (madvise(addr, size, MADV_UNMERGEABLE)) { - perror("madvise"); + ksft_perror("madvise"); return 1; } return 0; @@ -324,7 +324,7 @@ static int check_ksm_merge(int merge_type, int mapping,= int prot, struct timespec start_time; =20 if (clock_gettime(CLOCK_MONOTONIC_RAW, &start_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); return KSFT_FAIL; } =20 @@ -338,7 +338,6 @@ static int check_ksm_merge(int merge_type, int mapping,= int prot, =20 /* verify that the right number of pages are merged */ if (assert_ksm_pages_count(page_count)) { - printf("OK\n"); munmap(map_ptr, page_size * page_count); if (merge_type =3D=3D KSM_MERGE_PRCTL) prctl(PR_SET_MEMORY_MERGE, 0, 0, 0, 0); @@ -346,7 +345,6 @@ static int check_ksm_merge(int merge_type, int mapping,= int prot, } =20 err_out: - printf("Not OK\n"); munmap(map_ptr, page_size * page_count); return KSFT_FAIL; } @@ -358,7 +356,7 @@ static int check_ksm_unmerge(int merge_type, int mappin= g, int prot, int timeout, int page_count =3D 2; =20 if (clock_gettime(CLOCK_MONOTONIC_RAW, &start_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); return KSFT_FAIL; } =20 @@ -380,13 +378,11 @@ static int check_ksm_unmerge(int merge_type, int mapp= ing, int prot, int timeout, =20 /* check that unmerging was successful and 0 pages are currently merged */ if (assert_ksm_pages_count(0)) { - printf("OK\n"); munmap(map_ptr, page_size * page_count); return KSFT_PASS; } =20 err_out: - printf("Not OK\n"); munmap(map_ptr, page_size * page_count); return KSFT_FAIL; } @@ -398,7 +394,7 @@ static int check_ksm_zero_page_merge(int merge_type, in= t mapping, int prot, long struct timespec start_time; =20 if (clock_gettime(CLOCK_MONOTONIC_RAW, &start_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); return KSFT_FAIL; } =20 @@ -425,12 +421,10 @@ static int check_ksm_zero_page_merge(int merge_type, = int mapping, int prot, long else if (!use_zero_pages && !assert_ksm_pages_count(page_count)) goto err_out; =20 - printf("OK\n"); munmap(map_ptr, page_size * page_count); return KSFT_PASS; =20 err_out: - printf("Not OK\n"); munmap(map_ptr, page_size * page_count); return KSFT_FAIL; } @@ -465,16 +459,16 @@ static int check_ksm_numa_merge(int merge_type, int m= apping, int prot, int timeo int first_node; =20 if (clock_gettime(CLOCK_MONOTONIC_RAW, &start_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); return KSFT_FAIL; } =20 if (numa_available() < 0) { - perror("NUMA support not enabled"); + ksft_perror("NUMA support not enabled"); return KSFT_SKIP; } if (numa_num_configured_nodes() <=3D 1) { - printf("At least 2 NUMA nodes must be available\n"); + ksft_print_msg("At least 2 NUMA nodes must be available\n"); return KSFT_SKIP; } if (ksm_write_sysfs(KSM_FP("merge_across_nodes"), merge_across_nodes)) @@ -485,7 +479,7 @@ static int check_ksm_numa_merge(int merge_type, int map= ping, int prot, int timeo numa1_map_ptr =3D numa_alloc_onnode(page_size, first_node); numa2_map_ptr =3D numa_alloc_onnode(page_size, get_next_mem_node(first_no= de)); if (!numa1_map_ptr || !numa2_map_ptr) { - perror("numa_alloc_onnode"); + ksft_perror("numa_alloc_onnode"); return KSFT_FAIL; } =20 @@ -510,13 +504,11 @@ static int check_ksm_numa_merge(int merge_type, int m= apping, int prot, int timeo =20 numa_free(numa1_map_ptr, page_size); numa_free(numa2_map_ptr, page_size); - printf("OK\n"); return KSFT_PASS; =20 err_out: numa_free(numa1_map_ptr, page_size); numa_free(numa2_map_ptr, page_size); - printf("Not OK\n"); return KSFT_FAIL; } =20 @@ -529,7 +521,7 @@ static int ksm_merge_hugepages_time(int merge_type, int= mapping, int prot, int pagemap_fd, n_normal_pages, n_huge_pages; =20 if (!thp_is_enabled()) { - printf("Transparent Hugepages not available\n"); + ksft_print_msg("Transparent Hugepages not available\n"); return KSFT_SKIP; } =20 @@ -559,36 +551,35 @@ static int ksm_merge_hugepages_time(int merge_type, i= nt mapping, int prot, else n_huge_pages++; } - printf("Number of normal pages: %d\n", n_normal_pages); - printf("Number of huge pages: %d\n", n_huge_pages); + ksft_print_msg("Number of normal pages: %d\n", n_normal_pages); + ksft_print_msg("Number of huge pages: %d\n", n_huge_pages); =20 memset(map_ptr, '*', len); =20 if (clock_gettime(CLOCK_MONOTONIC_RAW, &start_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); goto err_out; } if (ksm_merge_pages(merge_type, map_ptr, map_size, start_time, timeout)) goto err_out; if (clock_gettime(CLOCK_MONOTONIC_RAW, &end_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); goto err_out; } =20 scan_time_ns =3D (end_time.tv_sec - start_time.tv_sec) * NSEC_PER_SEC + (end_time.tv_nsec - start_time.tv_nsec); =20 - printf("Total size: %lu MiB\n", map_size / MB); - printf("Total time: %ld.%09ld s\n", scan_time_ns / NSEC_PER_SEC, + ksft_print_msg("Total size: %lu MiB\n", map_size / MB); + ksft_print_msg("Total time: %ld.%09ld s\n", scan_time_ns / NSEC_PER_SE= C, scan_time_ns % NSEC_PER_SEC); - printf("Average speed: %.3f MiB/s\n", (map_size / MB) / + ksft_print_msg("Average speed: %.3f MiB/s\n", (map_size / MB) / ((double)scan_time_ns / NSEC_PER_SEC)); =20 munmap(map_ptr_orig, len + HPAGE_SIZE); return KSFT_PASS; =20 err_out: - printf("Not OK\n"); munmap(map_ptr_orig, len + HPAGE_SIZE); return KSFT_FAIL; } @@ -606,30 +597,29 @@ static int ksm_merge_time(int merge_type, int mapping= , int prot, int timeout, si return KSFT_FAIL; =20 if (clock_gettime(CLOCK_MONOTONIC_RAW, &start_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); goto err_out; } if (ksm_merge_pages(merge_type, map_ptr, map_size, start_time, timeout)) goto err_out; if (clock_gettime(CLOCK_MONOTONIC_RAW, &end_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); goto err_out; } =20 scan_time_ns =3D (end_time.tv_sec - start_time.tv_sec) * NSEC_PER_SEC + (end_time.tv_nsec - start_time.tv_nsec); =20 - printf("Total size: %lu MiB\n", map_size / MB); - printf("Total time: %ld.%09ld s\n", scan_time_ns / NSEC_PER_SEC, + ksft_print_msg("Total size: %lu MiB\n", map_size / MB); + ksft_print_msg("Total time: %ld.%09ld s\n", scan_time_ns / NSEC_PER_SE= C, scan_time_ns % NSEC_PER_SEC); - printf("Average speed: %.3f MiB/s\n", (map_size / MB) / + ksft_print_msg("Average speed: %.3f MiB/s\n", (map_size / MB) / ((double)scan_time_ns / NSEC_PER_SEC)); =20 munmap(map_ptr, map_size); return KSFT_PASS; =20 err_out: - printf("Not OK\n"); munmap(map_ptr, map_size); return KSFT_FAIL; } @@ -646,37 +636,36 @@ static int ksm_unmerge_time(int merge_type, int mappi= ng, int prot, int timeout, if (!map_ptr) return KSFT_FAIL; if (clock_gettime(CLOCK_MONOTONIC_RAW, &start_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); goto err_out; } if (ksm_merge_pages(merge_type, map_ptr, map_size, start_time, timeout)) goto err_out; =20 if (clock_gettime(CLOCK_MONOTONIC_RAW, &start_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); goto err_out; } if (ksm_unmerge_pages(map_ptr, map_size, start_time, timeout)) goto err_out; if (clock_gettime(CLOCK_MONOTONIC_RAW, &end_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); goto err_out; } =20 scan_time_ns =3D (end_time.tv_sec - start_time.tv_sec) * NSEC_PER_SEC + (end_time.tv_nsec - start_time.tv_nsec); =20 - printf("Total size: %lu MiB\n", map_size / MB); - printf("Total time: %ld.%09ld s\n", scan_time_ns / NSEC_PER_SEC, + ksft_print_msg("Total size: %lu MiB\n", map_size / MB); + ksft_print_msg("Total time: %ld.%09ld s\n", scan_time_ns / NSEC_PER_SE= C, scan_time_ns % NSEC_PER_SEC); - printf("Average speed: %.3f MiB/s\n", (map_size / MB) / + ksft_print_msg("Average speed: %.3f MiB/s\n", (map_size / MB) / ((double)scan_time_ns / NSEC_PER_SEC)); =20 munmap(map_ptr, map_size); return KSFT_PASS; =20 err_out: - printf("Not OK\n"); munmap(map_ptr, map_size); return KSFT_FAIL; } @@ -695,24 +684,24 @@ static int ksm_cow_time(int merge_type, int mapping, = int prot, int timeout, size return KSFT_FAIL; =20 if (clock_gettime(CLOCK_MONOTONIC_RAW, &start_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); return KSFT_FAIL; } for (size_t i =3D 0; i < page_count - 1; i =3D i + 2) memset(map_ptr + page_size * i, '-', 1); if (clock_gettime(CLOCK_MONOTONIC_RAW, &end_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); return KSFT_FAIL; } =20 cow_time_ns =3D (end_time.tv_sec - start_time.tv_sec) * NSEC_PER_SEC + (end_time.tv_nsec - start_time.tv_nsec); =20 - printf("Total size: %lu MiB\n\n", (page_size * page_count) / MB); - printf("Not merged pages:\n"); - printf("Total time: %ld.%09ld s\n", cow_time_ns / NSEC_PER_SEC, + ksft_print_msg("Total size: %lu MiB\n\n", (page_size * page_count) / M= B); + ksft_print_msg("Not merged pages:\n"); + ksft_print_msg("Total time: %ld.%09ld s\n", cow_time_ns / NSEC_PER_SE= C, cow_time_ns % NSEC_PER_SEC); - printf("Average speed: %.3f MiB/s\n\n", ((page_size * (page_count / 2)) = / MB) / + ksft_print_msg("Average speed: %.3f MiB/s\n\n", ((page_size * (page_coun= t / 2)) / MB) / ((double)cow_time_ns / NSEC_PER_SEC)); =20 /* Create 2000 pairs of duplicate pages */ @@ -724,30 +713,29 @@ static int ksm_cow_time(int merge_type, int mapping, = int prot, int timeout, size goto err_out; =20 if (clock_gettime(CLOCK_MONOTONIC_RAW, &start_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); goto err_out; } for (size_t i =3D 0; i < page_count - 1; i =3D i + 2) memset(map_ptr + page_size * i, '-', 1); if (clock_gettime(CLOCK_MONOTONIC_RAW, &end_time)) { - perror("clock_gettime"); + ksft_perror("clock_gettime"); goto err_out; } =20 cow_time_ns =3D (end_time.tv_sec - start_time.tv_sec) * NSEC_PER_SEC + (end_time.tv_nsec - start_time.tv_nsec); =20 - printf("Merged pages:\n"); - printf("Total time: %ld.%09ld s\n", cow_time_ns / NSEC_PER_SEC, + ksft_print_msg("Merged pages:\n"); + ksft_print_msg("Total time: %ld.%09ld s\n", cow_time_ns / NSEC_PER_SE= C, cow_time_ns % NSEC_PER_SEC); - printf("Average speed: %.3f MiB/s\n", ((page_size * (page_count / 2)) / = MB) / + ksft_print_msg("Average speed: %.3f MiB/s\n", ((page_size * (page_count = / 2)) / MB) / ((double)cow_time_ns / NSEC_PER_SEC)); =20 munmap(map_ptr, page_size * page_count); return KSFT_PASS; =20 err_out: - printf("Not OK\n"); munmap(map_ptr, page_size * page_count); return KSFT_FAIL; } @@ -765,6 +753,10 @@ int main(int argc, char *argv[]) bool use_zero_pages =3D KSM_USE_ZERO_PAGES_DEFAULT; bool merge_across_nodes =3D KSM_MERGE_ACROSS_NODES_DEFAULT; long size_MB =3D 0; + const char *test_descr =3D "KSM merging"; + + ksft_print_header(); + ksft_set_plan(1); =20 while ((opt =3D getopt(argc, argv, "dha:p:l:z:m:s:t:MUZNPCHD")) !=3D -1) { switch (opt) { @@ -773,17 +765,13 @@ int main(int argc, char *argv[]) break; case 'p': page_count =3D atol(optarg); - if (page_count <=3D 0) { - printf("The number of pages must be greater than 0\n"); - return KSFT_FAIL; - } + if (page_count <=3D 0) + ksft_exit_fail_msg("The number of pages must be greater than 0\n"); break; case 'l': ksm_scan_limit_sec =3D atoi(optarg); - if (ksm_scan_limit_sec <=3D 0) { - printf("Timeout value must be greater than 0\n"); - return KSFT_FAIL; - } + if (ksm_scan_limit_sec <=3D 0) + ksft_exit_fail_msg("Timeout value must be greater than 0\n"); break; case 'h': print_help(); @@ -805,19 +793,15 @@ int main(int argc, char *argv[]) break; case 's': size_MB =3D atoi(optarg); - if (size_MB <=3D 0) { - printf("Size must be greater than 0\n"); - return KSFT_FAIL; - } + if (size_MB <=3D 0) + ksft_exit_fail_msg("Size must be greater than 0\n"); break; case 't': { int tmp =3D atoi(optarg); =20 - if (tmp < 0 || tmp > KSM_MERGE_LAST) { - printf("Invalid merge type\n"); - return KSFT_FAIL; - } + if (tmp < 0 || tmp > KSM_MERGE_LAST) + ksft_exit_fail_msg("Invalid merge type\n"); merge_type =3D tmp; } break; @@ -845,82 +829,80 @@ int main(int argc, char *argv[]) test_name =3D KSM_COW_TIME; break; default: - return KSFT_FAIL; + ksft_exit_fail_msg("Unknown option\n"); } } =20 if (prot =3D=3D 0) prot =3D str_to_prot(KSM_PROT_STR_DEFAULT); =20 - if (access(KSM_SYSFS_PATH, F_OK)) { - printf("Config KSM not enabled\n"); - return KSFT_SKIP; - } + if (access(KSM_SYSFS_PATH, F_OK)) + ksft_exit_skip("Config KSM not enabled\n"); =20 - if (ksm_save_def(&ksm_sysfs_old)) { - printf("Cannot save default tunables\n"); - return KSFT_FAIL; - } + if (ksm_save_def(&ksm_sysfs_old)) + ksft_exit_fail_msg("Cannot save default tunables\n"); =20 if (ksm_write_sysfs(KSM_FP("run"), 2) || ksm_write_sysfs(KSM_FP("sleep_millisecs"), 0) || numa_available() ? 0 : ksm_write_sysfs(KSM_FP("merge_across_nodes"), 1) || ksm_write_sysfs(KSM_FP("pages_to_scan"), page_count)) - return KSFT_FAIL; + ksft_exit_fail_msg("Cannot set up KSM tunables\n"); =20 switch (test_name) { case CHECK_KSM_MERGE: + test_descr =3D "KSM merging"; ret =3D check_ksm_merge(merge_type, MAP_PRIVATE | MAP_ANONYMOUS, prot, p= age_count, ksm_scan_limit_sec, page_size); break; case CHECK_KSM_UNMERGE: + test_descr =3D "KSM unmerging"; ret =3D check_ksm_unmerge(merge_type, MAP_PRIVATE | MAP_ANONYMOUS, prot, ksm_scan_limit_sec, page_size); break; case CHECK_KSM_ZERO_PAGE_MERGE: + test_descr =3D "KSM zero page merging"; ret =3D check_ksm_zero_page_merge(merge_type, MAP_PRIVATE | MAP_ANONYMOU= S, prot, page_count, ksm_scan_limit_sec, use_zero_pages, page_size); break; case CHECK_KSM_NUMA_MERGE: + test_descr =3D "KSM NUMA merging"; ret =3D check_ksm_numa_merge(merge_type, MAP_PRIVATE | MAP_ANONYMOUS, pr= ot, ksm_scan_limit_sec, merge_across_nodes, page_size); break; case KSM_MERGE_TIME: - if (size_MB =3D=3D 0) { - printf("Option '-s' is required.\n"); - return KSFT_FAIL; - } + if (size_MB =3D=3D 0) + ksft_exit_fail_msg("Option '-s' is required\n"); + test_descr =3D "KSM merge time"; ret =3D ksm_merge_time(merge_type, MAP_PRIVATE | MAP_ANONYMOUS, prot, ksm_scan_limit_sec, size_MB); break; case KSM_MERGE_TIME_HUGE_PAGES: - if (size_MB =3D=3D 0) { - printf("Option '-s' is required.\n"); - return KSFT_FAIL; - } + if (size_MB =3D=3D 0) + ksft_exit_fail_msg("Option '-s' is required\n"); + test_descr =3D "KSM merge time with huge pages"; ret =3D ksm_merge_hugepages_time(merge_type, MAP_PRIVATE | MAP_ANONYMOUS= , prot, ksm_scan_limit_sec, size_MB); break; case KSM_UNMERGE_TIME: - if (size_MB =3D=3D 0) { - printf("Option '-s' is required.\n"); - return KSFT_FAIL; - } + if (size_MB =3D=3D 0) + ksft_exit_fail_msg("Option '-s' is required\n"); + test_descr =3D "KSM unmerge time"; ret =3D ksm_unmerge_time(merge_type, MAP_PRIVATE | MAP_ANONYMOUS, prot, ksm_scan_limit_sec, size_MB); break; case KSM_COW_TIME: + test_descr =3D "KSM COW time"; ret =3D ksm_cow_time(merge_type, MAP_PRIVATE | MAP_ANONYMOUS, prot, ksm_scan_limit_sec, page_size); break; } =20 - if (ksm_restore(&ksm_sysfs_old)) { - printf("Cannot restore default tunables\n"); - return KSFT_FAIL; - } + if (ksm_restore(&ksm_sysfs_old)) + ksft_print_msg("Cannot restore default tunables\n"); + + ksft_test_result_report(ret, "%s\n", test_descr); =20 - return ret; + ksft_finished(); } --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 D431037FF56; Mon, 6 Apr 2026 14:19:13 +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=1775485153; cv=none; b=uLHHuTFYkydyb7A4t2/9eaLeJE1t/fcUaYLvrqNkLPg7fX3CmDMUpMERCi6KlGaorwrHngYLXhZkPZzYixmPPY+3lx0sl+KOj/7KVTfnn6uUbkXMbijyWVj5gXZKYIPcrgc5Uj01m10QUMx5cDnQ6akEAXJvHxLHGny3rmN6jzQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485153; c=relaxed/simple; bh=SzcnBMA17+/esvCK7rsu9oOwn8zorTs7CfJQdGsDSMk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=grxGn3LJSOA/U3OdYhzVi21mwV6xNTPZ1QH8tUaWn/UUZPTCPbRYbBbeD6mqiCFOQcrHd4Hk+BFEbzWsmFG/S33xBnBhc5PGGtT7MBPAnNQsgWUO2gr04rWWyaoEMqinriI67XXF0KSkm8Jk8kgOQAIbOmBUIxAltv2Y60mU0HY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IfWy3STM; 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="IfWy3STM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2D2D0C4CEF7; Mon, 6 Apr 2026 14:19:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485153; bh=SzcnBMA17+/esvCK7rsu9oOwn8zorTs7CfJQdGsDSMk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IfWy3STMb+0SjENLADjBHIQr6ipBrxA0mxA1MpWI4Wx3zhhm4U8/IJCXBKl7/Xu1B X3JfQdPZmHr4L2/eta8t9/KY9n2LzcEiMpIfN+AWWOgx2AFFk4wy869UfQP+N0xYdm BecRrGJpxz8c7GN445HNPGW0fHKkK4Ubd9hfnHQnGaA6ZhPMQv9kemo+jaNHP3tkyT ZFy6Gthyby+3cgefcc2/ZfFTdfsU7ybh7iTt20OmiO+6tue/+leEipY6aCckCyhEPw kAu1OUqOGGjqLsHIzi1gfjr2+uPnQ4XvOT5lYBiRps+Ja/8xhpdkUPIf89Jvs7hfPT qOQDa2DTvYxag== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 15/53] selftests/mm: protection_keys: use descriptive test names in TAP output Date: Mon, 6 Apr 2026 17:16:57 +0300 Message-ID: <20260406141735.2179309-16-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Replace the numeric test index in TAP output with the actual test function name. Use a structure containing function pointer and its name rather than only the function pointer in the pkey_tests array. Signed-off-by: Mike Rapoport (Microsoft) Reviewed-by: Mark Brown --- tools/testing/selftests/mm/protection_keys.c | 55 +++++++++++--------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/tools/testing/selftests/mm/protection_keys.c b/tools/testing/s= elftests/mm/protection_keys.c index 2085982dba69..80c6124e8378 100644 --- a/tools/testing/selftests/mm/protection_keys.c +++ b/tools/testing/selftests/mm/protection_keys.c @@ -1692,29 +1692,36 @@ static void test_mprotect_pkey_on_unsupported_cpu(i= nt *ptr, u16 pkey) pkey_assert(sret < 0); } =20 -static void (*pkey_tests[])(int *ptr, u16 pkey) =3D { - test_read_of_write_disabled_region, - test_read_of_access_disabled_region, - test_read_of_access_disabled_region_with_page_already_mapped, - test_write_of_write_disabled_region, - test_write_of_write_disabled_region_with_page_already_mapped, - test_write_of_access_disabled_region, - test_write_of_access_disabled_region_with_page_already_mapped, - test_kernel_write_of_access_disabled_region, - test_kernel_write_of_write_disabled_region, - test_kernel_gup_of_access_disabled_region, - test_kernel_gup_write_to_write_disabled_region, - test_executing_on_unreadable_memory, - test_implicit_mprotect_exec_only_memory, - test_mprotect_with_pkey_0, - test_ptrace_of_child, - test_pkey_init_state, - test_pkey_syscalls_on_non_allocated_pkey, - test_pkey_syscalls_bad_args, - test_pkey_alloc_exhaust, - test_pkey_alloc_free_attach_pkey0, +struct pkey_test { + void (*func)(int *ptr, u16 pkey); + const char *name; +}; + +#define PKEY_TEST(fn) { fn, #fn } + +static struct pkey_test pkey_tests[] =3D { + PKEY_TEST(test_read_of_write_disabled_region), + PKEY_TEST(test_read_of_access_disabled_region), + PKEY_TEST(test_read_of_access_disabled_region_with_page_already_mapped), + PKEY_TEST(test_write_of_write_disabled_region), + PKEY_TEST(test_write_of_write_disabled_region_with_page_already_mapped), + PKEY_TEST(test_write_of_access_disabled_region), + PKEY_TEST(test_write_of_access_disabled_region_with_page_already_mapped), + PKEY_TEST(test_kernel_write_of_access_disabled_region), + PKEY_TEST(test_kernel_write_of_write_disabled_region), + PKEY_TEST(test_kernel_gup_of_access_disabled_region), + PKEY_TEST(test_kernel_gup_write_to_write_disabled_region), + PKEY_TEST(test_executing_on_unreadable_memory), + PKEY_TEST(test_implicit_mprotect_exec_only_memory), + PKEY_TEST(test_mprotect_with_pkey_0), + PKEY_TEST(test_ptrace_of_child), + PKEY_TEST(test_pkey_init_state), + PKEY_TEST(test_pkey_syscalls_on_non_allocated_pkey), + PKEY_TEST(test_pkey_syscalls_bad_args), + PKEY_TEST(test_pkey_alloc_exhaust), + PKEY_TEST(test_pkey_alloc_free_attach_pkey0), #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) - test_ptrace_modifies_pkru, + PKEY_TEST(test_ptrace_modifies_pkru), #endif }; =20 @@ -1735,7 +1742,7 @@ static void run_tests_once(void) dprintf1("test %d starting with pkey: %d\n", test_nr, pkey); ptr =3D malloc_pkey(PAGE_SIZE, prot, pkey); dprintf1("test %d starting...\n", test_nr); - pkey_tests[test_nr](ptr, pkey); + pkey_tests[test_nr].func(ptr, pkey); dprintf1("freeing test memory: %p\n", ptr); free_pkey_malloc(ptr); sys_pkey_free(pkey); @@ -1746,7 +1753,7 @@ static void run_tests_once(void) tracing_off(); close_test_fds(); =20 - printf("test %2d PASSED (iteration %d)\n", test_nr, iteration_nr); + printf("test %s PASSED (iteration %d)\n", pkey_tests[test_nr].name, iter= ation_nr); dprintf1("=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D\n\n"); } iteration_nr++; --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 AB3DA37DEAF; Mon, 6 Apr 2026 14:19:19 +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=1775485159; cv=none; b=W/XzIuN7ZpZtRLj5yOxIes5WuAnL7rLllhi6ESVRLkHiY5yG7uMGw05OkE+DuCFipAdkML4PGP6B4SQvYVDO1apWtZYNEI70ZWVebeZI7LnFyXhzlwA/0BhOugiMw0HCiADQmZj52aewrwxTTX+PHgQsBzynpkhKLL3ZmCaIYQI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485159; c=relaxed/simple; bh=ZfbG35JDCFGHcQNJmFQWCxDhKC3iKoBsHHCyZ5Qqs18=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=n7x+JaLOTy2SV1qg7q1cdUGt24B6QynMSmGvLYb21Kf8/OZTjznjoWXjZ0178pZlB8CmEWwnRlbk9OeZPfib9qrzX/LUHTGTCG/n8z03fsRuGSFyG5cKoIZB85UUFv3Tj/SwyrTxihX+xTiyiXK5zfJRLh/474h7XrKdZOQHrhA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dPjLSLrL; 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="dPjLSLrL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E883DC2BC9E; Mon, 6 Apr 2026 14:19:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485159; bh=ZfbG35JDCFGHcQNJmFQWCxDhKC3iKoBsHHCyZ5Qqs18=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dPjLSLrLzNtv2x27Qg9/n+cuZi+T5XRaB5fe2R/1CC4nvnhtyO5kaRiI6J4Xamq8q QsCWJrVjRXujo3RVixTBgwh3CNoAkzl0iqNnxdxGGaRUDblj3XGy+6odKaAoaQ2Y2R RbcOTnVyF3qXwRqovJdGdsoQtpv83rZCc4EKLB6/BQXu3mqd+WrS5Ofy7/0zwOMDAi 2cB9YbYGZ3Uh0kihLzPqjoPYCj4FUqx5MBsBsRVxEbSTI/xMbH++v1lFFv/RSyHadT 4CM7pIptqvbVhKNeJ8EU485g5E9oaSTxzgZ7SluaLj+LYjq4RIuqrYlDiNJmEBBqJE txJz8WV5ak8yA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 16/53] selftests/mm: protection_keys: use kselftest framework Date: Mon, 6 Apr 2026 17:16:58 +0300 Message-ID: <20260406141735.2179309-17-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Convert protection_keys test to use kselftest framework for reporting and tracking successful and failing runs. Adjust dprintf0() printouts to use "#" in the beginning of the line for TAP compatibility and add fflush(stdout) in the end of the test to ensure all the ksft_print_*() messages are really output. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/pkey-helpers.h | 6 +++-- tools/testing/selftests/mm/protection_keys.c | 27 ++++++++++++-------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/mm/pkey-helpers.h b/tools/testing/self= tests/mm/pkey-helpers.h index 7c29f075e40b..ae010b075417 100644 --- a/tools/testing/selftests/mm/pkey-helpers.h +++ b/tools/testing/selftests/mm/pkey-helpers.h @@ -71,10 +71,12 @@ static inline void sigsafe_printf(const char *format, .= ..) extern void abort_hooks(void); #define pkey_assert(condition) do { \ if (!(condition)) { \ - dprintf0("assert() at %s::%d test_nr: %d iteration: %d\n", \ + dprintf0("# assert() at %s::%d test_nr: %d iteration: %d\n", \ __FILE__, __LINE__, \ test_nr, iteration_nr); \ - dprintf0("errno at assert: %d", errno); \ + dprintf0("# errno at assert: %d\n", errno); \ + ksft_test_result_fail("test %d (iteration %d)\n", \ + test_nr, iteration_nr); \ abort_hooks(); \ exit(__LINE__); \ } \ diff --git a/tools/testing/selftests/mm/protection_keys.c b/tools/testing/s= elftests/mm/protection_keys.c index 80c6124e8378..c069250969f5 100644 --- a/tools/testing/selftests/mm/protection_keys.c +++ b/tools/testing/selftests/mm/protection_keys.c @@ -136,6 +136,7 @@ static void tracing_off(void) =20 void abort_hooks(void) { + fflush(stdout); fprintf(stderr, "running %s()...\n", __func__); tracing_off(); #ifdef SLEEP_ON_ABORT @@ -370,8 +371,8 @@ static void signal_handler(int signum, siginfo_t *si, v= oid *vucontext) if ((si->si_code =3D=3D SEGV_MAPERR) || (si->si_code =3D=3D SEGV_ACCERR) || (si->si_code =3D=3D SEGV_BNDERR)) { - printf("non-PK si_code, exiting...\n"); - exit(4); + dprintf0("# non-PK si_code: %d, exiting...\n", si->si_code); + exit(1); } =20 si_pkey_ptr =3D siginfo_get_pkey_ptr(si); @@ -719,7 +720,7 @@ static void setup_hugetlbfs(void) long hpagesz_mb; =20 if (geteuid() !=3D 0) { - fprintf(stderr, "WARNING: not run as root, can not do hugetlb test\n"); + ksft_print_msg("WARNING: not run as root, can not do hugetlb test\n"); return; } =20 @@ -855,7 +856,7 @@ void expected_pkey_fault(int pkey) =20 #define do_not_expect_pkey_fault(msg) do { \ if (last_pkey_faults !=3D pkey_faults) \ - dprintf0("unexpected PKey fault: %s\n", msg); \ + dprintf0("# unexpected PKey fault: %s\n", msg); \ pkey_assert(last_pkey_faults =3D=3D pkey_faults); \ } while (0) =20 @@ -1753,7 +1754,7 @@ static void run_tests_once(void) tracing_off(); close_test_fds(); =20 - printf("test %s PASSED (iteration %d)\n", pkey_tests[test_nr].name, iter= ation_nr); + ksft_test_result_pass("test %s (iteration %d)\n", pkey_tests[test_nr].na= me, iteration_nr); dprintf1("=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D\n\n"); } iteration_nr++; @@ -1773,27 +1774,31 @@ int main(void) =20 setup_handlers(); =20 - printf("has pkeys: %d\n", pkeys_supported); + ksft_print_header(); =20 if (!pkeys_supported) { int size =3D PAGE_SIZE; int *ptr; =20 - printf("running PKEY tests for unsupported CPU/OS\n"); + ksft_set_plan(1); + ksft_print_msg("running PKEY tests for unsupported CPU/OS\n"); =20 ptr =3D mmap(NULL, size, PROT_NONE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); assert(ptr !=3D (void *)-1); test_mprotect_pkey_on_unsupported_cpu(ptr, 1); - exit(0); + ksft_test_result_pass("pkey on unsupported CPU/OS\n"); + ksft_finished(); } =20 + ksft_set_plan(ARRAY_SIZE(pkey_tests) * nr_iterations); + pkey_setup_shadow(); - printf("startup pkey_reg: %016llx\n", read_pkey_reg()); + ksft_print_msg("startup pkey_reg: %016llx\n", read_pkey_reg()); setup_hugetlbfs(); =20 while (nr_iterations-- > 0) run_tests_once(); =20 - printf("done (all tests OK)\n"); - return 0; + ksft_finished(); + fflush(stdout); } --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 1D1F837F8A5; Mon, 6 Apr 2026 14:19:25 +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=1775485165; cv=none; b=YzNWCOP3bdtMOCuYlnUtDk0ZVqM/FPk8LwnS0CMRy/J2wmlmbeX+9cik6dfa9kW5hel6jPrH9Iv8W500/2rEnAWHyhnCq3jqu5/MLFqpoZRI804rCZ3pg5qJi5f4Z9Nker+qGb1CJaJn+2whEqwSjTsIHL7D9oBpxPEZO+L0nys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485165; c=relaxed/simple; bh=W/Hu2qsaXpGRyFf0ATC603oNW1zzsqQgst2Eeo+Nd7k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tZUMhwGR3OprO4/HV8fOwXPp5Z1mbokxAlD87JUQRLPxaO/sYpAmLOIrJzrBRSo9C2rifp8t4/u83ze2paiNYTQPBNcDSb0bUU9ATCO6PqZ6aTIZ83iyzybN6tSEoWNrmWKvk5b6cc+JZE5wpRhQ+Q+I6YxVWj7AmKut7pS9rvI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=N5tD0iSF; 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="N5tD0iSF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B4C96C4CEF7; Mon, 6 Apr 2026 14:19:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485165; bh=W/Hu2qsaXpGRyFf0ATC603oNW1zzsqQgst2Eeo+Nd7k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=N5tD0iSFDXXnqXPLFdQlAY8UO5/TgM1IESk1sYZBeQyG7MaXXD7xgXZkaU6yviBcY FGXPHAR4JsWuqJ//tWGI0828HpRQBBig0Ltu7aEA3hpIe2K5/IXbQ7YKoWv0CQvyHD daxe7pV20CZCIDJNn+5b/zk1sdtOd8H5RJpU9dPfYQXBQ9vqlKRAWcNsusgnmSCgbr 2+JKmGYn+/lNS/wkC2+BHtvu0i/2LpzieJV4cM51g4X8sRbC2CzgFCTitminOTI7+m FdixntedHFrnSoIJCWQXO94jTxeTH74hb9k3DCCXK5IQlL1BqdlQ6f+cqKMXbVuNso 6Q/0nnCC3frSg== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 17/53] selftests/mm: uffd-stress: use kselftest framework Date: Mon, 6 Apr 2026 17:16:59 +0300 Message-ID: <20260406141735.2179309-18-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Convert uffd-stress test to use kselftest framework for reporting and tracking successful and failing runs. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/uffd-stress.c | 41 +++++++++++------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/tools/testing/selftests/mm/uffd-stress.c b/tools/testing/selft= ests/mm/uffd-stress.c index 700fbaa18d44..e92a85463eb1 100644 --- a/tools/testing/selftests/mm/uffd-stress.c +++ b/tools/testing/selftests/mm/uffd-stress.c @@ -286,19 +286,12 @@ static int userfaultfd_stress(uffd_global_test_opts_t= *gopts) pthread_attr_setstacksize(&attr, 16*1024*1024); =20 while (bounces--) { - printf("bounces: %d, mode:", bounces); - if (bounces & BOUNCE_RANDOM) - printf(" rnd"); - if (bounces & BOUNCE_RACINGFAULTS) - printf(" racing"); - if (bounces & BOUNCE_VERIFY) - printf(" ver"); - if (bounces & BOUNCE_POLL) - printf(" poll"); - else - printf(" read"); - printf(", "); - fflush(stdout); + ksft_print_msg("bounces: %d, mode:%s%s%s%s, ", + bounces, + bounces & BOUNCE_RANDOM ? " rnd" : "", + bounces & BOUNCE_RACINGFAULTS ? " racing" : "", + bounces & BOUNCE_VERIFY ? " ver" : "", + bounces & BOUNCE_POLL ? " poll" : " read"); =20 if (bounces & BOUNCE_POLL) fcntl(gopts->uffd, F_SETFL, gopts->uffd_flags | O_NONBLOCK); @@ -456,6 +449,9 @@ int main(int argc, char **argv) unsigned long nr_cpus; size_t bytes; =20 + ksft_print_header(); + ksft_set_plan(1); + gopts =3D (uffd_global_test_opts_t *) malloc(sizeof(uffd_global_test_opts= _t)); =20 if (argc < 4) @@ -484,10 +480,8 @@ int main(int argc, char **argv) * for racy extra reservation of hugepages. */ if (gopts->test_type =3D=3D TEST_HUGETLB && - get_free_hugepages() < 2 * (bytes / gopts->page_size) + gopts->nr_para= llel - 1) { - printf("skip: Skipping userfaultfd... not enough hugepages\n"); - return KSFT_SKIP; - } + get_free_hugepages() < 2 * (bytes / gopts->page_size) + gopts->nr_para= llel - 1) + ksft_exit_skip("Skipping userfaultfd... not enough hugepages\n"); =20 gopts->nr_pages_per_cpu =3D bytes / gopts->page_size / gopts->nr_parallel; if (!gopts->nr_pages_per_cpu) { @@ -503,9 +497,12 @@ int main(int argc, char **argv) } gopts->nr_pages =3D gopts->nr_pages_per_cpu * gopts->nr_parallel; =20 - printf("nr_pages: %lu, nr_pages_per_cpu: %lu\n", - gopts->nr_pages, gopts->nr_pages_per_cpu); - return userfaultfd_stress(gopts); + ksft_print_msg("nr_pages: %lu, nr_pages_per_cpu: %lu\n", + gopts->nr_pages, gopts->nr_pages_per_cpu); + + ksft_test_result(!userfaultfd_stress(gopts), + "uffd-stress %s\n", argv[1]); + ksft_finished(); } =20 #else /* __NR_userfaultfd */ @@ -514,8 +511,8 @@ int main(int argc, char **argv) =20 int main(void) { - printf("skip: Skipping userfaultfd test (missing __NR_userfaultfd)\n"); - return KSFT_SKIP; + ksft_print_header(); + ksft_exit_skip("missing __NR_userfaultfd definition\n"); } =20 #endif /* __NR_userfaultfd */ --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 1E894311C1B; Mon, 6 Apr 2026 14:19:30 +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=1775485171; cv=none; b=ho0ge8BxSziwAS60q+3eOPQwyYgIBiD8HE/BCCTrgEdDUimvI+k4ug1Ect3AqyIaXILjkspAcq1McRBcWNg8pawfx3NVAwEr9+sjk/N34MkzgTIX6ovqby8ZbmKo4XNQOJw/meU9RlBkCteuPhww5Ch88eU0PkXf8lamffMyQqw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485171; c=relaxed/simple; bh=0T8XGF7c4bz/U4v3lIA/VoisDbbIrRHxeXXAjkWdKoU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k47eQyMOjmx+xOoAoMcyA6jtD3orL8tGzw+UJuf8tyDxyEV6tH4Pt5Ir5oFnhae0nSG7lHqqYeBz9OjA0Tr1fEUfS9wOEgGIyFb1rsyicPiRmaaB70NXTyCSLxb1lKavlsxrMsqtP5+kgomDF62VXR6gryE6jWW1laPGoNq0EXQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=a1ZFD1Rq; 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="a1ZFD1Rq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7BAA2C4AF09; Mon, 6 Apr 2026 14:19:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485170; bh=0T8XGF7c4bz/U4v3lIA/VoisDbbIrRHxeXXAjkWdKoU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=a1ZFD1RqsHLkHrakUsdL3Z+UmZe7qODbptg3tN1udMp/bCBRfqa43JO//7QUKbqBh CBEtSS7KG2BSALrd719qlvCk5BdOLkwQ3aEzkax5vjqRlVhfGXmgvs7VhVXVcznnNf QmaB9lSH6U1Ql/j34oqrXzmBtpHTUkJdhg21wUjd8RtikTnV8A/CFAP1pa5PxmFVvD g7hmygAcHmusDzJlpupW9lWwRdOYrHVy4RDZsya/lBO9dZeszPU4ojHOTqiUlUV06g wzTyGGZg4xz9aHKxY+Chzxs6fzIxQzo8mX8rF8IZnbi5HL7SvVumUweuj4BP4ceXUD U5x2wTIiecT4Q== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 18/53] selftests/mm: uffd-unit-tests: use kselftest framework Date: Mon, 6 Apr 2026 17:17:00 +0300 Message-ID: <20260406141735.2179309-19-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Convert uffd-unit-tests to use kselftest framework for reporting and tracking successful and failing runs. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/uffd-unit-tests.c | 79 +++++++++++--------- 1 file changed, 44 insertions(+), 35 deletions(-) diff --git a/tools/testing/selftests/mm/uffd-unit-tests.c b/tools/testing/s= elftests/mm/uffd-unit-tests.c index 6f5e404a446c..1a33db281f8a 100644 --- a/tools/testing/selftests/mm/uffd-unit-tests.c +++ b/tools/testing/selftests/mm/uffd-unit-tests.c @@ -86,39 +86,24 @@ typedef struct { uffd_test_case_ops_t *test_case_ops; } uffd_test_case_t; =20 -static void uffd_test_report(void) -{ - printf("Userfaults unit tests: pass=3D%u, skip=3D%u, fail=3D%u (total=3D%= u)\n", - ksft_get_pass_cnt(), - ksft_get_xskip_cnt(), - ksft_get_fail_cnt(), - ksft_test_num()); -} +static char current_test[256]; =20 static void uffd_test_pass(void) { - printf("done\n"); - ksft_inc_pass_cnt(); + ksft_test_result_pass("%s\n", current_test); } =20 #define uffd_test_start(...) do { \ - printf("Testing "); \ - printf(__VA_ARGS__); \ - printf("... "); \ - fflush(stdout); \ + snprintf(current_test, sizeof(current_test), __VA_ARGS__); \ } while (0) =20 #define uffd_test_fail(...) do { \ - printf("failed [reason: "); \ - printf(__VA_ARGS__); \ - printf("]\n"); \ - ksft_inc_fail_cnt(); \ + ksft_test_result_fail("%s\n", current_test); \ } while (0) =20 static void uffd_test_skip(const char *message) { - printf("skipped [reason: %s]\n", message); - ksft_inc_xskip_cnt(); + ksft_test_result_skip("%s (%s)\n", current_test, message); } =20 /* @@ -1701,6 +1686,26 @@ static void usage(const char *prog) exit(KSFT_FAIL); } =20 +static int uffd_count_tests(int n_tests, int n_mems, const char *test_filt= er) +{ + uffd_test_case_t *test; + int i, j, count =3D 0; + + if (!test_filter) + count +=3D 2; /* test_uffd_api(false) + test_uffd_api(true) */ + + for (i =3D 0; i < n_tests; i++) { + test =3D &uffd_tests[i]; + if (test_filter && !strstr(test->name, test_filter)) + continue; + for (j =3D 0; j < n_mems; j++) + if (test->mem_targets & mem_types[j].mem_flag) + count++; + } + + return count; +} + int main(int argc, char *argv[]) { int n_tests =3D sizeof(uffd_tests) / sizeof(uffd_test_case_t); @@ -1730,24 +1735,31 @@ int main(int argc, char *argv[]) } } =20 - if (!test_filter && !list_only) { + if (list_only) { + for (i =3D 0; i < n_tests; i++) { + test =3D &uffd_tests[i]; + if (test_filter && !strstr(test->name, test_filter)) + continue; + printf("%s\n", test->name); + } + return KSFT_PASS; + } + + ksft_print_header(); + ksft_set_plan(uffd_count_tests(n_tests, n_mems, test_filter)); + + if (!test_filter) { has_uffd =3D test_uffd_api(false); has_uffd |=3D test_uffd_api(true); =20 - if (!has_uffd) { - printf("Userfaultfd not supported or unprivileged, skip all tests\n"); - exit(KSFT_SKIP); - } + if (!has_uffd) + ksft_exit_skip("Userfaultfd not supported or unprivileged\n"); } =20 for (i =3D 0; i < n_tests; i++) { test =3D &uffd_tests[i]; if (test_filter && !strstr(test->name, test_filter)) continue; - if (list_only) { - printf("%s\n", test->name); - continue; - } for (j =3D 0; j < n_mems; j++) { mem_type =3D &mem_types[j]; =20 @@ -1794,10 +1806,7 @@ int main(int argc, char *argv[]) } } =20 - if (!list_only) - uffd_test_report(); - - return ksft_get_fail_cnt() ? KSFT_FAIL : KSFT_PASS; + ksft_finished(); } =20 #else /* __NR_userfaultfd */ @@ -1806,8 +1815,8 @@ int main(int argc, char *argv[]) =20 int main(void) { - printf("Skipping %s (missing __NR_userfaultfd)\n", __file__); - return KSFT_SKIP; + ksft_print_header(); + ksft_exit_skip("missing __NR_userfaultfd definition\n"); } =20 #endif /* __NR_userfaultfd */ --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 D37AB37F8A5; Mon, 6 Apr 2026 14:19:36 +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=1775485176; cv=none; b=HCaegV1m9D8IQBJ6dQ2FhFT20/iGnh3CqjatLmcPvgknO41cMUPKdlS1woF8XKd1vAyiXfMsCcIHTk1QZgbKOlYDRIe0ylE42iAyQhgQoxiU+XVa3iBW1m7HkFqup62ik4y2/7VORcg+mkCDy4gly1QyRdTm2/uJxEFqvq4OQiU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485176; c=relaxed/simple; bh=iXIqmQSqfHYYzZ8gJikITuCG1TTtgUzd9IrH+Ph7iZw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NYaiP95eoW2a2lgdjAWy1IqXxnsPfxvgS16dpceUN3+3iBelne0ME1eXtJg6fzfbJr3pUk7Klk1/pE7066Wjc8+0X23TstUjgHDtQFemWx3Q2MDdSmB0ZefED0AwJDfbNCir872oT7tCOxxVkJYYkdhHUkqvO4xZPY3QZ+W0jsY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SLc6Qalp; 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="SLc6Qalp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 42CA2C4CEF7; Mon, 6 Apr 2026 14:19:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485176; bh=iXIqmQSqfHYYzZ8gJikITuCG1TTtgUzd9IrH+Ph7iZw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SLc6QalpBraC5bfXSjUsA5U3MvSHiKXzBUB35WUS4ol6/z/SMEqn/C8m3vU7XtEC8 DdrxRxs30TSd+0tSSFeqFFwfauRYNvFZ+vAIlbx27CCqAWPigY8LPaQCqbfvLn9J1y xHI3gz7m4a8bwWqSIPvlUFHi0sN3cYKnIWUCJ3dHMBYZDSEa+gfSZXCB+wahdL4R5U Mzc6O9/fAdGn37DVM2WDsVGLHUV2SGaRlU8Jwt+/rw7wz5nxU5b6Uam7Yy3cayJuIb 6RFCdfvABnZRfPCOegta4TV1KrKPDnwZfEXeEx1YHIVnoRQnM2NQH5G+u6cDoB4K2j aRanWpYij++JA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 19/53] selftests/mm: va_high_addr_switch: use kselftest framework Date: Mon, 6 Apr 2026 17:17:01 +0300 Message-ID: <20260406141735.2179309-20-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Convert va_high_addr_switch test to use kselftest framework for reporting and tracking successful and failing runs. Signed-off-by: Mike Rapoport (Microsoft) --- .../selftests/mm/va_high_addr_switch.c | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/tools/testing/selftests/mm/va_high_addr_switch.c b/tools/testi= ng/selftests/mm/va_high_addr_switch.c index 51401e081b20..5741fd057640 100644 --- a/tools/testing/selftests/mm/va_high_addr_switch.c +++ b/tools/testing/selftests/mm/va_high_addr_switch.c @@ -257,40 +257,33 @@ void testcases_init(void) switch_hint =3D addr_switch_hint; } =20 -static int run_test(struct testcase *test, int count) +static void run_test(struct testcase *test, int count) { void *p; - int i, ret =3D KSFT_PASS; + int i; =20 for (i =3D 0; i < count; i++) { struct testcase *t =3D test + i; =20 p =3D mmap(t->addr, t->size, PROT_READ | PROT_WRITE, t->flags, -1, 0); - - printf("%s: %p - ", t->msg, p); - if (p =3D=3D MAP_FAILED) { - printf("FAILED\n"); - ret =3D KSFT_FAIL; + ksft_test_result_fail("%s: MAP_FAILED\n", t->msg); continue; } =20 if (t->low_addr_required && p >=3D (void *)(switch_hint)) { - printf("FAILED\n"); - ret =3D KSFT_FAIL; + ksft_test_result_fail("%s: %p not below switch hint\n", t->msg, p); } else { /* * Do a dereference of the address returned so that we catch * bugs in page fault handling */ memset(p, 0, t->size); - printf("OK\n"); + ksft_test_result_pass("%s: %p\n", t->msg, p); } if (!t->keep_mapped) munmap(p, t->size); } - - return ret; } =20 #ifdef __aarch64__ @@ -322,19 +315,23 @@ static int supported_arch(void) =20 int main(int argc, char **argv) { - int ret, hugetlb_ret =3D KSFT_PASS; + bool run_hugetlb =3D false; + + ksft_print_header(); =20 if (!supported_arch()) - return KSFT_SKIP; + ksft_exit_skip("Architecture not supported\n"); + + if (argc =3D=3D 2 && !strcmp(argv[1], "--run-hugetlb")) + run_hugetlb =3D true; =20 testcases_init(); =20 - ret =3D run_test(testcases, sz_testcases); - if (argc =3D=3D 2 && !strcmp(argv[1], "--run-hugetlb")) - hugetlb_ret =3D run_test(hugetlb_testcases, sz_hugetlb_testcases); + ksft_set_plan(sz_testcases + (run_hugetlb ? sz_hugetlb_testcases : 0)); + + run_test(testcases, sz_testcases); + if (run_hugetlb) + run_test(hugetlb_testcases, sz_hugetlb_testcases); =20 - if (ret =3D=3D KSFT_PASS && hugetlb_ret =3D=3D KSFT_PASS) - return KSFT_PASS; - else - return KSFT_FAIL; + ksft_finished(); } --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 82CAD37DEBB; Mon, 6 Apr 2026 14:19:42 +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=1775485182; cv=none; b=snJ3oQXGJQtU3Ys+TxlToh1snTnPDdVN4WBZFTILZUVvxWMvDsq31LZj0oB91aq9esqggPfErMbXSGqTDUs+XmXHBjxGWzIzK5UaYmh+zf1hfPamNZr6T/1kuNrziLT4vUNTX/Ml3IbzLFQdC50dCqzUsT3ksnxVZfolYGKXp1U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485182; c=relaxed/simple; bh=CSRWIbnqZ2+IUD8e7KEy7LOUD0pEzBaiEkzcv/mT4lU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GS+T6z4A+zLtNRVZk8t2cfU0nEKeBgOeKzvDi1HiR+ooH/02MLTNiojWwRIX/QC2CHm2prtEZX/h8h477hIKKut2UUItHWXbBf2YQuKI4sQJccz1HHzrAqcsCts/q0qPaZ0piHbRl5YJdoEiN6/BxAwlKMRTtmokDE6/PysjRVM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WkkzDwRF; 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="WkkzDwRF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 09315C4CEF7; Mon, 6 Apr 2026 14:19:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485182; bh=CSRWIbnqZ2+IUD8e7KEy7LOUD0pEzBaiEkzcv/mT4lU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WkkzDwRFh22fX0emoHfuxUNPut6dxYmqhLmgjOy4hBGeBJLq8J2htWFvJlocgrmpd 71lH2/zYqfL4U+/u4tJ4vi/n1leSLbw4uNd32Dn8kfmxFU1tjGDWaKzB/6R/OBzM2E Dap6EDkqFQzKCf4paMgOcse5gtbtjmbUEYt/I3APkwuTdNX+Rvs26R20pA7u456bzW TGdk4F9BOLisA6ZJEHelNZtP55sWJ7JHlcaWyzQDVV783ziK89JHIWuf/7FHJw2kQ9 2yX31+BbsSP1dcD9aJClS+aR+yxs9UNT4thnfq7nnYNiGBdrujppI6l1z5ttljvcd0 ZSGAXoKOl/t6w== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 20/53] selftests/mm: add atexit() and signal handlers to thp_settings Date: Mon, 6 Apr 2026 17:17:02 +0300 Message-ID: <20260406141735.2179309-21-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" khugepaged registers atexit() and signal handlers that ensure that THP settings are restored regardless of how the test exited. Make these handlers available for all users of thp_settings. The call to thp_save_settings() installs thp_restore_settings as the atexit() callback and makes sure that signals that kill a process would still call exit() and atexit() callback. Update child process in tests using thp_settings to use _exit() instead of exit() to avoid altering THP settings in the middle of a test. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/cow.c | 21 +++++------ tools/testing/selftests/mm/khugepaged.c | 40 +++------------------ tools/testing/selftests/mm/thp_settings.c | 28 ++++++++++++++- tools/testing/selftests/mm/uffd-wp-mremap.c | 4 --- 4 files changed, 39 insertions(+), 54 deletions(-) diff --git a/tools/testing/selftests/mm/cow.c b/tools/testing/selftests/mm/= cow.c index d9c69c04b67d..6abdcb30aba8 100644 --- a/tools/testing/selftests/mm/cow.c +++ b/tools/testing/selftests/mm/cow.c @@ -202,7 +202,7 @@ static void do_test_cow_in_parent(char *mem, size_t siz= e, bool do_mprotect, log_test_result(KSFT_FAIL); goto close_comm_pipes; } else if (!ret) { - exit(fn(mem, size, &comm_pipes)); + _exit(fn(mem, size, &comm_pipes)); } =20 while (read(comm_pipes.child_ready[0], &buf, 1) !=3D 1) @@ -333,7 +333,7 @@ static void do_test_vmsplice_in_parent(char *mem, size_= t size, ; /* Modify page content in the child. */ memset(mem, 0xff, size); - exit(0); + _exit(0); } =20 if (!before_fork) { @@ -480,7 +480,7 @@ static void do_test_iouring(char *mem, size_t size, boo= l use_fork) write(comm_pipes.child_ready[1], "0", 1); while (read(comm_pipes.parent_ready[0], &buf, 1) !=3D 1) ; - exit(0); + _exit(0); } =20 while (read(comm_pipes.child_ready[0], &buf, 1) !=3D 1) @@ -645,7 +645,7 @@ static void do_test_ro_pin(char *mem, size_t size, enum= ro_pin_test test, write(comm_pipes.child_ready[1], "0", 1); while (read(comm_pipes.parent_ready[0], &buf, 1) !=3D 1) ; - exit(0); + _exit(0); } =20 /* Wait until our child is ready. */ @@ -956,7 +956,7 @@ static void do_run_with_thp(test_fn fn, enum thp_run th= p_run, size_t thpsize) log_test_result(KSFT_FAIL); goto munmap; } else if (!ret) { - exit(0); + _exit(0); } wait(&ret); /* Allow for sharing all pages again. */ @@ -1347,13 +1347,13 @@ static void do_test_anon_thp_collapse(char *mem, si= ze_t size, switch (test) { case ANON_THP_COLLAPSE_UNSHARED: case ANON_THP_COLLAPSE_FULLY_SHARED: - exit(child_memcmp_fn(mem, size, &comm_pipes)); + _exit(child_memcmp_fn(mem, size, &comm_pipes)); break; case ANON_THP_COLLAPSE_LOWER_SHARED: - exit(child_memcmp_fn(mem, size / 2, &comm_pipes)); + _exit(child_memcmp_fn(mem, size / 2, &comm_pipes)); break; case ANON_THP_COLLAPSE_UPPER_SHARED: - exit(child_memcmp_fn(mem + size / 2, size / 2, + _exit(child_memcmp_fn(mem + size / 2, size / 2, &comm_pipes)); break; default: @@ -1911,10 +1911,5 @@ int main(int argc, char **argv) run_anon_thp_test_cases(); run_non_anon_test_cases(); =20 - if (pmdsize) { - /* Only if THP is supported. */ - thp_restore_settings(); - } - ksft_finished(); } diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selfte= sts/mm/khugepaged.c index ba0a9e14e600..fac11b7e7443 100644 --- a/tools/testing/selftests/mm/khugepaged.c +++ b/tools/testing/selftests/mm/khugepaged.c @@ -72,7 +72,6 @@ struct file_info { }; =20 static struct file_info finfo; -static bool skip_settings_restore; static int exit_status; =20 static void success(const char *msg) @@ -92,25 +91,6 @@ static void skip(const char *msg) exit_status =3D KSFT_SKIP; } =20 -static void restore_settings_atexit(void) -{ - if (skip_settings_restore) - return; - - ksft_print_msg("Restore THP and khugepaged settings..."); - thp_restore_settings(); - success("OK"); - - skip_settings_restore =3D true; - ksft_finished(); -} - -static void restore_settings(int sig) -{ - /* exit() will invoke the restore_settings_atexit handler. */ - exit(sig ? KSFT_FAIL : exit_status); -} - static void save_settings(void) { ksft_print_msg("Save THP and khugepaged settings..."); @@ -119,12 +99,6 @@ static void save_settings(void) thp_save_settings(); =20 success("OK"); - - atexit(restore_settings_atexit); - signal(SIGTERM, restore_settings); - signal(SIGINT, restore_settings); - signal(SIGHUP, restore_settings); - signal(SIGQUIT, restore_settings); } =20 static void get_finfo(const char *dir) @@ -840,8 +814,6 @@ static void collapse_fork(struct collapse_context *c, s= truct mem_ops *ops) ksft_print_msg("Share small page over fork()..."); if (!fork()) { /* Do not touch settings on child exit */ - skip_settings_restore =3D true; - if (ops->check_huge(p, 0)) success("OK"); else @@ -853,7 +825,7 @@ static void collapse_fork(struct collapse_context *c, s= truct mem_ops *ops) =20 validate_memory(p, 0, page_size); ops->cleanup_area(p, hpage_pmd_size); - exit(exit_status); + _exit(exit_status); } =20 wait(&wstatus); @@ -878,8 +850,6 @@ static void collapse_fork_compound(struct collapse_cont= ext *c, struct mem_ops *o ksft_print_msg("Share huge page over fork()..."); if (!fork()) { /* Do not touch settings on child exit */ - skip_settings_restore =3D true; - if (ops->check_huge(p, 1)) success("OK"); else @@ -902,7 +872,7 @@ static void collapse_fork_compound(struct collapse_cont= ext *c, struct mem_ops *o =20 validate_memory(p, 0, hpage_pmd_size); ops->cleanup_area(p, hpage_pmd_size); - exit(exit_status); + _exit(exit_status); } =20 wait(&wstatus); @@ -928,8 +898,6 @@ static void collapse_max_ptes_shared(struct collapse_co= ntext *c, struct mem_ops ksft_print_msg("Share huge page over fork()..."); if (!fork()) { /* Do not touch settings on child exit */ - skip_settings_restore =3D true; - if (ops->check_huge(p, 1)) success("OK"); else @@ -962,7 +930,7 @@ static void collapse_max_ptes_shared(struct collapse_co= ntext *c, struct mem_ops =20 validate_memory(p, 0, hpage_pmd_size); ops->cleanup_area(p, hpage_pmd_size); - exit(exit_status); + _exit(exit_status); } =20 wait(&wstatus); @@ -1258,5 +1226,5 @@ int main(int argc, char **argv) t->fn(t->ctx, t->ops); } =20 - restore_settings(0); + ksft_finished(); } diff --git a/tools/testing/selftests/mm/thp_settings.c b/tools/testing/self= tests/mm/thp_settings.c index e748ebfb3d4e..f38ba8a27b30 100644 --- a/tools/testing/selftests/mm/thp_settings.c +++ b/tools/testing/selftests/mm/thp_settings.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #include #include +#include #include #include #include @@ -15,6 +16,7 @@ static struct thp_settings settings_stack[MAX_SETTINGS_DE= PTH]; static int settings_index; static struct thp_settings saved_settings; static char dev_queue_read_ahead_path[PATH_MAX]; +static bool thp_settings_saved; =20 static const char * const thp_enabled_strings[] =3D { "never", @@ -298,12 +300,36 @@ void thp_pop_settings(void) =20 void thp_restore_settings(void) { - thp_write_settings(&saved_settings); + if (thp_settings_saved) + thp_write_settings(&saved_settings); +} + +static void thp_restore_settings_atexit(void) +{ + thp_restore_settings(); +} + +static void thp_restore_settings_sighandler(int sig) +{ + /* exit() will invoke the thp_restore_settings_atexit handler. */ + exit(KSFT_FAIL); } =20 void thp_save_settings(void) { thp_read_settings(&saved_settings); + + /* + * setup exit hooks to make sure THP settings are restored on graceful + * and error exits and signals + */ + atexit(thp_restore_settings_atexit); + signal(SIGTERM, thp_restore_settings_sighandler); + signal(SIGINT, thp_restore_settings_sighandler); + signal(SIGHUP, thp_restore_settings_sighandler); + signal(SIGQUIT, thp_restore_settings_sighandler); + + thp_settings_saved =3D true; } =20 void thp_set_read_ahead_path(char *path) diff --git a/tools/testing/selftests/mm/uffd-wp-mremap.c b/tools/testing/se= lftests/mm/uffd-wp-mremap.c index 17186d4a4147..516c35d236e1 100644 --- a/tools/testing/selftests/mm/uffd-wp-mremap.c +++ b/tools/testing/selftests/mm/uffd-wp-mremap.c @@ -368,10 +368,6 @@ int main(int argc, char **argv) tc->swapout, tc->hugetlb); } =20 - /* If THP is supported, restore original THP settings. */ - if (nr_thpsizes) - thp_restore_settings(); - i =3D ksft_get_fail_cnt(); if (i) ksft_exit_fail_msg("%d out of %d tests failed\n", --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 980C7311C1B; Mon, 6 Apr 2026 14:19:48 +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=1775485188; cv=none; b=sclEJDg9nVuZnIudMtZyxOHYs3IfLUOhEmJsqa9yzXWIhkNR/pTN8wUWHkq9PXaf3Bs3JOM6J/ubtXn24AFNQ9tbA+YwT35NMhHJE/OFB+UkiDvx1X45rJ2eJxv2hHfH2guNMcobjRep7i8KgMtcK+pNbSJgc8rhF6cAA4uyEY0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485188; c=relaxed/simple; bh=AHkzH3mQAlKfDcQRvRcQ6AqEgxWN7sYnNjSvNtUulcw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=csRs6oVGHLtpEW79KDDabuPy5zImXbRTi8IHHIJNpJRGyHajH64ubV1866VdZ/FDsCHed2XwZeFmdDWIXvVGhlmNmcaR9E3UtnT6JYj5xnyGRMND17v7YesaphxeBsR+njD4w+q9ABYGhrEvGtKz7OnuC2Bz21ElcW2/kPI3WY0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lllvUId4; 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="lllvUId4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DCA00C2BCB0; Mon, 6 Apr 2026 14:19:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485188; bh=AHkzH3mQAlKfDcQRvRcQ6AqEgxWN7sYnNjSvNtUulcw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lllvUId4Bi3hfTmW7ghuDK/RsXw5dolByczZMQX/GnD6G2FQO6bs9f/C4s0Li9ay2 A9+Pr63Ri3kPYZiJFfM+06YZDEo4Gw5OJzo8K8JcYv0FtAGeQkXIwaJldvlZSn20E+ faqh5d7Z9ZTYs/TlmO9jtUQyegei1/AaKup5doc/KR1tP527gBXvfdcEUbYRcfeFjg MTW+YFDi/h6VoPUe4WAEbHPBtR+X42+glu9OYhXahEU5AVKPv+7utmzzrFZV80V2TG FOzCWZLWcDl25AceoldmddyxDJ9clx6EnE12/u0hJ6QyYC66xdBnH5eD6UrEWyp4Pw UUu4khFST20qA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 21/53] selftests/mm: rename thp_settings.[ch] to hugepage_settings.[ch] Date: Mon, 6 Apr 2026 17:17:03 +0300 Message-ID: <20260406141735.2179309-22-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" ... for upcoming addition of HugeTLB helpers. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/Makefile | 4 ++-- tools/testing/selftests/mm/cow.c | 2 +- tools/testing/selftests/mm/folio_split_race_test.c | 2 +- tools/testing/selftests/mm/guard-regions.c | 2 +- .../selftests/mm/{thp_settings.c =3D> hugepage_settings.c} | 2 +- .../selftests/mm/{thp_settings.h =3D> hugepage_settings.h} | 0 tools/testing/selftests/mm/khugepaged.c | 2 +- tools/testing/selftests/mm/ksm_tests.c | 2 +- tools/testing/selftests/mm/migration.c | 2 +- tools/testing/selftests/mm/prctl_thp_disable.c | 2 +- tools/testing/selftests/mm/soft-dirty.c | 2 +- tools/testing/selftests/mm/split_huge_page_test.c | 2 +- tools/testing/selftests/mm/transhuge-stress.c | 2 +- tools/testing/selftests/mm/uffd-wp-mremap.c | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) rename tools/testing/selftests/mm/{thp_settings.c =3D> hugepage_settings.c= } (99%) rename tools/testing/selftests/mm/{thp_settings.h =3D> hugepage_settings.h= } (100%) diff --git a/tools/testing/selftests/mm/Makefile b/tools/testing/selftests/= mm/Makefile index a6955660a806..a1d103b38485 100644 --- a/tools/testing/selftests/mm/Makefile +++ b/tools/testing/selftests/mm/Makefile @@ -186,8 +186,8 @@ TEST_FILES +=3D write_hugetlb_memory.sh =20 include ../lib.mk =20 -$(TEST_GEN_PROGS): vm_util.c thp_settings.c -$(TEST_GEN_FILES): vm_util.c thp_settings.c +$(TEST_GEN_PROGS): vm_util.c hugepage_settings.c +$(TEST_GEN_FILES): vm_util.c hugepage_settings.c =20 $(OUTPUT)/uffd-stress: uffd-common.c $(OUTPUT)/uffd-unit-tests: uffd-common.c diff --git a/tools/testing/selftests/mm/cow.c b/tools/testing/selftests/mm/= cow.c index 6abdcb30aba8..4321f4208fe3 100644 --- a/tools/testing/selftests/mm/cow.c +++ b/tools/testing/selftests/mm/cow.c @@ -29,7 +29,7 @@ #include "../../../../mm/gup_test.h" #include "kselftest.h" #include "vm_util.h" -#include "thp_settings.h" +#include "hugepage_settings.h" =20 static size_t pagesize; static int pagemap_fd; diff --git a/tools/testing/selftests/mm/folio_split_race_test.c b/tools/tes= ting/selftests/mm/folio_split_race_test.c index ff026f183ac7..7ede4793c778 100644 --- a/tools/testing/selftests/mm/folio_split_race_test.c +++ b/tools/testing/selftests/mm/folio_split_race_test.c @@ -25,7 +25,7 @@ #include #include "vm_util.h" #include "kselftest.h" -#include "thp_settings.h" +#include "hugepage_settings.h" =20 uint64_t page_size; uint64_t pmd_pagesize; diff --git a/tools/testing/selftests/mm/guard-regions.c b/tools/testing/sel= ftests/mm/guard-regions.c index 48e8b1539be3..feb50b415f52 100644 --- a/tools/testing/selftests/mm/guard-regions.c +++ b/tools/testing/selftests/mm/guard-regions.c @@ -21,7 +21,7 @@ #include #include #include "vm_util.h" -#include "thp_settings.h" +#include "hugepage_settings.h" =20 #include "../pidfd/pidfd.h" =20 diff --git a/tools/testing/selftests/mm/thp_settings.c b/tools/testing/self= tests/mm/hugepage_settings.c similarity index 99% rename from tools/testing/selftests/mm/thp_settings.c rename to tools/testing/selftests/mm/hugepage_settings.c index f38ba8a27b30..87ecb309b430 100644 --- a/tools/testing/selftests/mm/thp_settings.c +++ b/tools/testing/selftests/mm/hugepage_settings.c @@ -8,7 +8,7 @@ #include =20 #include "vm_util.h" -#include "thp_settings.h" +#include "hugepage_settings.h" =20 #define THP_SYSFS "/sys/kernel/mm/transparent_hugepage/" #define MAX_SETTINGS_DEPTH 4 diff --git a/tools/testing/selftests/mm/thp_settings.h b/tools/testing/self= tests/mm/hugepage_settings.h similarity index 100% rename from tools/testing/selftests/mm/thp_settings.h rename to tools/testing/selftests/mm/hugepage_settings.h diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selfte= sts/mm/khugepaged.c index fac11b7e7443..df7ecd683c26 100644 --- a/tools/testing/selftests/mm/khugepaged.c +++ b/tools/testing/selftests/mm/khugepaged.c @@ -22,7 +22,7 @@ #include "linux/magic.h" =20 #include "vm_util.h" -#include "thp_settings.h" +#include "hugepage_settings.h" =20 #define BASE_ADDR ((void *)(1UL << 30)) static unsigned long hpage_pmd_size; diff --git a/tools/testing/selftests/mm/ksm_tests.c b/tools/testing/selftes= ts/mm/ksm_tests.c index 752a2c0d06ab..fb355f869401 100644 --- a/tools/testing/selftests/mm/ksm_tests.c +++ b/tools/testing/selftests/mm/ksm_tests.c @@ -15,7 +15,7 @@ #include "kselftest.h" #include #include "vm_util.h" -#include "thp_settings.h" +#include "hugepage_settings.h" =20 #define KSM_SYSFS_PATH "/sys/kernel/mm/ksm/" #define KSM_FP(s) (KSM_SYSFS_PATH s) diff --git a/tools/testing/selftests/mm/migration.c b/tools/testing/selftes= ts/mm/migration.c index e3c2f831e15a..ccf42002ce86 100644 --- a/tools/testing/selftests/mm/migration.c +++ b/tools/testing/selftests/mm/migration.c @@ -5,7 +5,7 @@ */ =20 #include "kselftest_harness.h" -#include "thp_settings.h" +#include "hugepage_settings.h" =20 #include #include diff --git a/tools/testing/selftests/mm/prctl_thp_disable.c b/tools/testing= /selftests/mm/prctl_thp_disable.c index ca27200596a4..d8d9d1de57b8 100644 --- a/tools/testing/selftests/mm/prctl_thp_disable.c +++ b/tools/testing/selftests/mm/prctl_thp_disable.c @@ -14,7 +14,7 @@ #include =20 #include "kselftest_harness.h" -#include "thp_settings.h" +#include "hugepage_settings.h" #include "vm_util.h" =20 #ifndef PR_THP_DISABLE_EXCEPT_ADVISED diff --git a/tools/testing/selftests/mm/soft-dirty.c b/tools/testing/selfte= sts/mm/soft-dirty.c index bcfcac99b436..c426c4636ef5 100644 --- a/tools/testing/selftests/mm/soft-dirty.c +++ b/tools/testing/selftests/mm/soft-dirty.c @@ -9,7 +9,7 @@ =20 #include "kselftest.h" #include "vm_util.h" -#include "thp_settings.h" +#include "hugepage_settings.h" =20 #define PAGEMAP_FILE_PATH "/proc/self/pagemap" #define TEST_ITERATIONS 10000 diff --git a/tools/testing/selftests/mm/split_huge_page_test.c b/tools/test= ing/selftests/mm/split_huge_page_test.c index 500d07c4938b..cc99294bdd5a 100644 --- a/tools/testing/selftests/mm/split_huge_page_test.c +++ b/tools/testing/selftests/mm/split_huge_page_test.c @@ -21,7 +21,7 @@ #include #include "vm_util.h" #include "kselftest.h" -#include "thp_settings.h" +#include "hugepage_settings.h" =20 uint64_t pagesize; unsigned int pageshift; diff --git a/tools/testing/selftests/mm/transhuge-stress.c b/tools/testing/= selftests/mm/transhuge-stress.c index 7a9f1035099b..8eb0c5630e7e 100644 --- a/tools/testing/selftests/mm/transhuge-stress.c +++ b/tools/testing/selftests/mm/transhuge-stress.c @@ -17,7 +17,7 @@ #include #include "vm_util.h" #include "kselftest.h" -#include "thp_settings.h" +#include "hugepage_settings.h" =20 int backing_fd =3D -1; int mmap_flags =3D MAP_ANONYMOUS | MAP_NORESERVE | MAP_PRIVATE; diff --git a/tools/testing/selftests/mm/uffd-wp-mremap.c b/tools/testing/se= lftests/mm/uffd-wp-mremap.c index 516c35d236e1..9d67b11c2f28 100644 --- a/tools/testing/selftests/mm/uffd-wp-mremap.c +++ b/tools/testing/selftests/mm/uffd-wp-mremap.c @@ -8,7 +8,7 @@ #include #include #include "kselftest.h" -#include "thp_settings.h" +#include "hugepage_settings.h" #include "uffd-common.h" =20 static int pagemap_fd; --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 3D17F3803DE; Mon, 6 Apr 2026 14:19:54 +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=1775485194; cv=none; b=GEzXBDdCMu9QFPfTvFC+BsYkDQRP21lX2BQdDOB5rl7XD4uyNGLnE+hRezvulRyy5ZwQm0hFutvLqAc3b3jqI06zkXZASomrqZbGAhTlJz3Hlaw8r+uRJYXBdRMluZ734vymWAce61tfaOLAijAfPrvHR2m8+OmRwEqtCzLWS7w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485194; c=relaxed/simple; bh=hJ9AhljZrrZSza0NM3Jn6Z9Xd9XeJO3vKv3986M1eo8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pYSW1DoK6LLCg8zsXwMtTyFzSFl40uwxUqiAPdodnpUxlZmwD6LbEJW1Hy99xVjf6y8Th9WQpp+WHaUMnyV8AttKHrMEiLr3c9NCE/M19/Oe4BOIxv7sufcIeDCZNpQ4ub3p3oks3GKiaVmDTkUreny63jxHLfFZNPs9abidRjY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=vOitDIDW; 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="vOitDIDW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A63EFC4CEF7; Mon, 6 Apr 2026 14:19:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485193; bh=hJ9AhljZrrZSza0NM3Jn6Z9Xd9XeJO3vKv3986M1eo8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vOitDIDWHs+Nz382UWHgmjODY49eO8TYnugKFK+RkbJ3njrWRB3E1bWMrFxUhb81K 55wKmoxj0dvB+3hrkzJWdWZuaLGE74g5Tqtn4wtWVewPipCIH8mqhbhPtV8OdsKEkf 1z2CD/dSbxGw+2ZEY6CjV8ddmk1YAynPxlIp463G0wjasLNKuwlRZ/mwdaLPCIC9BF 2U/S5E3jTFVrswbPyr5LyR0j882qwW2H0MUGiXw4Sv6Hgf6KMXRwzkmXr0KzoLB+uL LswVGDU+HVs6gtVhxDnjpgJYJMWWdKisulHz0p9eSgrpu6ydW4cnXBpRJXrI4Rvss5 V3yz2dVkqQ8Bw== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 22/53] selftests/mm: move HugeTLB helpers to hugepage_settings Date: Mon, 6 Apr 2026 17:17:04 +0300 Message-ID: <20260406141735.2179309-23-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Move library functions that abstract HugeTLB /proc and /sysfs access from vm_util to hugepage_settings. This will help creating common helpers that save and restore HugeTLB and THP settings. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/gup_longterm.c | 1 + tools/testing/selftests/mm/hmm-tests.c | 2 +- .../testing/selftests/mm/hugepage_settings.c | 68 +++++++++++++++++++ .../testing/selftests/mm/hugepage_settings.h | 8 +++ tools/testing/selftests/mm/hugetlb-madvise.c | 1 + tools/testing/selftests/mm/hugetlb-mmap.c | 1 + tools/testing/selftests/mm/hugetlb-vmemmap.c | 1 + tools/testing/selftests/mm/hugetlb_dio.c | 1 + .../selftests/mm/hugetlb_fault_after_madv.c | 1 + .../selftests/mm/hugetlb_madv_vs_map.c | 1 + tools/testing/selftests/mm/thuge-gen.c | 1 + tools/testing/selftests/mm/uffd-common.h | 1 + .../selftests/mm/va_high_addr_switch.c | 1 + tools/testing/selftests/mm/vm_util.c | 66 ------------------ tools/testing/selftests/mm/vm_util.h | 3 - 15 files changed, 87 insertions(+), 70 deletions(-) diff --git a/tools/testing/selftests/mm/gup_longterm.c b/tools/testing/self= tests/mm/gup_longterm.c index f61150d28eb2..ab4eaf4feb7c 100644 --- a/tools/testing/selftests/mm/gup_longterm.c +++ b/tools/testing/selftests/mm/gup_longterm.c @@ -29,6 +29,7 @@ #include "../../../../mm/gup_test.h" #include "kselftest.h" #include "vm_util.h" +#include "hugepage_settings.h" =20 static size_t pagesize; static int nr_hugetlbsizes; diff --git a/tools/testing/selftests/mm/hmm-tests.c b/tools/testing/selftes= ts/mm/hmm-tests.c index 788689497e92..409b11cad4bc 100644 --- a/tools/testing/selftests/mm/hmm-tests.c +++ b/tools/testing/selftests/mm/hmm-tests.c @@ -11,6 +11,7 @@ */ =20 #include "kselftest_harness.h" +#include "hugepage_settings.h" =20 #include #include @@ -27,7 +28,6 @@ #include #include =20 - /* * This is a private UAPI to the kernel test module so it isn't exported * in the usual include/uapi/... directory. diff --git a/tools/testing/selftests/mm/hugepage_settings.c b/tools/testing= /selftests/mm/hugepage_settings.c index 87ecb309b430..ebaa621c45c6 100644 --- a/tools/testing/selftests/mm/hugepage_settings.c +++ b/tools/testing/selftests/mm/hugepage_settings.c @@ -1,7 +1,9 @@ // SPDX-License-Identifier: GPL-2.0 +#include #include #include #include +#include #include #include #include @@ -396,3 +398,69 @@ bool thp_is_enabled(void) /* THP is considered enabled if it's either "always" or "madvise" */ return mode =3D=3D 1 || mode =3D=3D 3; } + +int detect_hugetlb_page_sizes(size_t sizes[], int max) +{ + DIR *dir =3D opendir("/sys/kernel/mm/hugepages/"); + int count =3D 0; + + if (!dir) + return 0; + + while (count < max) { + struct dirent *entry =3D readdir(dir); + size_t kb; + + if (!entry) + break; + if (entry->d_type !=3D DT_DIR) + continue; + if (sscanf(entry->d_name, "hugepages-%zukB", &kb) !=3D 1) + continue; + sizes[count++] =3D kb * 1024; + ksft_print_msg("[INFO] detected hugetlb page size: %zu KiB\n", + kb); + } + closedir(dir); + return count; +} + +unsigned long default_huge_page_size(void) +{ + unsigned long hps =3D 0; + char *line =3D NULL; + size_t linelen =3D 0; + FILE *f =3D fopen("/proc/meminfo", "r"); + + if (!f) + return 0; + while (getline(&line, &linelen, f) > 0) { + if (sscanf(line, "Hugepagesize: %lu kB", &hps) =3D=3D 1) { + hps <<=3D 10; + break; + } + } + + free(line); + fclose(f); + return hps; +} + +unsigned long get_free_hugepages(void) +{ + unsigned long fhp =3D 0; + char *line =3D NULL; + size_t linelen =3D 0; + FILE *f =3D fopen("/proc/meminfo", "r"); + + if (!f) + return fhp; + while (getline(&line, &linelen, f) > 0) { + if (sscanf(line, "HugePages_Free: %lu", &fhp) =3D=3D 1) + break; + } + + free(line); + fclose(f); + return fhp; +} diff --git a/tools/testing/selftests/mm/hugepage_settings.h b/tools/testing= /selftests/mm/hugepage_settings.h index 7748a9009191..320b97e768e8 100644 --- a/tools/testing/selftests/mm/hugepage_settings.h +++ b/tools/testing/selftests/mm/hugepage_settings.h @@ -6,6 +6,8 @@ #include #include =20 +/* Transparent Huge Pages (THP) */ + enum thp_enabled { THP_NEVER, THP_ALWAYS, @@ -86,4 +88,10 @@ unsigned long thp_shmem_supported_orders(void); bool thp_available(void); bool thp_is_enabled(void); =20 +/* HugeTLB */ + +int detect_hugetlb_page_sizes(size_t sizes[], int max); +unsigned long default_huge_page_size(void); +unsigned long get_free_hugepages(void); + #endif /* __THP_SETTINGS_H__ */ diff --git a/tools/testing/selftests/mm/hugetlb-madvise.c b/tools/testing/s= elftests/mm/hugetlb-madvise.c index 4c6c346a3af5..316384d919db 100644 --- a/tools/testing/selftests/mm/hugetlb-madvise.c +++ b/tools/testing/selftests/mm/hugetlb-madvise.c @@ -20,6 +20,7 @@ #include #include "vm_util.h" #include "kselftest.h" +#include "hugepage_settings.h" =20 #define MIN_FREE_PAGES 20 #define NR_HUGE_PAGES 10 /* common number of pages to map/allocate */ diff --git a/tools/testing/selftests/mm/hugetlb-mmap.c b/tools/testing/self= tests/mm/hugetlb-mmap.c index 71a444d8b1cb..5be68fbc36dc 100644 --- a/tools/testing/selftests/mm/hugetlb-mmap.c +++ b/tools/testing/selftests/mm/hugetlb-mmap.c @@ -17,6 +17,7 @@ #include #include "vm_util.h" #include "kselftest.h" +#include "hugepage_settings.h" =20 #define LENGTH (256UL*1024*1024) #define PROTECTION (PROT_READ | PROT_WRITE) diff --git a/tools/testing/selftests/mm/hugetlb-vmemmap.c b/tools/testing/s= elftests/mm/hugetlb-vmemmap.c index 485a6978b40f..af5786bebfd1 100644 --- a/tools/testing/selftests/mm/hugetlb-vmemmap.c +++ b/tools/testing/selftests/mm/hugetlb-vmemmap.c @@ -11,6 +11,7 @@ #include #include #include "vm_util.h" +#include "hugepage_settings.h" =20 #define PAGE_COMPOUND_HEAD (1UL << 15) #define PAGE_COMPOUND_TAIL (1UL << 16) diff --git a/tools/testing/selftests/mm/hugetlb_dio.c b/tools/testing/selft= ests/mm/hugetlb_dio.c index 31a054fa8134..81e3f7bc8e76 100644 --- a/tools/testing/selftests/mm/hugetlb_dio.c +++ b/tools/testing/selftests/mm/hugetlb_dio.c @@ -20,6 +20,7 @@ #include #include "vm_util.h" #include "kselftest.h" +#include "hugepage_settings.h" =20 #ifndef STATX_DIOALIGN #define STATX_DIOALIGN 0x00002000U diff --git a/tools/testing/selftests/mm/hugetlb_fault_after_madv.c b/tools/= testing/selftests/mm/hugetlb_fault_after_madv.c index b4b257775b74..abc3904c5268 100644 --- a/tools/testing/selftests/mm/hugetlb_fault_after_madv.c +++ b/tools/testing/selftests/mm/hugetlb_fault_after_madv.c @@ -10,6 +10,7 @@ =20 #include "vm_util.h" #include "kselftest.h" +#include "hugepage_settings.h" =20 #define INLOOP_ITER 100 =20 diff --git a/tools/testing/selftests/mm/hugetlb_madv_vs_map.c b/tools/testi= ng/selftests/mm/hugetlb_madv_vs_map.c index c7105c6d319b..ac60b4f18784 100644 --- a/tools/testing/selftests/mm/hugetlb_madv_vs_map.c +++ b/tools/testing/selftests/mm/hugetlb_madv_vs_map.c @@ -25,6 +25,7 @@ #include =20 #include "vm_util.h" +#include "hugepage_settings.h" =20 #define INLOOP_ITER 100 =20 diff --git a/tools/testing/selftests/mm/thuge-gen.c b/tools/testing/selftes= ts/mm/thuge-gen.c index 77813d34dcc2..1007bc8aa57c 100644 --- a/tools/testing/selftests/mm/thuge-gen.c +++ b/tools/testing/selftests/mm/thuge-gen.c @@ -28,6 +28,7 @@ #include #include "vm_util.h" #include "kselftest.h" +#include "hugepage_settings.h" =20 #if !defined(MAP_HUGETLB) #define MAP_HUGETLB 0x40000 diff --git a/tools/testing/selftests/mm/uffd-common.h b/tools/testing/selft= ests/mm/uffd-common.h index 844a85ab31eb..6c5aca9cb63e 100644 --- a/tools/testing/selftests/mm/uffd-common.h +++ b/tools/testing/selftests/mm/uffd-common.h @@ -37,6 +37,7 @@ =20 #include "kselftest.h" #include "vm_util.h" +#include "hugepage_settings.h" =20 #define UFFD_FLAGS (O_CLOEXEC | O_NONBLOCK | UFFD_USER_MODE_ONLY) =20 diff --git a/tools/testing/selftests/mm/va_high_addr_switch.c b/tools/testi= ng/selftests/mm/va_high_addr_switch.c index 5741fd057640..d42ad50eb2d3 100644 --- a/tools/testing/selftests/mm/va_high_addr_switch.c +++ b/tools/testing/selftests/mm/va_high_addr_switch.c @@ -11,6 +11,7 @@ =20 #include "vm_util.h" #include "kselftest.h" +#include "hugepage_settings.h" =20 /* * The hint addr value is used to allocate addresses diff --git a/tools/testing/selftests/mm/vm_util.c b/tools/testing/selftests= /mm/vm_util.c index db94564f4431..e62e2a473123 100644 --- a/tools/testing/selftests/mm/vm_util.c +++ b/tools/testing/selftests/mm/vm_util.c @@ -291,53 +291,6 @@ int64_t allocate_transhuge(void *ptr, int pagemap_fd) return -1; } =20 -unsigned long default_huge_page_size(void) -{ - unsigned long hps =3D 0; - char *line =3D NULL; - size_t linelen =3D 0; - FILE *f =3D fopen("/proc/meminfo", "r"); - - if (!f) - return 0; - while (getline(&line, &linelen, f) > 0) { - if (sscanf(line, "Hugepagesize: %lu kB", &hps) =3D=3D 1) { - hps <<=3D 10; - break; - } - } - - free(line); - fclose(f); - return hps; -} - -int detect_hugetlb_page_sizes(size_t sizes[], int max) -{ - DIR *dir =3D opendir("/sys/kernel/mm/hugepages/"); - int count =3D 0; - - if (!dir) - return 0; - - while (count < max) { - struct dirent *entry =3D readdir(dir); - size_t kb; - - if (!entry) - break; - if (entry->d_type !=3D DT_DIR) - continue; - if (sscanf(entry->d_name, "hugepages-%zukB", &kb) !=3D 1) - continue; - sizes[count++] =3D kb * 1024; - ksft_print_msg("[INFO] detected hugetlb page size: %zu KiB\n", - kb); - } - closedir(dir); - return count; -} - int pageflags_get(unsigned long pfn, int kpageflags_fd, uint64_t *flags) { size_t count; @@ -396,25 +349,6 @@ int uffd_unregister(int uffd, void *addr, uint64_t len) return ret; } =20 -unsigned long get_free_hugepages(void) -{ - unsigned long fhp =3D 0; - char *line =3D NULL; - size_t linelen =3D 0; - FILE *f =3D fopen("/proc/meminfo", "r"); - - if (!f) - return fhp; - while (getline(&line, &linelen, f) > 0) { - if (sscanf(line, "HugePages_Free: %lu", &fhp) =3D=3D 1) - break; - } - - free(line); - fclose(f); - return fhp; -} - static bool check_vmflag(void *addr, const char *flag) { char buffer[MAX_LINE_LENGTH]; diff --git a/tools/testing/selftests/mm/vm_util.h b/tools/testing/selftests= /mm/vm_util.h index 1a07305ceff4..195bf2e26792 100644 --- a/tools/testing/selftests/mm/vm_util.h +++ b/tools/testing/selftests/mm/vm_util.h @@ -94,8 +94,6 @@ bool check_huge_anon(void *addr, int nr_hpages, uint64_t = hpage_size); bool check_huge_file(void *addr, int nr_hpages, uint64_t hpage_size); bool check_huge_shmem(void *addr, int nr_hpages, uint64_t hpage_size); int64_t allocate_transhuge(void *ptr, int pagemap_fd); -unsigned long default_huge_page_size(void); -int detect_hugetlb_page_sizes(size_t sizes[], int max); int pageflags_get(unsigned long pfn, int kpageflags_fd, uint64_t *flags); =20 int uffd_register(int uffd, void *addr, uint64_t len, @@ -103,7 +101,6 @@ int uffd_register(int uffd, void *addr, uint64_t len, int uffd_unregister(int uffd, void *addr, uint64_t len); int uffd_register_with_ioctls(int uffd, void *addr, uint64_t len, bool miss, bool wp, bool minor, uint64_t *ioctls); -unsigned long get_free_hugepages(void); bool check_vmflag_io(void *addr); bool check_vmflag_pfnmap(void *addr); bool check_vmflag_guard(void *addr); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 154B53803FA; Mon, 6 Apr 2026 14:19:59 +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=1775485200; cv=none; b=QhUP+OwlmCvTCQLqnIs0xYxYfc8Gf/7tbSX/8cS0WANm4tV9Jwe6BZmoTTxw06ozFGrF/0trvDLrImwI6wvpn7bME3eMg8R+Q73r/6MthjHNcwr8tJRJL8/b1djWCfS1wvw/MXb8oC5KkXTTN/wcUHamMKuIj2x+Gb6JYDH/Z0k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485200; c=relaxed/simple; bh=/Wvi9uebpP/hGBuUfLX+2dm76zvxNiYlkCrT9K3LAcE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SZvPj3NeUojv/YVRjIueHBuheVkfpl74uOp0zbTy8HL9wxjxrBhOtsz79FSL5p9SkyN720yHl035kyVjDq75ZTisAyIjyyPIkLCfeJV2ZF7T/OZ89afJLCnuy5bf2aji/jo4H9pgdpumPoSsQN7WhWq1qGDcbfenjwY7N9sAn7c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dd+gFfhN; 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="dd+gFfhN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6E1D3C4CEF7; Mon, 6 Apr 2026 14:19:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485199; bh=/Wvi9uebpP/hGBuUfLX+2dm76zvxNiYlkCrT9K3LAcE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dd+gFfhNTjIpyf6jViQHbupUvZ+ogJxg6QL677/qqXhyKSc4nT5dRzgnutHQK8gzm l3TEgs24a7NVKsagi6MHg9bW9VM4VawufoTlOu8zd/P/Qu9SNhRWkSM72tWZ9lrWP3 PP3EhJX6QtEpvex/Rf2mG1leektT/xEzXCDaukuQBTPjK2bvdrtDVUogSfr123Ieax AThFAr+ZpdS/jGULRp6pDD14M20/saA/SROndo47qosOktmxx/z5wfV5hCR77Ne6to cW9v7/WoR4huhWjyEqILPsX0THrD5zJUxqRkeOH2HRCrb8fZ3MnTKGLmsonenK76W3 4NvqGdb82EaOQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 23/53] selftests/mm: hugepage_settings: use unsigned long in detect_hugetlb_page_size Date: Mon, 6 Apr 2026 17:17:05 +0300 Message-ID: <20260406141735.2179309-24-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" ... instead of size_t to avoid type mismatch in 32 and 64 bit builds. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/hugepage_settings.c | 2 +- tools/testing/selftests/mm/hugepage_settings.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/mm/hugepage_settings.c b/tools/testing= /selftests/mm/hugepage_settings.c index ebaa621c45c6..8f563315b1fc 100644 --- a/tools/testing/selftests/mm/hugepage_settings.c +++ b/tools/testing/selftests/mm/hugepage_settings.c @@ -399,7 +399,7 @@ bool thp_is_enabled(void) return mode =3D=3D 1 || mode =3D=3D 3; } =20 -int detect_hugetlb_page_sizes(size_t sizes[], int max) +int detect_hugetlb_page_sizes(unsigned long sizes[], int max) { DIR *dir =3D opendir("/sys/kernel/mm/hugepages/"); int count =3D 0; diff --git a/tools/testing/selftests/mm/hugepage_settings.h b/tools/testing= /selftests/mm/hugepage_settings.h index 320b97e768e8..9357d07e6c1b 100644 --- a/tools/testing/selftests/mm/hugepage_settings.h +++ b/tools/testing/selftests/mm/hugepage_settings.h @@ -90,7 +90,7 @@ bool thp_is_enabled(void); =20 /* HugeTLB */ =20 -int detect_hugetlb_page_sizes(size_t sizes[], int max); +int detect_hugetlb_page_sizes(unsigned long sizes[], int max); unsigned long default_huge_page_size(void); unsigned long get_free_hugepages(void); =20 --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 E5CB53806B8; Mon, 6 Apr 2026 14:20:05 +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=1775485206; cv=none; b=WkGYdIG/oidc7CmPebGGGAF57Us7JI0nm8RK4oMX1svGGgIhgbsNTkEn8DmTZ/xzRXgnyd/Js9S5mnEJSKBajz65ZOWfcot3C5ZPNI1frkaGxIBcPwW1BJuh7Xm7LhiuAYnnGbCc8gZOGwMOQf2pg2yKjFC6BJRkh/l1VnJAwlA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485206; c=relaxed/simple; bh=6tmwrYqrWIbuMw5GfhGQhH/MUUQ+JMHsDHml8bmka3I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UK6Ke+QUkNknOR7KnN4vNw3SVM78uI1NIvBlLo+LcLNN8dGAGRpCwoaV98sBGirvDFPd2cFjQkl6yMmvAzXcnQdvLGgUJS9/D66qjF8Io4gYgmCjV9rLw9ndT3uczA9KPZOp8JHXgX7gy6DH9Pub9nNdtEoR6fxPzUANKnJNess= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KPUR8tbe; 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="KPUR8tbe" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 35A92C4CEF7; Mon, 6 Apr 2026 14:20:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485205; bh=6tmwrYqrWIbuMw5GfhGQhH/MUUQ+JMHsDHml8bmka3I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KPUR8tbehrq8sIopJHruHA24Q29wdaN7HX0Sz2TRH7iMVw5RMfgKIetZ9TB+Q8AA6 G5NHtI7C6wjBhU9iWbl8OrsdtgjyLHaayZ6DejemmqazztZwFBMx6C++c2fGzXZfuw LfSeHm7zncRGlptJZC098O1y6faDJknZ/k3GljRFrZgHmlQDOnmZHEnBXS3ZVFEnCk F+jfBh/dlcxQ1i3tYuJT4HQOzwsVzlx4lT5NATSuKcS0qwjMow4aUCsmP5txEjbRDN zgfGn7Ud1YxY3jW2THQD8S32qDM1sGTuQwXgo7PwNKx1PwmMEZhyRk1n24l0lIBLXw 8zc+m/aFOWtmg== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 24/53] selftests/mm: hugepage_settings: add APIs to get and set nr_hugepages Date: Mon, 6 Apr 2026 17:17:06 +0300 Message-ID: <20260406141735.2179309-25-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Add APIs that allow reading and writing of /sys/kernel/mm/hugepages/hugepages-NkB/nr_hugepages to detect and change the amount of HugeTLB pages of different sizes. Signed-off-by: Mike Rapoport (Microsoft) --- .../testing/selftests/mm/hugepage_settings.c | 25 +++++++++++++++++++ .../testing/selftests/mm/hugepage_settings.h | 23 +++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/tools/testing/selftests/mm/hugepage_settings.c b/tools/testing= /selftests/mm/hugepage_settings.c index 8f563315b1fc..5961229b9931 100644 --- a/tools/testing/selftests/mm/hugepage_settings.c +++ b/tools/testing/selftests/mm/hugepage_settings.c @@ -464,3 +464,28 @@ unsigned long get_free_hugepages(void) fclose(f); return fhp; } + +static void hugetlb_sysfs_path(char *buf, size_t buflen, + unsigned long size, const char *attr) +{ + snprintf(buf, buflen, "/sys/kernel/mm/hugepages/hugepages-%lukB/%s", + size / 1024, attr); +} + +unsigned long hugetlb_nr_pages(unsigned long size) +{ + char path[PATH_MAX]; + + hugetlb_sysfs_path(path, sizeof(path), size, "nr_hugepages"); + + return read_num(path); +} + +void hugetlb_set_nr_pages(unsigned long size, unsigned long nr) +{ + char path[PATH_MAX]; + + hugetlb_sysfs_path(path, sizeof(path), size, "nr_hugepages"); + + write_num(path, nr); +} diff --git a/tools/testing/selftests/mm/hugepage_settings.h b/tools/testing= /selftests/mm/hugepage_settings.h index 9357d07e6c1b..d6f41a45e8ee 100644 --- a/tools/testing/selftests/mm/hugepage_settings.h +++ b/tools/testing/selftests/mm/hugepage_settings.h @@ -94,4 +94,27 @@ int detect_hugetlb_page_sizes(unsigned long sizes[], int= max); unsigned long default_huge_page_size(void); unsigned long get_free_hugepages(void); =20 +unsigned long hugetlb_nr_pages(unsigned long size); +void hugetlb_set_nr_pages(unsigned long size, unsigned long nr); + +static inline unsigned long hugetlb_nr_default_pages(void) +{ + unsigned long size =3D default_huge_page_size(); + + if (!size) + return 0; + + return hugetlb_nr_pages(size); +} + +static inline void hugetlb_set_nr_default_pages(unsigned long nr) +{ + unsigned long size =3D default_huge_page_size(); + + if (!size) + return; + + hugetlb_set_nr_pages(size, nr); +} + #endif /* __THP_SETTINGS_H__ */ --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 8FD2E3806DA; Mon, 6 Apr 2026 14:20:11 +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=1775485211; cv=none; b=frZ4UvCBMbgiCXbNTHEG0EGCiFECktfHuvXTlwXA2a3zXnX0J1XZ0nSYBjE9UxA48vJ2JXfrHunMNSwCPoCs7GqpTHggNfrusJEkBgEStyDTGUW53DZpmxz78Eo3tlRIHTDkL2mRT7FeoytEXQLIwC7D+s5CV4PqOLYA8GujSEQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485211; c=relaxed/simple; bh=jAQxw9MbYkXsl544OFupWFjq2DLx0d+HujNgYQfq/0c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ppW697MojzpPzt4ukilLTuA+0D+iH27rGhFsPm93f8ODcgxlagweQkuJGRNC6x2C+qK5ddMaTLvI5Mf5MEhJparWxzIM3JfpdUh/X9h57Zzl818u/mbOAJBWN9pKWjhcGwqf8jdAtwQd+zvZp2N3GkhdFQkr/7x3kQGmK2vskMw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=f5NigmBK; 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="f5NigmBK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0098DC2BCAF; Mon, 6 Apr 2026 14:20:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485211; bh=jAQxw9MbYkXsl544OFupWFjq2DLx0d+HujNgYQfq/0c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=f5NigmBK8QIOfJAopcw9vRcnIMffZrXxyBZSo7UgnuIqg8qJ3EeqB6BEAmZnKcOaJ etrVP2Hz2l8un6VhkhrUzhz1de++sY4Qm7criGycPGBbU5QrFF5ebl8906dGI4013I fTdlKe/oUQpS7wLKLisddcmLAKu7KgOLpM8RQBBYhozdeBtejjuaYQeILoYCPfQMxP /cWYme2Mtc6xj8cNJWrisWM8IdfI3o26zSGyVzhYRa8qToK/mDp1rMBMP6+QLvYtS8 npzHjmE6BVJI6X+x2khvabMNTmwk6CV8WNOIE53D4JIFY1J1VbaIa51lAXDQhQfseg QtKK/E1dPGCwA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 25/53] selftests/mm: hugepage_settings: rename get_free_hugepages() Date: Mon, 6 Apr 2026 17:17:07 +0300 Message-ID: <20260406141735.2179309-26-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" ... to hugetlb_free_default_hugepages() for consistency with hugetlb_nr_default_pages(). Signed-off-by: Mike Rapoport (Microsoft) --- .../testing/selftests/mm/hugepage_settings.c | 28 ++++++------------- .../testing/selftests/mm/hugepage_settings.h | 12 +++++++- tools/testing/selftests/mm/hugetlb-madvise.c | 4 +-- tools/testing/selftests/mm/hugetlb_dio.c | 6 ++-- .../selftests/mm/hugetlb_fault_after_madv.c | 2 +- .../selftests/mm/hugetlb_madv_vs_map.c | 2 +- tools/testing/selftests/mm/uffd-stress.c | 2 +- 7 files changed, 28 insertions(+), 28 deletions(-) diff --git a/tools/testing/selftests/mm/hugepage_settings.c b/tools/testing= /selftests/mm/hugepage_settings.c index 5961229b9931..4ae7332b5e1b 100644 --- a/tools/testing/selftests/mm/hugepage_settings.c +++ b/tools/testing/selftests/mm/hugepage_settings.c @@ -446,25 +446,6 @@ unsigned long default_huge_page_size(void) return hps; } =20 -unsigned long get_free_hugepages(void) -{ - unsigned long fhp =3D 0; - char *line =3D NULL; - size_t linelen =3D 0; - FILE *f =3D fopen("/proc/meminfo", "r"); - - if (!f) - return fhp; - while (getline(&line, &linelen, f) > 0) { - if (sscanf(line, "HugePages_Free: %lu", &fhp) =3D=3D 1) - break; - } - - free(line); - fclose(f); - return fhp; -} - static void hugetlb_sysfs_path(char *buf, size_t buflen, unsigned long size, const char *attr) { @@ -489,3 +470,12 @@ void hugetlb_set_nr_pages(unsigned long size, unsigned= long nr) =20 write_num(path, nr); } + +unsigned long hugetlb_free_pages(unsigned long size) +{ + char path[PATH_MAX]; + + hugetlb_sysfs_path(path, sizeof(path), size, "free_hugepages"); + + return read_num(path); +} diff --git a/tools/testing/selftests/mm/hugepage_settings.h b/tools/testing= /selftests/mm/hugepage_settings.h index d6f41a45e8ee..57fbf2f57e13 100644 --- a/tools/testing/selftests/mm/hugepage_settings.h +++ b/tools/testing/selftests/mm/hugepage_settings.h @@ -92,10 +92,10 @@ bool thp_is_enabled(void); =20 int detect_hugetlb_page_sizes(unsigned long sizes[], int max); unsigned long default_huge_page_size(void); -unsigned long get_free_hugepages(void); =20 unsigned long hugetlb_nr_pages(unsigned long size); void hugetlb_set_nr_pages(unsigned long size, unsigned long nr); +unsigned long hugetlb_free_pages(unsigned long size); =20 static inline unsigned long hugetlb_nr_default_pages(void) { @@ -117,4 +117,14 @@ static inline void hugetlb_set_nr_default_pages(unsign= ed long nr) hugetlb_set_nr_pages(size, nr); } =20 +static inline unsigned long hugetlb_free_default_pages(void) +{ + unsigned long size =3D default_huge_page_size(); + + if (!size) + return 0; + + return hugetlb_free_pages(size); +} + #endif /* __THP_SETTINGS_H__ */ diff --git a/tools/testing/selftests/mm/hugetlb-madvise.c b/tools/testing/s= elftests/mm/hugetlb-madvise.c index 316384d919db..3c08eb6db6a2 100644 --- a/tools/testing/selftests/mm/hugetlb-madvise.c +++ b/tools/testing/selftests/mm/hugetlb-madvise.c @@ -27,7 +27,7 @@ =20 #define validate_free_pages(exp_free) \ do { \ - unsigned long fhp =3D get_free_hugepages(); \ + unsigned long fhp =3D hugetlb_free_default_pages(); \ if (fhp !=3D (exp_free)) \ ksft_exit_fail_msg("Unexpected number of free " \ "huge pages %ld, expected %ld line %d\n", \ @@ -68,7 +68,7 @@ int main(int argc, char **argv) if (!base_page_size) ksft_exit_fail_msg("Unable to determine base page size\n"); =20 - free_hugepages =3D get_free_hugepages(); + free_hugepages =3D hugetlb_free_default_pages(); if (free_hugepages < MIN_FREE_PAGES) ksft_exit_skip("Not enough free huge pages (have %lu, need %d)\n", free_= hugepages, MIN_FREE_PAGES); =20 diff --git a/tools/testing/selftests/mm/hugetlb_dio.c b/tools/testing/selft= ests/mm/hugetlb_dio.c index 81e3f7bc8e76..47019433ddaf 100644 --- a/tools/testing/selftests/mm/hugetlb_dio.c +++ b/tools/testing/selftests/mm/hugetlb_dio.c @@ -93,7 +93,7 @@ static void run_dio_using_hugetlb(int fd, unsigned int st= art_off, ksft_exit_fail_perror("lseek failed\n"); =20 /* Get the free huge pages before allocation */ - free_hpage_b =3D get_free_hugepages(); + free_hpage_b =3D hugetlb_free_default_pages(); if (free_hpage_b =3D=3D 0) { close(fd); ksft_exit_skip("No free hugepage, exiting!\n"); @@ -121,7 +121,7 @@ static void run_dio_using_hugetlb(int fd, unsigned int = start_off, munmap(orig_buffer, h_pagesize); =20 /* Get the free huge pages after unmap*/ - free_hpage_a =3D get_free_hugepages(); + free_hpage_a =3D hugetlb_free_default_pages(); =20 ksft_print_msg("No. Free pages before allocation : %d\n", free_hpage_b); ksft_print_msg("No. Free pages after munmap : %d\n", free_hpage_a); @@ -142,7 +142,7 @@ int main(void) ksft_print_header(); =20 /* Check if huge pages are free */ - if (!get_free_hugepages()) + if (!hugetlb_free_default_pages()) ksft_exit_skip("No free hugepage, exiting\n"); =20 fd =3D open("/tmp", O_TMPFILE | O_RDWR | O_DIRECT, 0664); diff --git a/tools/testing/selftests/mm/hugetlb_fault_after_madv.c b/tools/= testing/selftests/mm/hugetlb_fault_after_madv.c index abc3904c5268..c718dd065d53 100644 --- a/tools/testing/selftests/mm/hugetlb_fault_after_madv.c +++ b/tools/testing/selftests/mm/hugetlb_fault_after_madv.c @@ -78,7 +78,7 @@ int main(void) ksft_print_msg("[INFO] detected default hugetlb page size: %zu KiB\n", huge_page_size / 1024); =20 - free_hugepages =3D get_free_hugepages(); + free_hugepages =3D hugetlb_free_default_pages(); if (free_hugepages !=3D 1) { ksft_exit_skip("This test needs one and only one page to execute. Got %l= u\n", free_hugepages); diff --git a/tools/testing/selftests/mm/hugetlb_madv_vs_map.c b/tools/testi= ng/selftests/mm/hugetlb_madv_vs_map.c index ac60b4f18784..dfbd71a7f709 100644 --- a/tools/testing/selftests/mm/hugetlb_madv_vs_map.c +++ b/tools/testing/selftests/mm/hugetlb_madv_vs_map.c @@ -89,7 +89,7 @@ int main(void) ksft_print_header(); ksft_set_plan(1); =20 - free_hugepages =3D get_free_hugepages(); + free_hugepages =3D hugetlb_free_default_pages(); =20 if (free_hugepages !=3D 1) ksft_exit_skip("This test needs one and only one page to execute. Got %l= u\n", diff --git a/tools/testing/selftests/mm/uffd-stress.c b/tools/testing/selft= ests/mm/uffd-stress.c index e92a85463eb1..7e37cf3d27f6 100644 --- a/tools/testing/selftests/mm/uffd-stress.c +++ b/tools/testing/selftests/mm/uffd-stress.c @@ -480,7 +480,7 @@ int main(int argc, char **argv) * for racy extra reservation of hugepages. */ if (gopts->test_type =3D=3D TEST_HUGETLB && - get_free_hugepages() < 2 * (bytes / gopts->page_size) + gopts->nr_para= llel - 1) + hugetlb_free_default_pages() < 2 * (bytes / gopts->page_size) + gopts-= >nr_parallel - 1) ksft_exit_skip("Skipping userfaultfd... not enough hugepages\n"); =20 gopts->nr_pages_per_cpu =3D bytes / gopts->page_size / gopts->nr_parallel; --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 24B98381AE1; Mon, 6 Apr 2026 14:20:17 +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=1775485217; cv=none; b=jW/xiKClEa2tJymqdKL5WPVkOcooMMiVt37ZswExmpuJsrkt6r0vK3k1cG22FCfli3lGe0q5iVd2Q0QvJrnoki6PKF9YVHHHFqQ4j4VcZf1a84MQBfNI5oE8VcLDlsHYkI2W3sBQCgiQ4Hc9LuDQWmKluDXrYwyLuHfbYAeCdO8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485217; c=relaxed/simple; bh=uOk/wAXtSYozRkV6PC7dCLvIk2f3cksuzUZUEbVUqsQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a7+dF3UNVhlOWmRTaHdOiCVTP1PxYlgUNvYDNx+uHbXgX0GA7J/yNzZuoSssDL0CaszBsPkG6E69sTI/1T2PVtKuJoxpPWePjKGr61M51ENfdbnY0/6t3fsNsc4G8SH8/oRxMHlJH0J82WtEbgQPf6YKEGnmxhW4wX3L/BDfR5c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DunkWWd2; 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="DunkWWd2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BC8F9C4CEF7; Mon, 6 Apr 2026 14:20:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485217; bh=uOk/wAXtSYozRkV6PC7dCLvIk2f3cksuzUZUEbVUqsQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DunkWWd2ts2IPlOOfFbg/CuY+qeprPXKT7cKrxJoIq0GnNayggZlB6z+6r1vEtJ0Y i5K8GZwJctvEYhOSIetlR9m0/SK0js9RWFXgUnBNLKDqRKIMHPyInL3g/a6bWkCnYm v4oVV/XjXOjMA+sxpbMZEJOac7tZGlu+3lE/yCFhEuDQ2IbQVQVUMXWD1y47HDW/Ip n7fMBVKeEOJ0C/RVd3Qk5w5AzQjD/nQ3ANGDoVGnAaPAzWz/oqRXw++Dm1rvUKHUo+ T4SnPD9RHof37EjSqtiPVXVqhVrYXCpyWTEuVZZYlxsS3i8rFAiOGku7fQdOrsyIui 1dTsiErU0oEHA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 26/53] selftests/mm: hugepage_settings: add APIs for HugeTLB setup and teardown Date: Mon, 6 Apr 2026 17:17:08 +0300 Message-ID: <20260406141735.2179309-27-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" A lot of tests require free HugeTLB pages. Some need just a few default huge pages, some need a certain amount of memory available as HugeTLB, and some just skip lots of tests if huge pages of all supported sizes are not available. This all resulted in a huge mess in run_vmtests.sh that sets up some huge pages, adjusts them later and restores some of the settings if the stars align. Add APIs that allow saving the state of HugeTLB and setting up the desired amount of HugeTLB pages. Saving the state also registers atexit() callback and signal handler that will ensure restoration of HugeTLB state. Since many tests use both HugeTLB and THP, the atexit() callbacks and signal handler are restoring both. For kselftest_harness tests that run fixture setups and test in child processes add a constructor that will save and restore settings in the main process. Signed-off-by: Mike Rapoport (Microsoft) --- .../testing/selftests/mm/hugepage_settings.c | 176 +++++++++++++++--- .../testing/selftests/mm/hugepage_settings.h | 30 ++- 2 files changed, 181 insertions(+), 25 deletions(-) diff --git a/tools/testing/selftests/mm/hugepage_settings.c b/tools/testing= /selftests/mm/hugepage_settings.c index 4ae7332b5e1b..3eef87e812ba 100644 --- a/tools/testing/selftests/mm/hugepage_settings.c +++ b/tools/testing/selftests/mm/hugepage_settings.c @@ -306,31 +306,12 @@ void thp_restore_settings(void) thp_write_settings(&saved_settings); } =20 -static void thp_restore_settings_atexit(void) +static void __thp_save_settings(void) { - thp_restore_settings(); -} - -static void thp_restore_settings_sighandler(int sig) -{ - /* exit() will invoke the thp_restore_settings_atexit handler. */ - exit(KSFT_FAIL); -} + if (!thp_available()) + return; =20 -void thp_save_settings(void) -{ thp_read_settings(&saved_settings); - - /* - * setup exit hooks to make sure THP settings are restored on graceful - * and error exits and signals - */ - atexit(thp_restore_settings_atexit); - signal(SIGTERM, thp_restore_settings_sighandler); - signal(SIGINT, thp_restore_settings_sighandler); - signal(SIGHUP, thp_restore_settings_sighandler); - signal(SIGQUIT, thp_restore_settings_sighandler); - thp_settings_saved =3D true; } =20 @@ -399,11 +380,31 @@ bool thp_is_enabled(void) return mode =3D=3D 1 || mode =3D=3D 3; } =20 +#define HUGETLB_MAX_NR_PAGESIZES 10 +struct hugetlb_settings { + unsigned long free_hugepages[HUGETLB_MAX_NR_PAGESIZES]; + unsigned long nr_hugepages[HUGETLB_MAX_NR_PAGESIZES]; + unsigned long sizes[HUGETLB_MAX_NR_PAGESIZES]; + unsigned long default_size; + int nr_sizes; +}; + +static struct hugetlb_settings hugetlb_saved_settings; +bool hugetlb_settings_saved; + int detect_hugetlb_page_sizes(unsigned long sizes[], int max) { - DIR *dir =3D opendir("/sys/kernel/mm/hugepages/"); + static struct hugetlb_settings *settings =3D &hugetlb_saved_settings; + DIR *dir; int count =3D 0; =20 + if (settings->nr_sizes) { + for (count =3D 0; count < settings->nr_sizes; count++) + sizes[count] =3D settings->sizes[count]; + return settings->nr_sizes; + } + + dir =3D opendir("/sys/kernel/mm/hugepages/"); if (!dir) return 0; =20 @@ -427,11 +428,16 @@ int detect_hugetlb_page_sizes(unsigned long sizes[], = int max) =20 unsigned long default_huge_page_size(void) { + static struct hugetlb_settings *settings =3D &hugetlb_saved_settings; unsigned long hps =3D 0; char *line =3D NULL; size_t linelen =3D 0; - FILE *f =3D fopen("/proc/meminfo", "r"); + FILE *f; + + if (settings->default_size) + return settings->default_size; =20 + f =3D fopen("/proc/meminfo", "r"); if (!f) return 0; while (getline(&line, &linelen, f) > 0) { @@ -479,3 +485,125 @@ unsigned long hugetlb_free_pages(unsigned long size) =20 return read_num(path); } + +bool hugetlb_setup_default(unsigned long nr) +{ + unsigned long size; + + hugetlb_save_settings(); + + size =3D default_huge_page_size(); + hugetlb_set_nr_pages(size, nr); + + return hugetlb_free_pages(size) =3D=3D nr; +} + +unsigned long hugetlb_setup(unsigned long nr, unsigned long sizes[], + int max) +{ + unsigned long enabled[10]; + int nr_sizes =3D 0; + int nr_enabled; + + nr_enabled =3D detect_hugetlb_page_sizes(enabled, ARRAY_SIZE(enabled)); + if (!nr_enabled) + return 0; + + if (nr_enabled > max) { + ksft_print_msg("detected %d huge page sizes, will only test %d\n", nr_en= abled, max); + nr_enabled =3D max; + } + + /* If HugeTLB is supported, request 2 HugeTLB pages of every size. */ + for (int i =3D 0; i < nr_enabled; i++) { + hugetlb_set_nr_pages(enabled[i], nr); + if (hugetlb_free_pages(enabled[i]) < nr) + continue; + + sizes[nr_sizes++] =3D enabled[i]; + } + + return nr_sizes; +} + +static void __hugetlb_save_settings(void) +{ + struct hugetlb_settings *settings =3D &hugetlb_saved_settings; + int nr_sizes; + + settings->default_size =3D default_huge_page_size(); + if (!settings->default_size) + return; + + nr_sizes =3D detect_hugetlb_page_sizes(settings->sizes, + HUGETLB_MAX_NR_PAGESIZES); + if (!nr_sizes) { + settings->default_size =3D 0; + return; + } + + for (int i =3D 0; i < nr_sizes; i++) { + unsigned long sz =3D settings->sizes[i]; + + if (!sz) + continue; + + settings->free_hugepages[i] =3D hugetlb_free_pages(sz); + settings->nr_hugepages[i] =3D hugetlb_nr_pages(sz); + } + + settings->nr_sizes =3D nr_sizes; + hugetlb_settings_saved =3D true; +} + +void hugetlb_restore_settings(void) +{ + struct hugetlb_settings *settings =3D &hugetlb_saved_settings; + + if (!hugetlb_settings_saved || !settings->default_size) + return; + + for (int i =3D 0; i < HUGETLB_MAX_NR_PAGESIZES; i++) { + unsigned long sz =3D settings->sizes[i]; + + if (!sz) + continue; + + hugetlb_set_nr_pages(sz, settings->nr_hugepages[i]); + } +} + +static void hugepage_restore_settings_atexit(void) +{ + if (thp_settings_saved) + thp_restore_settings(); + if (hugetlb_settings_saved) + hugetlb_restore_settings(); +} + +static void hugepage_restore_settings_sighandler(int sig) +{ + /* exit() will invoke the hugetlb_restore_settings_atexit handler. */ + exit(KSFT_FAIL); +} + +void hugepage_save_settings(bool thp, bool hugetlb) +{ + if (!thp && !hugetlb) + return; + + if (thp) + __thp_save_settings(); + if (hugetlb) + __hugetlb_save_settings(); + + /* + * setup exit hooks to make sure THP settings are restored on graceful + * and error exits and signals + */ + atexit(hugepage_restore_settings_atexit); + signal(SIGTERM, hugepage_restore_settings_sighandler); + signal(SIGINT, hugepage_restore_settings_sighandler); + signal(SIGHUP, hugepage_restore_settings_sighandler); + signal(SIGQUIT, hugepage_restore_settings_sighandler); +} diff --git a/tools/testing/selftests/mm/hugepage_settings.h b/tools/testing= /selftests/mm/hugepage_settings.h index 57fbf2f57e13..d6a1b4e5f734 100644 --- a/tools/testing/selftests/mm/hugepage_settings.h +++ b/tools/testing/selftests/mm/hugepage_settings.h @@ -6,6 +6,8 @@ #include #include =20 +void hugepage_save_settings(bool thp, bool hugetlb); + /* Transparent Huge Pages (THP) */ =20 enum thp_enabled { @@ -79,7 +81,11 @@ struct thp_settings *thp_current_settings(void); void thp_push_settings(struct thp_settings *settings); void thp_pop_settings(void); void thp_restore_settings(void); -void thp_save_settings(void); + +static inline void thp_save_settings(void) +{ + hugepage_save_settings(/* thp =3D */ true, /* hugetlb =3D */ false); +} =20 void thp_set_read_ahead_path(char *path); unsigned long thp_supported_orders(void); @@ -97,6 +103,13 @@ unsigned long hugetlb_nr_pages(unsigned long size); void hugetlb_set_nr_pages(unsigned long size, unsigned long nr); unsigned long hugetlb_free_pages(unsigned long size); =20 +static inline void hugetlb_save_settings(void) +{ + hugepage_save_settings(/* thp =3D */ false, /* hugetlb =3D */ true); +} + +void hugetlb_restore_settings(void); + static inline unsigned long hugetlb_nr_default_pages(void) { unsigned long size =3D default_huge_page_size(); @@ -127,4 +140,19 @@ static inline unsigned long hugetlb_free_default_pages= (void) return hugetlb_free_pages(size); } =20 +static inline bool hugetlb_available(void) +{ + return default_huge_page_size() !=3D 0; +} + +bool hugetlb_setup_default(unsigned long nr); +unsigned long hugetlb_setup(unsigned long nr, unsigned long sizes[], + int max); + +#define HUGETLB_SETUP_DEFAULT_PAGES(nr_pages) \ +static void __attribute__((constructor)) __hugetlb_setup_default(void) \ +{ \ + hugetlb_setup_default((nr_pages)); \ +} + #endif /* __THP_SETTINGS_H__ */ --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 260FB2F5A12; Mon, 6 Apr 2026 14:20:22 +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=1775485223; cv=none; b=rEbw5i/ryZaV+Vd9loni+o8q56UHgUNg56kmvAQy4E49C5JRcMXFsbqAlOe2sApw9JfOex5MR5H2l5eCQNpfp7nmcalF6KdfF4keWD5WR5+yhp4MPjye8PmrFdOyWW1eF7oAksBGN1hKJ8am4zlYRhijX+BE9JF9y37XAtIFM2A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485223; c=relaxed/simple; bh=R/W5pZYTUPbeFRpIiJm6n8WLPptkA9w+3mZt5IDX8BM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JD90Keu7Hy8BIe6Wr24+D1/NQxIz4T2lk39xtk++1Oujd1PADP4WbMT8txQ/il2+tzQPbxv5EE1r6icfxBCEFCXLGkTAOQHEmkh5R4JiZa2h3Qipty4dMWFmqXZiAN1l1oOlIZ3WATuJOtg2ZR9z1p8kUXB2hSydgWtXqCakzv8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=e6vHFPRT; 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="e6vHFPRT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 83F93C4CEF7; Mon, 6 Apr 2026 14:20:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485222; bh=R/W5pZYTUPbeFRpIiJm6n8WLPptkA9w+3mZt5IDX8BM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=e6vHFPRTbwOhOPl/alglbws9iwwub5pqUgDyGZ/2xxJOmb/eULHZ5c6uM0OJrQ732 YJCqNf+S14p4OA1PP74A1tGBTSJQERtAHG2p1IpDxZb62ViZLqGaeXd+c7j7Ze2Nfz WkOacirHsCokvNz9FmfAYc0DwuvhdL7XvBV/EDeDnQVT+75MrKCTMCT6ZxdA2izz0C rMo6sG3Se1zFLkr4fv/7ExXcGeBDnlr+bK4yQjoIo23l28H88/rITX8lKt+1+LiDv4 Vs9QujcUUVxrC4ff/F6rU7Nkq6ERu4iV/CRWzCrbduXWx2UnlLu77VKTVoAwTd/4x8 C3mP34pt6V/tw== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 27/53] selftests/mm: move read_file(), read_num() and write_num() to vm_util Date: Mon, 6 Apr 2026 17:17:09 +0300 Message-ID: <20260406141735.2179309-28-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" These are useful helpers for writing and reading sysfs and proc files. Make them available to the tests that don't use thp_settings. While on it make write_num() use "%lu" instead of "%ld" to match 'unsigned long num' argument type. Signed-off-by: Mike Rapoport (Microsoft) --- .../testing/selftests/mm/hugepage_settings.c | 41 ------------------- .../testing/selftests/mm/hugepage_settings.h | 4 -- tools/testing/selftests/mm/vm_util.c | 39 ++++++++++++++++++ tools/testing/selftests/mm/vm_util.h | 3 ++ 4 files changed, 42 insertions(+), 45 deletions(-) diff --git a/tools/testing/selftests/mm/hugepage_settings.c b/tools/testing= /selftests/mm/hugepage_settings.c index 3eef87e812ba..339802ecc8e4 100644 --- a/tools/testing/selftests/mm/hugepage_settings.c +++ b/tools/testing/selftests/mm/hugepage_settings.c @@ -48,47 +48,6 @@ static const char * const shmem_enabled_strings[] =3D { NULL }; =20 -int read_file(const char *path, char *buf, size_t buflen) -{ - int fd; - ssize_t numread; - - fd =3D open(path, O_RDONLY); - if (fd =3D=3D -1) - return 0; - - numread =3D read(fd, buf, buflen - 1); - if (numread < 1) { - close(fd); - return 0; - } - - buf[numread] =3D '\0'; - close(fd); - - return (unsigned int) numread; -} - -unsigned long read_num(const char *path) -{ - char buf[21]; - - if (read_file(path, buf, sizeof(buf)) < 0) { - perror("read_file()"); - exit(EXIT_FAILURE); - } - - return strtoul(buf, NULL, 10); -} - -void write_num(const char *path, unsigned long num) -{ - char buf[21]; - - sprintf(buf, "%ld", num); - write_file(path, buf, strlen(buf) + 1); -} - int thp_read_string(const char *name, const char * const strings[]) { char path[PATH_MAX]; diff --git a/tools/testing/selftests/mm/hugepage_settings.h b/tools/testing= /selftests/mm/hugepage_settings.h index d6a1b4e5f734..3d1a4f18be30 100644 --- a/tools/testing/selftests/mm/hugepage_settings.h +++ b/tools/testing/selftests/mm/hugepage_settings.h @@ -66,10 +66,6 @@ struct thp_settings { struct shmem_hugepages_settings shmem_hugepages[NR_ORDERS]; }; =20 -int read_file(const char *path, char *buf, size_t buflen); -unsigned long read_num(const char *path); -void write_num(const char *path, unsigned long num); - int thp_read_string(const char *name, const char * const strings[]); void thp_write_string(const char *name, const char *val); unsigned long thp_read_num(const char *name); diff --git a/tools/testing/selftests/mm/vm_util.c b/tools/testing/selftests= /mm/vm_util.c index e62e2a473123..752566f75c0b 100644 --- a/tools/testing/selftests/mm/vm_util.c +++ b/tools/testing/selftests/mm/vm_util.c @@ -699,6 +699,27 @@ int unpoison_memory(unsigned long pfn) return ret > 0 ? 0 : -errno; } =20 +int read_file(const char *path, char *buf, size_t buflen) +{ + int fd; + ssize_t numread; + + fd =3D open(path, O_RDONLY); + if (fd =3D=3D -1) + return 0; + + numread =3D read(fd, buf, buflen - 1); + if (numread < 1) { + close(fd); + return 0; + } + + buf[numread] =3D '\0'; + close(fd); + + return (unsigned int) numread; +} + void write_file(const char *path, const char *buf, size_t buflen) { int fd, saved_errno; @@ -722,3 +743,21 @@ void write_file(const char *path, const char *buf, siz= e_t buflen) ksft_exit_fail_msg("%s write(%.*s) is truncated, expected %zu bytes, got= %zd bytes\n", path, (int)(buflen - 1), buf, buflen - 1, numwritten); } + +unsigned long read_num(const char *path) +{ + char buf[21]; + + if (read_file(path, buf, sizeof(buf)) < 0) + ksft_exit_fail_perror("read_file()"); + + return strtoul(buf, NULL, 10); +} + +void write_num(const char *path, unsigned long num) +{ + char buf[21]; + + sprintf(buf, "%lu", num); + write_file(path, buf, strlen(buf) + 1); +} diff --git a/tools/testing/selftests/mm/vm_util.h b/tools/testing/selftests= /mm/vm_util.h index 195bf2e26792..5fc9707f6b9a 100644 --- a/tools/testing/selftests/mm/vm_util.h +++ b/tools/testing/selftests/mm/vm_util.h @@ -165,3 +165,6 @@ int unpoison_memory(unsigned long pfn); #define PAGEMAP_PFN(ent) ((ent) & ((1ull << 55) - 1)) =20 void write_file(const char *path, const char *buf, size_t buflen); +int read_file(const char *path, char *buf, size_t buflen); +unsigned long read_num(const char *path); +void write_num(const char *path, unsigned long num); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 E01BA3803EB; Mon, 6 Apr 2026 14:20:28 +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=1775485228; cv=none; b=ZiiXIm5fWR0A8AhOqaYlvdcsqxoRpZiq837YVmjKBbH8msBoWJ84kO2ZtiC4mKOq69L5/YCHm7Ssp6JLVNg5u5+mTpIlibmSUCYznb3EA3U/6wJmKh9YxQX3z4vqcrEFZ1SLNpD4pttSR6w2XKdHLoHWCJCUlpFYjYmvU4HEVDY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485228; c=relaxed/simple; bh=tO4w/saWs4TngI1dGJjVb/BDaQv7f0xtr7dZaOtNvYY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=B11arhg1RjuDyHlMhNMxhkUuq7mWHvV5g063Thv650u/EJWZvtvaiVQcSPTaaiiyqKBVv+Vg5C8SIeTy6+Li64SMco1LQsx4XX/S96WchMbPXNWhE5Su7hhgSS2hjf9lPxZoO0ZJk/c3benBqMT3BOkYyLn5wM8beM2y5gnTx5A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qPJrWVSY; 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="qPJrWVSY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4A920C4CEF7; Mon, 6 Apr 2026 14:20:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485228; bh=tO4w/saWs4TngI1dGJjVb/BDaQv7f0xtr7dZaOtNvYY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qPJrWVSYPEcYgqWceoyxpdlNMa2cxJaWbuvyhl+Wf32f9z5uavVsPdQxgPzIrwgHQ N8JmXTzhzNKBsrEB70pVaZMU8CYlUI7oDNSG73oQXwTHZBInQf8/zwChhEaIZnzdVS Xwe6wmCtsUfN0mgHw1NR/CtQoMf0Q4dXbCl9SlPDX/LA8UuFZUz6m7xmu323Ikl8dr 0aNx9EcqzS47/Mpmpv03X7uHOccrv9ixIK7P8i2zRLkle+wyHtivXl0jNdkFuGxiEj 423+e1VWKXe/FPU3eIjleclk73L9pctdblACnQynTaVw1SujZj6LkUGuoIJX/kFibi aZ2lyEbPLiRrw== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 28/53] selftests/mm: vm_util: add helpers to set and restore shm limits Date: Mon, 6 Apr 2026 17:17:10 +0300 Message-ID: <20260406141735.2179309-29-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hugetlb-shm and thuge-gen tests require that limits defined by /proc/sys/kernel/{shmmax,shmall} should be higher than certain values. Add helpers that allow setting these limits and restoring their settings on a test exit. They will be used later in hugetlb-shm and thuge-gen. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/vm_util.c | 28 ++++++++++++++++++++++++++++ tools/testing/selftests/mm/vm_util.h | 9 +++++++++ 2 files changed, 37 insertions(+) diff --git a/tools/testing/selftests/mm/vm_util.c b/tools/testing/selftests= /mm/vm_util.c index 752566f75c0b..5a89c2d903be 100644 --- a/tools/testing/selftests/mm/vm_util.c +++ b/tools/testing/selftests/mm/vm_util.c @@ -761,3 +761,31 @@ void write_num(const char *path, unsigned long num) sprintf(buf, "%lu", num); write_file(path, buf, strlen(buf) + 1); } + +static unsigned long shmall, shmmax; + +void __shm_limits_restore(void) +{ + if (shmmax) + write_num("/proc/sys/kernel/shmmax", shmmax); + if (shmall) + write_num("/proc/sys/kernel/shmall", shmall); +} + +void shm_limits_prepare(unsigned long length) +{ + unsigned long nr =3D length / psize(); + unsigned long val; + + val =3D read_num("/proc/sys/kernel/shmmax"); + if (val < length) { + write_num("/proc/sys/kernel/shmmax", length); + shmmax =3D val; + } + + val =3D read_num("/proc/sys/kernel/shmall"); + if (val < nr) { + write_num("/proc/sys/kernel/shmall", nr); + shmall =3D val; + } +} diff --git a/tools/testing/selftests/mm/vm_util.h b/tools/testing/selftests= /mm/vm_util.h index 5fc9707f6b9a..ea8fc8fdf0eb 100644 --- a/tools/testing/selftests/mm/vm_util.h +++ b/tools/testing/selftests/mm/vm_util.h @@ -168,3 +168,12 @@ void write_file(const char *path, const char *buf, siz= e_t buflen); int read_file(const char *path, char *buf, size_t buflen); unsigned long read_num(const char *path); void write_num(const char *path, unsigned long num); + +void shm_limits_prepare(unsigned long length); +void __shm_limits_restore(void); + +#define SHM_LIMITS_RESTORE() \ +static void __attribute__((destructor)) shm_limits_restore(void) \ +{ \ + __shm_limits_restore(); \ +} --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 A6C96381B0E; Mon, 6 Apr 2026 14:20:34 +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=1775485234; cv=none; b=VokAculH/Iyb3J6mGf/lFGI6626Gnwx6FkLqOCx0Q/sL1LHGmQVMeNIibCN/oUa1fy3BU34qdtQPJ4WJz5GixzN4bZehwtZAB3x0Cv3f5pvicyYlBuF+iMhauPswp3/qQO2wEEQwhvYTwSjgfII0MVlshbGa9+y5iCNAtr8KY54= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485234; c=relaxed/simple; bh=t2OQ6d8PPidPjQSh+RBxS6XeDUdzwdvT/+uZ5YR7P1Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Yy0qcfhcUoeGkROMNASS5+5aQEzVvV+N9dCQO/8sKHLTp5s5Z1iESomUyCbB4FVtEibcKQojpf7I42siBkuQsIEonSWlM+fz4VgDlOYj5FXT0ePMwi9M6m8aVElqSgnveXirSR85fomj+0Akh33Am1m+Kty0Ld+TIAYRxh7noNk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PerRaUmN; 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="PerRaUmN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 111AEC4CEF7; Mon, 6 Apr 2026 14:20:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485234; bh=t2OQ6d8PPidPjQSh+RBxS6XeDUdzwdvT/+uZ5YR7P1Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PerRaUmNcenVs2kzy22EHE/xFyIZwEzUDa1Zc13pyy/WgJql0Paa5YP/Q1j5H6faf 7p7L5ORCcBCSrk88imeHqzTuRlS2vApISz4T1mcUcFPniOhQZ5pncVHH+zQh1mdhah j2MAgPwRTkjMTpLtnKr/yAJmgu4KAghF8m7uEnXsFf/IMNhlK+F7g1flrle1HAdm// dAVvKFzuqni+kvgbbcXABmVRJY7aU0ygebUk55e4N8Zpx+8cFs03shLk/ct43++OhN 9SilwDltho/6//gxDNOaWeTjLOvXXjXmcpCrVwlPfhvyN6RgHYREd7BGVKjBtY4WjD X+oW/pOU07o0w== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 29/53] selftests/mm: compaction_test: use HugeTLB helpers ... Date: Mon, 6 Apr 2026 17:17:11 +0300 Message-ID: <20260406141735.2179309-30-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" ... instead of open coded access of HugeTLB parameters via /proc. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/compaction_test.c | 113 +++---------------- 1 file changed, 17 insertions(+), 96 deletions(-) diff --git a/tools/testing/selftests/mm/compaction_test.c b/tools/testing/s= elftests/mm/compaction_test.c index 30209c40b697..962a50c3d66f 100644 --- a/tools/testing/selftests/mm/compaction_test.c +++ b/tools/testing/selftests/mm/compaction_test.c @@ -17,6 +17,7 @@ #include =20 #include "kselftest.h" +#include "hugepage_settings.h" =20 #define MAP_SIZE_MB 100 #define MAP_SIZE (MAP_SIZE_MB * 1024 * 1024) @@ -82,75 +83,33 @@ int prereq(void) return -1; } =20 -int check_compaction(unsigned long mem_free, unsigned long hugepage_size, - unsigned long initial_nr_hugepages) +int check_compaction(unsigned long mem_free, unsigned long hugepage_size) { - unsigned long nr_hugepages_ul; - int fd, ret =3D -1; + unsigned long nr_hugepages; int compaction_index =3D 0; - char nr_hugepages[20] =3D {0}; - char init_nr_hugepages[24] =3D {0}; - char target_nr_hugepages[24] =3D {0}; - int slen; - - snprintf(init_nr_hugepages, sizeof(init_nr_hugepages), - "%lu", initial_nr_hugepages); + int ret =3D -1; =20 /* We want to test with 80% of available memory. Else, OOM killer comes in to play */ mem_free =3D mem_free * 0.8; =20 - fd =3D open("/proc/sys/vm/nr_hugepages", O_RDWR | O_NONBLOCK); - if (fd < 0) { - ksft_print_msg("Failed to open /proc/sys/vm/nr_hugepages: %s\n", - strerror(errno)); - ret =3D -1; - goto out; - } - /* * Request huge pages for about half of the free memory. The Kernel * will allocate as much as it can, and we expect it will get at least 1/3 */ - nr_hugepages_ul =3D mem_free / hugepage_size / 2; - snprintf(target_nr_hugepages, sizeof(target_nr_hugepages), - "%lu", nr_hugepages_ul); - - slen =3D strlen(target_nr_hugepages); - if (write(fd, target_nr_hugepages, slen) !=3D slen) { - ksft_print_msg("Failed to write %lu to /proc/sys/vm/nr_hugepages: %s\n", - nr_hugepages_ul, strerror(errno)); - goto close_fd; - } - - lseek(fd, 0, SEEK_SET); - - if (read(fd, nr_hugepages, sizeof(nr_hugepages)) <=3D 0) { - ksft_print_msg("Failed to re-read from /proc/sys/vm/nr_hugepages: %s\n", - strerror(errno)); - goto close_fd; - } + nr_hugepages =3D mem_free / hugepage_size / 2; + hugetlb_set_nr_default_pages(nr_hugepages); =20 /* We should have been able to request at least 1/3 rd of the memory in huge pages */ - nr_hugepages_ul =3D strtoul(nr_hugepages, NULL, 10); - if (!nr_hugepages_ul) { + nr_hugepages =3D hugetlb_nr_default_pages(); + if (!nr_hugepages) { ksft_print_msg("ERROR: No memory is available as huge pages\n"); goto close_fd; } - compaction_index =3D mem_free/(nr_hugepages_ul * hugepage_size); - - lseek(fd, 0, SEEK_SET); - - if (write(fd, init_nr_hugepages, strlen(init_nr_hugepages)) - !=3D strlen(init_nr_hugepages)) { - ksft_print_msg("Failed to write value to /proc/sys/vm/nr_hugepages: %s\n= ", - strerror(errno)); - goto close_fd; - } + compaction_index =3D mem_free/(nr_hugepages * hugepage_size); =20 - ksft_print_msg("Number of huge pages allocated =3D %lu\n", - nr_hugepages_ul); + ksft_print_msg("Number of huge pages allocated =3D %lu\n", nr_hugepages); =20 if (compaction_index > 3) { ksft_print_msg("ERROR: Less than 1/%d of memory is available\n" @@ -161,48 +120,10 @@ int check_compaction(unsigned long mem_free, unsigned= long hugepage_size, ret =3D 0; =20 close_fd: - close(fd); - out: ksft_test_result(ret =3D=3D 0, "check_compaction\n"); return ret; } =20 -int set_zero_hugepages(unsigned long *initial_nr_hugepages) -{ - int fd, ret =3D -1; - char nr_hugepages[20] =3D {0}; - - fd =3D open("/proc/sys/vm/nr_hugepages", O_RDWR | O_NONBLOCK); - if (fd < 0) { - ksft_print_msg("Failed to open /proc/sys/vm/nr_hugepages: %s\n", - strerror(errno)); - goto out; - } - if (read(fd, nr_hugepages, sizeof(nr_hugepages)) <=3D 0) { - ksft_print_msg("Failed to read from /proc/sys/vm/nr_hugepages: %s\n", - strerror(errno)); - goto close_fd; - } - - lseek(fd, 0, SEEK_SET); - - /* Start with the initial condition of 0 huge pages */ - if (write(fd, "0", sizeof(char)) !=3D sizeof(char)) { - ksft_print_msg("Failed to write 0 to /proc/sys/vm/nr_hugepages: %s\n", - strerror(errno)); - goto close_fd; - } - - *initial_nr_hugepages =3D strtoul(nr_hugepages, NULL, 10); - ret =3D 0; - - close_fd: - close(fd); - - out: - return ret; -} - int main(int argc, char **argv) { struct rlimit lim; @@ -212,18 +133,19 @@ int main(int argc, char **argv) unsigned long mem_free =3D 0; unsigned long hugepage_size =3D 0; long mem_fragmentable_MB =3D 0; - unsigned long initial_nr_hugepages; =20 ksft_print_header(); =20 if (prereq() || geteuid()) ksft_exit_skip("Prerequisites unsatisfied\n"); =20 - ksft_set_plan(1); - /* Start the test without hugepages reducing mem_free */ - if (set_zero_hugepages(&initial_nr_hugepages)) - ksft_exit_fail(); + hugetlb_save_settings(); + hugetlb_set_nr_default_pages(0); + if (hugetlb_nr_default_pages()) + ksft_exit_skip("Could not reset nr_hugepages\n"); + + ksft_set_plan(1); =20 lim.rlim_cur =3D RLIM_INFINITY; lim.rlim_max =3D RLIM_INFINITY; @@ -268,8 +190,7 @@ int main(int argc, char **argv) entry =3D entry->next; } =20 - if (check_compaction(mem_free, hugepage_size, - initial_nr_hugepages) =3D=3D 0) + if (check_compaction(mem_free, hugepage_size) =3D=3D 0) ksft_exit_pass(); =20 ksft_exit_fail(); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 34F8E381AE9; Mon, 6 Apr 2026 14:20:40 +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=1775485240; cv=none; b=kzxSFDGRiCNF/mmaTmRNEvtv4m34D4s7C38xGOik6fluZcTKcxQlgLspmJ0F5M8CnWFG43uxuRIKxucDQXOQEEXpzDgw+EaMII5L2lFDXyx498WEIt5D2nAqb4FwBJ/B0efSK5EXLeD2BC9/o4w3ql7sdN83k1RCDG2xWPM+eHk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485240; c=relaxed/simple; bh=1/ugYRnvvCSRn7Fw/zm14SmACzlAtT74uoyJWfVmAG8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R262eNlkNAqxKgvD9NwRPCRXASS5kLtu+IPt6n1FihASdf2xjCWU6k53uZOoHh7pfSY3nKKIXe1Z6SyWQw1yX5XXqRYB1aFA2GAf4MANOyl7OCj0pqDC1kbQmdQfP+8sJLpslP8DnHWE9RsAgmAGE9FK7QpQONMAmj1Wff6Ji4E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SMrtrC0F; 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="SMrtrC0F" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CBFA8C4CEF7; Mon, 6 Apr 2026 14:20:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485240; bh=1/ugYRnvvCSRn7Fw/zm14SmACzlAtT74uoyJWfVmAG8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SMrtrC0Fb0vXUxWdcq2IeM9vlYHdik0CVDmSy+BNmVRULOd6Yits0G5VhY3e4fU+o gRFKKG+lufn0l583rAWj1+Br5n3N/rcFo3k+9BaajBuw+Qn/djN3OlVNkqe+381Eew EjPSXCG1l2TB9Tk8TL2Jvqenuku/XeYZ49HvN8KZpdIJ+XcdTn7Exy7KvSKaFCZFZv BktJ84OHoMyO/anyVfyIgRRLv6MSPil9iq3gBfHlNI+FEYzbrd8SMQAWLeO8J/fiZ9 lagWs3GdjznjlJOgMmpmIjm0i+fHhyH5ZfcLyzjXgO7LXrKU1eC1NvmUaNA2qfUQv6 lfwIqXgI9hxMQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 30/53] selftests/mm: cow: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:12 +0300 Message-ID: <20260406141735.2179309-31-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" cow tests skips HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/cow.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/mm/cow.c b/tools/testing/selftests/mm/= cow.c index 4321f4208fe3..1df513bf362d 100644 --- a/tools/testing/selftests/mm/cow.c +++ b/tools/testing/selftests/mm/cow.c @@ -1881,21 +1881,21 @@ int main(int argc, char **argv) =20 ksft_print_header(); =20 + hugepage_save_settings(true, true); + pagesize =3D getpagesize(); pmdsize =3D read_pmd_pagesize(); if (pmdsize) { /* Only if THP is supported. */ thp_read_settings(&default_settings); default_settings.hugepages[sz2ord(pmdsize, pagesize)].enabled =3D THP_IN= HERIT; - thp_save_settings(); thp_push_settings(&default_settings); =20 ksft_print_msg("[INFO] detected PMD size: %zu KiB\n", pmdsize / 1024); nr_thpsizes =3D detect_thp_sizes(thpsizes, ARRAY_SIZE(thpsizes)); } - nr_hugetlbsizes =3D detect_hugetlb_page_sizes(hugetlbsizes, - ARRAY_SIZE(hugetlbsizes)); + nr_hugetlbsizes =3D hugetlb_setup(2, hugetlbsizes, ARRAY_SIZE(hugetlbsize= s)); has_huge_zeropage =3D detect_huge_zeropage(); =20 ksft_set_plan(ARRAY_SIZE(anon_test_cases) * tests_per_anon_test_case() + --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 EF0A7381AF5; Mon, 6 Apr 2026 14:20: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=1775485246; cv=none; b=jCVoGxnr0LT2zAhW9g4H9jMSXWiPUKA7Ky9Vz6B2xmM+VBLMCbiYnYDwb+PGXg8eGNniIsziVcX+0XQ/AiP1pQO+TRvZX4CT0Wkh0xjyTH0mAPolcJbcqARMCIyAOzgMtkS67b9bKiO+RCyKFSIRK/X/K43Z1fjBxrn8kRYz5Bs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485246; c=relaxed/simple; bh=+OvcjE79uMeuRExtXX4z8n9tjto6YL9x88apIU5Xm3o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IVSJtFZfM/bDBVZjXb3HuspkoeVFw8ywZGtN4A0fMenHlv/VS3Rh1hKW9A0uahLLS/zS2dVTCbDr+wRO1r2uCleTQ/1JO+KiT5Ud+f+9Ea9jsL5z+ZJDVCeFQtdfRMbkpVJ9PW7IppoDnR7mCjONvdaw64BdJ1k09wmT+bFAs38= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kh7lIewu; 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="kh7lIewu" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 923BCC4AF09; Mon, 6 Apr 2026 14:20:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485245; bh=+OvcjE79uMeuRExtXX4z8n9tjto6YL9x88apIU5Xm3o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kh7lIewuH7ZxH4vwRNILWRsv9NlJNHTXsSnYUpgq2l/WNuuBZx0XliHgIKHhoYFf+ zxnyKYkPWlwCii3h0SZ9QYJOaKSitw9nRxTalEYvs2su8PELBIRwZk5tYW8ZlfbhUt yKwZE0bym6znEQ9B6U75eQZ0n8MtRJffTYkb0GMEUQ0Cgwt40MXOj9ETOgnnxh48Ny OBBCxTEjn7SgnLDZF+EFbk/NXFxn0UvOtyCm4p3NVW2PnsyQs9lmLv6glrww1IlPMZ ToHU9uQ+9VFbbZuEzqL0rCT+1+d3xv6oEz1h45p1TfF+uah4oFgDBe1xY3YE/5qT3Y 961td+QDP21dQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 31/53] selftests/mm: gup_longterm: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:13 +0300 Message-ID: <20260406141735.2179309-32-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" gup_longterm tests skips HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/gup_longterm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/mm/gup_longterm.c b/tools/testing/self= tests/mm/gup_longterm.c index ab4eaf4feb7c..6e1de12bf28c 100644 --- a/tools/testing/selftests/mm/gup_longterm.c +++ b/tools/testing/selftests/mm/gup_longterm.c @@ -510,7 +510,7 @@ int main(int argc, char **argv) int i; =20 pagesize =3D getpagesize(); - nr_hugetlbsizes =3D detect_hugetlb_page_sizes(hugetlbsizes, + nr_hugetlbsizes =3D hugetlb_setup(2, hugetlbsizes, ARRAY_SIZE(hugetlbsizes)); =20 ksft_print_header(); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 B57CA3815D6; Mon, 6 Apr 2026 14:20:51 +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=1775485251; cv=none; b=rsJJaH6rWcMfFuT4qRN705Gc6RdC2bm1FLdiya/noGoB4cxKWWJSHPHGwKF0D8lBTP4bUQ0OsdispssLS6t2lQXdHojL/FJadAPDvs4Jz5TAN3zwszn6cJ9jNz+D4SnzUPEC+92uwH1pqgP9sOnS59mFojNVryS6MWz3CeQxX0s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485251; c=relaxed/simple; bh=a9ftjtHwEJ6B9K8hvRWelWOu2y5v4+ZMDsKskwzolFM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=URyBfCfvWPdo8UEYz9cSh/6ef0Gex2CtK2fBRFHuZl4qI2aSla0ryrmlQU6W/9Ucg3yLi6tkm4g4DAMEasVtLoxlxLgsP2D7f+ifzfDRSmmXMdg09LSsBrDf5lQxz0SjRR7xVcKX2iTyP2OBiPSQY6mVyREcfk106v+3CjKFmsQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PXlcsjUk; 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="PXlcsjUk" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 595F4C2BC9E; Mon, 6 Apr 2026 14:20:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485251; bh=a9ftjtHwEJ6B9K8hvRWelWOu2y5v4+ZMDsKskwzolFM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PXlcsjUkXpGa0plMK4KCSBfUoCbgkCkumdlMO8LDe+jLUERu8ebnt2EKXCiuml7mw olTPeslK3N9IBwibWeLmB/LrB2iD5h07goqgyUG4BDXpcwQ48nK0YaOmBqyzACUdZk WNZunJJUYtXxxpoCsoBjoRIXoBEiXiWGCsiNmhSMbk175XXgtYxyNugZItpBJdJN/Z Y0frwWHHcZvGEUEL0rqBzbdvAvquAI8pOwnd48kyY5NOQzooANLVYpAMeCSmMJgrbl GWESBEl8zXj0VjWvDgxN+0HE/Md61T/GHtzyYANyIywu4zWAcaDtYjcR2p2zQUWn9+ iJVj/PbiZjnrg== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 32/53] selftests/mm: gup_test: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:14 +0300 Message-ID: <20260406141735.2179309-33-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" gup_test fails to run HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/gup_test.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tools/testing/selftests/mm/gup_test.c b/tools/testing/selftest= s/mm/gup_test.c index fb8f9ae49efa..ddd239a69881 100644 --- a/tools/testing/selftests/mm/gup_test.c +++ b/tools/testing/selftests/mm/gup_test.c @@ -14,6 +14,7 @@ #include #include "kselftest.h" #include "vm_util.h" +#include "hugepage_settings.h" =20 #define MB (1UL << 20) =20 @@ -94,6 +95,7 @@ int main(int argc, char **argv) int filed, i, opt, nr_pages =3D 1, thp =3D -1, write =3D 1, nthreads =3D = 1, ret; int flags =3D MAP_PRIVATE; char *file =3D "/dev/zero"; + bool hugetlb =3D false; pthread_t *tid; char *p; =20 @@ -168,6 +170,7 @@ int main(int argc, char **argv) break; case 'H': flags |=3D (MAP_HUGETLB | MAP_ANONYMOUS); + hugetlb =3D true; break; default: ksft_exit_fail_msg("Wrong argument\n"); @@ -199,6 +202,15 @@ int main(int argc, char **argv) } =20 ksft_print_header(); + + if (hugetlb) { + unsigned long hp_size =3D default_huge_page_size(); + + size =3D (size + hp_size - 1) & ~(hp_size - 1); + if (!hugetlb_setup_default(size / hp_size)) + ksft_exit_skip("Not enough huge pages\n"); + } + ksft_set_plan(nthreads); =20 filed =3D open(file, O_RDWR|O_CREAT, 0664); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 B8CA93845DA; Mon, 6 Apr 2026 14:20:57 +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=1775485257; cv=none; b=CFiUTlIbm39k5c5y0opuQ2SamXFeXi4hvKb1/43WMO7OQ6f8d9OAF90HWfgEDoHL3IoHKZ2l/95txvcD7IXPDyaphpdoqrFfq22PkMAEgM7oCy8LyqWKbqyd745pyAwbedWV4yQpvzdEmTwWIWZXb61ZkgSM7oQvBQ38337FmrA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485257; c=relaxed/simple; bh=zjc7IuQI4jBq+AK4lBqRC09uA93LQf31iSBny8sfuNc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a/TAPJs3qPLLDLUn8BZ7Njp2TP+RoHMDD7t7OGVx9CRJ/VF/czyOCl7nBsursQey2Lsmq403yOxpeipCM5KaGeUD9bssiHW/MlOIM4GN2j+BWB08pzDOjff2/w9m0ncMWmFOqhy1SNzzP5cld0265KSJQvO4mok4kM17MVqmMXY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Nk0df+6D; 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="Nk0df+6D" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1FC8EC2BCAF; Mon, 6 Apr 2026 14:20:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485257; bh=zjc7IuQI4jBq+AK4lBqRC09uA93LQf31iSBny8sfuNc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Nk0df+6DRvm0XyAzJZa6Qznd9ixi9Lz1FzkU+gAZD/0iAwwhJiYkK4p+YP75K4aRm E6fFkN2smeLgPSN8s6Zfzsc0NvtBFYowEof0XK/J90oCkUFndn9GwAWrDRR4+dE6HL riJrn9JGiOQcCDk8HOo7EqM99znhSXQuVJv9exqw20bMK9Hddc8dsVdwYZgzbSxD4l 6woQvHzwwcI1mtvBHJ9kznx6P/CKQOpB8Gh/ITaubuujgoFDFfUI6DnCY2cUNCCR70 0H+TrWF6DVBrFvNIQdy0F0icJrxkkagSij7b3xriIHbkRJwJuIiRB2MfrnhoKuCcFV L7eYJa6cc73Yg== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 33/53] selftests/mm: hmm-tests: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:15 +0300 Message-ID: <20260406141735.2179309-34-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hmm-tests skips HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Since kselftest_harness runs fixture setup and the tests in child processes, use HUGETLB_SETUP_DEFAULT_PAGES() that defines a constructor that runs in the main process and add verification that there are enough free huge pages to the tests that use them. Replace exit() calls with _exit() to avoid restoring HugeTLB settings in the middle of test and use SIGLILL to kill a child process in hmm_cow_in_device test to avoid interference with signal handlers in hugepage_restore_settings(). Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/hmm-tests.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/mm/hmm-tests.c b/tools/testing/selftes= ts/mm/hmm-tests.c index 409b11cad4bc..70c7ae989c01 100644 --- a/tools/testing/selftests/mm/hmm-tests.c +++ b/tools/testing/selftests/mm/hmm-tests.c @@ -69,6 +69,9 @@ enum { #ifndef FOLL_LONGTERM #define FOLL_LONGTERM 0x100 /* mapping lifetime is indefinite */ #endif + +HUGETLB_SETUP_DEFAULT_PAGES(1) + FIXTURE(hmm) { int fd; @@ -632,7 +635,7 @@ TEST_F(hmm, anon_write_child) } =20 close(child_fd); - exit(0); + _exit(0); } } } @@ -712,7 +715,7 @@ TEST_F(hmm, anon_write_child_shared) ASSERT_EQ(ptr[i], -i); =20 close(child_fd); - exit(0); + _exit(0); } =20 /* @@ -784,8 +787,9 @@ TEST_F(hmm, anon_write_hugetlbfs) int *ptr; int ret; =20 - if (!default_hsize) - SKIP(return, "Huge page size could not be determined"); + if (!hugetlb_free_default_pages()) + SKIP(return, "Not enough huge pages"); + default_hsize =3D default_huge_page_size(); =20 size =3D ALIGN(TWOMEG, default_hsize); npages =3D size >> self->page_shift; @@ -1564,9 +1568,9 @@ TEST_F(hmm, compound) unsigned long i; =20 /* Skip test if we can't allocate a hugetlbfs page. */ - - if (!default_hsize) - SKIP(return, "Huge page size could not be determined"); + if (!hugetlb_free_default_pages()) + SKIP(return, "Not enough huge pages"); + default_hsize =3D default_huge_page_size(); =20 size =3D ALIGN(TWOMEG, default_hsize); npages =3D size >> self->page_shift; @@ -2025,10 +2029,10 @@ TEST_F(hmm, hmm_cow_in_device) ptr[i] =3D i; =20 /* Terminate child and wait */ - EXPECT_EQ(0, kill(pid, SIGTERM)); + EXPECT_EQ(0, kill(pid, SIGKILL)); EXPECT_EQ(pid, waitpid(pid, &status, 0)); EXPECT_NE(0, WIFSIGNALED(status)); - EXPECT_EQ(SIGTERM, WTERMSIG(status)); + EXPECT_EQ(SIGKILL, WTERMSIG(status)); =20 /* Take snapshot to CPU pagetables */ ret =3D hmm_dmirror_cmd(self->fd, HMM_DMIRROR_SNAPSHOT, buffer, npages); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 55BEA382284; Mon, 6 Apr 2026 14:21:03 +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=1775485263; cv=none; b=FewZAIG+CMM/N64O4xp3LI+xQI9EAei8RuaCnPTQkXiSAE/sKlIu9LYo3eq48auWiHocDY9Y6ZQnA0iAQ1LbvVDI0M0lGVGW9YHgljNjEEBSuI5v9l2vURt9rhRkHOpsuum7cV/+Is0Yf069sOTk9Gl4sFnKGwMWS7LQ8CjUVx0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485263; c=relaxed/simple; bh=dW6FhGF6pU1ym+r/rDESusHBHIrjPAzWgWJPywW+wGk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tpYWOyMjY+y2wtgiDowWT+ZpyjnjOBlcdUCrHnhd4XgB3ZgMmBUeJgO8HEypZycYHATXU/Eq9iQWHIEFyJMPssGCbQIBT8c3Avi7wDYriQzM98lAKcIm7K+GYVP8N3R+tzujxOMYlk96d9Gw7SaqnEuNpbBT+N/LcwiRT2Fvduw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pdQtychc; 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="pdQtychc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DD53EC4CEF7; Mon, 6 Apr 2026 14:20:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485263; bh=dW6FhGF6pU1ym+r/rDESusHBHIrjPAzWgWJPywW+wGk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pdQtychcMReUIrt09oRyA0UJ8OmK/l26NtUky7BjAammmLCIwIgyeqs2T3kiqfLOB TZ/5J9UlCUcOOOGCXKQ6RjNcZiBe3V/xWcy53pB8MX3kNuaASkFssiGh1jxkCGGZ4y HfFLFrBfVuUcHv7/kCZw1WO7nuDrj1A5o4uOjZ3/11ySuYO1sLLXc9i14SUJuE3j9+ RBEnCU1r3TPgJSHrK+67xoLAGboRkfv++aI9CSIilLwcK2xjQFadHyI8pLLA6O4a0b Ipx5uedNL2cAgPjpQ59NLEhWRVLKACF4qKgKAuo0FXhwgROiGEydYZBhQ6jGdC/Or7 ZNYzfa4r8S4Pw== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 34/53] selftests/mm: hugepage_dio: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:16 +0300 Message-ID: <20260406141735.2179309-35-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hugepage_dio test fails if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/hugetlb_dio.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/mm/hugetlb_dio.c b/tools/testing/selft= ests/mm/hugetlb_dio.c index 47019433ddaf..fb4600570e13 100644 --- a/tools/testing/selftests/mm/hugetlb_dio.c +++ b/tools/testing/selftests/mm/hugetlb_dio.c @@ -85,8 +85,6 @@ static void run_dio_using_hugetlb(int fd, unsigned int st= art_off, =20 /* Get the default huge page size */ h_pagesize =3D default_huge_page_size(); - if (!h_pagesize) - ksft_exit_fail_msg("Unable to determine huge page size\n"); =20 /* Reset file position since fd is shared across tests */ if (lseek(fd, 0, SEEK_SET) < 0) @@ -94,10 +92,6 @@ static void run_dio_using_hugetlb(int fd, unsigned int s= tart_off, =20 /* Get the free huge pages before allocation */ free_hpage_b =3D hugetlb_free_default_pages(); - if (free_hpage_b =3D=3D 0) { - close(fd); - ksft_exit_skip("No free hugepage, exiting!\n"); - } =20 /* Allocate a hugetlb page */ orig_buffer =3D mmap(NULL, h_pagesize, mmap_prot, mmap_flags, -1, 0); @@ -141,8 +135,8 @@ int main(void) =20 ksft_print_header(); =20 - /* Check if huge pages are free */ - if (!hugetlb_free_default_pages()) + /* request a huge page */ + if (!hugetlb_setup_default(1)) ksft_exit_skip("No free hugepage, exiting\n"); =20 fd =3D open("/tmp", O_TMPFILE | O_RDWR | O_DIRECT, 0664); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 1ECB33803E9; Mon, 6 Apr 2026 14:21:09 +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=1775485269; cv=none; b=vGrNFvaZlQYNHB0IyTNJ2hvZ652GTfe6Go4HMilGrVxDtVxZpMDAd4Fo/IM1iPA0JZN/5iqfq9oVuASPknSze7n2V5Ld7M8wj/iyCMdR1VPSTISj7YE1M/5jWCLxl40kb2Ugvujl8VyYX0xYx8sXBXbm7kWSQs67KV++VRkN6EU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485269; c=relaxed/simple; bh=ib9LXsJztlT6AS3f5wMdXHDwOYMXkAdeN957x1qT4BE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cyyhnS6j1Q8eKtxcwhEO/WD12Meu+FGM18JsgPwUbL3Pice8krDvKLLjqp5lg26BDsbkd7QJbLOCwX0FyTodvHz2BI1S8aQxbhefbIQJWEKTRDVUpRR6p00IlreUvTaHvgvHlyzlblNvJvJ/MGzf6QW8Vl1yKueuZEaffhcb0oo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qrhCPB/F; 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="qrhCPB/F" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B40E3C2BC9E; Mon, 6 Apr 2026 14:21:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485269; bh=ib9LXsJztlT6AS3f5wMdXHDwOYMXkAdeN957x1qT4BE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qrhCPB/FE7s2ugmzDIClFZRLbmXSI3xuwtYWqEPSGSVk1TtwGU/zlHwfAvweZA5Nu +Q2X2k2WPj3tP/z1wLJB3WZUSueCYfsscrlR429FKIgjD9RKyfK4T6CqLa8zr73Uis JK6agm4Zu12BfZeghE6aGlt3hRZNZmPYdsKbLNKP+VokL/8wx2W7MzcG4W4raVH+sP KpYP8Y2kgkaH99ILDISZc6VKbre0IKaEeuZ3vQanXV1v7wC4ubCwj6Ukccvruzdkih CLVUrwnWtuFZBIPaztH3vJ/b1Pk+KAPzLqZQeKdpn8NXboMhiavOOFJSW7VuwIQT1E A194Z+beJpUpA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 35/53] selftests/mm: hugetlb_fault_after_madv: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:17 +0300 Message-ID: <20260406141735.2179309-36-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hugetlb_fault_after_madv test skips testing if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/hugetlb_fault_after_madv.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/mm/hugetlb_fault_after_madv.c b/tools/= testing/selftests/mm/hugetlb_fault_after_madv.c index c718dd065d53..481863cc5fda 100644 --- a/tools/testing/selftests/mm/hugetlb_fault_after_madv.c +++ b/tools/testing/selftests/mm/hugetlb_fault_after_madv.c @@ -54,7 +54,6 @@ void *madv(void *unused) =20 int main(void) { - unsigned long free_hugepages; pthread_t thread1, thread2; /* * On kernel 6.4, we are able to reproduce the problem with ~1000 @@ -78,10 +77,9 @@ int main(void) ksft_print_msg("[INFO] detected default hugetlb page size: %zu KiB\n", huge_page_size / 1024); =20 - free_hugepages =3D hugetlb_free_default_pages(); - if (free_hugepages !=3D 1) { + if (!hugetlb_setup_default(1)) { ksft_exit_skip("This test needs one and only one page to execute. Got %l= u\n", - free_hugepages); + hugetlb_free_default_pages()); } =20 while (max--) { --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 D72B338237F; Mon, 6 Apr 2026 14:21:14 +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=1775485274; cv=none; b=HnTfRclhFgUe6MfZUhATiAP8gPy4FMrt1f7UOwwvK1hn0s4A8uEqO05GnvGv85kZLPN17WkWQn4pFI10GmNvo5rOyJbg7OuqI6r0nPhZ7mJO4i63v0zgd44O64bMYkLxoxu/NmTTuZFDOT/mJQ4jjECmoQlkC4Vx5h9acAnQLgs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485274; c=relaxed/simple; bh=1E1PaJAheFq68IlA7LKJisHu/YP5aoXijmYjIj2LOcM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H5iCF+WSkspHstDiH6zq7OzccgyNGpYCFDjbcaWWqVwEdqDX7NMZ4AhDD+f9K3InuO0jetqf48YJeL88b5lJgWZjB6UwpahUZubOvPRkjpG4TjnUUtVry/fCHU5OdSJnSvM/ZGmq+3E1LY+1AcS2HPx0q9h4DS1k3kTX78wtFiM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=F26V/ngD; 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="F26V/ngD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7AFD7C4AF0B; Mon, 6 Apr 2026 14:21:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485274; bh=1E1PaJAheFq68IlA7LKJisHu/YP5aoXijmYjIj2LOcM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=F26V/ngDISfUxXDEjbjCfD4dgkfEyZ7yLYKiAYXU3dZvt78HSd6yW8f/Aynk1/ykz dllKi8Ge+eEDBUDSMJcm4pet77fXPNXVfpxmenPaAYUalmvRMQuMqV7m3v5ZEZyk6y CSaDsayvVihY6TsIPfkAQWIlNwpyo5mOUSqxnmEUjPJW79Gn56z7kfUMOCjCzUVFiH mNbeavG5e8L4W1vXgjmAUZFpDHvHIThbOO5blkWTfYvD+gOw9bYWOyjHm4bJjsHrfH zfsvpZ+RvnxS5EuPznLvW10btFFCYHU1ihazksnij/taKvU5pOSgnlHgx2s5Hkukzx UiVe4U+7kYhpQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 36/53] selftests/mm: hugetlb-madvise: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:18 +0300 Message-ID: <20260406141735.2179309-37-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hugetlb-madvise test skips testing if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/hugetlb-madvise.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/mm/hugetlb-madvise.c b/tools/testing/s= elftests/mm/hugetlb-madvise.c index 3c08eb6db6a2..b20648d025e6 100644 --- a/tools/testing/selftests/mm/hugetlb-madvise.c +++ b/tools/testing/selftests/mm/hugetlb-madvise.c @@ -68,9 +68,9 @@ int main(int argc, char **argv) if (!base_page_size) ksft_exit_fail_msg("Unable to determine base page size\n"); =20 + if (!hugetlb_setup_default(MIN_FREE_PAGES)) + ksft_exit_skip("Not enough free huge pages (have %lu, need %d)\n", huget= lb_free_default_pages(), MIN_FREE_PAGES); free_hugepages =3D hugetlb_free_default_pages(); - if (free_hugepages < MIN_FREE_PAGES) - ksft_exit_skip("Not enough free huge pages (have %lu, need %d)\n", free_= hugepages, MIN_FREE_PAGES); =20 fd =3D memfd_create(argv[0], MFD_HUGETLB); if (fd < 0) --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 D7F3D3822AF; Mon, 6 Apr 2026 14:21:20 +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=1775485280; cv=none; b=aydrH2ePTy+fGR0yOjmtrp0lrXvr+5RwOp3CvF5F/6pY50Qnr/nM9og6vcIh+y1So6qqDrlB0AoQcEMfDH0Ek8/YUMx36b3HaFIinW77n6xd2bQxI8+lgoL5yjjVTMkf2qRJTnAmXCIYjxyfkp10mXwrO7Ep5l+VfT60a9rf3e4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485280; c=relaxed/simple; bh=nlprzoVHw1LmFezPWbTzVMDcbCMocVKEurNVLRnJdhY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JhuTKHPB7UYVfJhNuie+XEPm7cl2zg54KU+rYSQHWrMjs/di1qsWEunVmTRgEB4oOEdmNoENaYCcWaoEA5jFNLWOeKpYb9cPt48e7jLUoZiY9LMtlLesqMw8B24xePfETcOKIbr2bkoA/LXY+3OdFTjGHIhtISO01c1OGX5T4a0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=agTROMm5; 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="agTROMm5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4163DC2BC9E; Mon, 6 Apr 2026 14:21:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485280; bh=nlprzoVHw1LmFezPWbTzVMDcbCMocVKEurNVLRnJdhY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=agTROMm5+/L8PA1PIQV1DOjILhrJF9lyrFuWSR9Agki1LfX/O7YJ+Wt/YZzCklDnA b5G65oUCYtqzd8uRbHvsRvXd2xOQZsstAZ39uwds7uqJgd/AmanlNN67uxcQQb+0pe MXdbivHX+Vi+Udi+aeK5w2FnWf2M1jA1HQwny+3a5s3UfAVTOTxamd9nchmpZTzKoE 3LGGwveUGotGzyOsFUZqX5BQZMAU26x2kuxoh1g2IX0+ubDe4ef0Zcwoz0h74wf7tk y2zGFwbfWWtaFz28ZAxj+SEgJru4P2bJXx8ufTwZh6Fw3yd0hcsNlX7E7Tp3esAFYi 8vDfQweFV7ZwQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 37/53] selftests/mm: hugetlb_madv_vs_map: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:19 +0300 Message-ID: <20260406141735.2179309-38-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hugetlb_madv_vs_map test skips testing if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/hugetlb_madv_vs_map.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/mm/hugetlb_madv_vs_map.c b/tools/testi= ng/selftests/mm/hugetlb_madv_vs_map.c index dfbd71a7f709..6c95dd23ca81 100644 --- a/tools/testing/selftests/mm/hugetlb_madv_vs_map.c +++ b/tools/testing/selftests/mm/hugetlb_madv_vs_map.c @@ -77,7 +77,6 @@ void *map_extra(void *unused) int main(void) { pthread_t thread1, thread2, thread3; - unsigned long free_hugepages; void *ret; =20 /* @@ -89,11 +88,9 @@ int main(void) ksft_print_header(); ksft_set_plan(1); =20 - free_hugepages =3D hugetlb_free_default_pages(); - - if (free_hugepages !=3D 1) + if (!hugetlb_setup_default(1)) ksft_exit_skip("This test needs one and only one page to execute. Got %l= u\n", - free_hugepages); + hugetlb_free_default_pages()); =20 mmap_size =3D default_huge_page_size(); =20 --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 63E7F3815E2; Mon, 6 Apr 2026 14:21:26 +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=1775485286; cv=none; b=PV1zisqLkmxHQTlNY0CQsUAXUdSq/FgAVfmbZ3meB24IBcsnnkpJtswncr9YalW1GnWdu9zGtL3DvPscHD1gQQIm9wv57hoWqg3AI1Fxm5b7GuLDq5gdJeThzh2tL0fUx7qwQc1QSDCjTBeX6cg4KMfyNhxqbDTMuKbOqt80y+g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485286; c=relaxed/simple; bh=dRPuiqqQJpQXjw6cIRi4fzLi2hziGrsSJ9cBq+BFA+s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kO26hvNe6YBDAQ0upE/yUdkip0YVpyWCjdG2Y7WvuDXQMvM9GBuCbwGS32HWHc77jfz7WRzoeu9X61DCq5dgU+8pFMOnALmuze7vYBHoeK/PUnaUo0BKDvUJvzJYHJLfARw5EpXWxWOIpq326sSjs7hu10cbvDq9ERPZEmlnf8c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GMGesjNd; 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="GMGesjNd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 07A6EC4CEF7; Mon, 6 Apr 2026 14:21:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485286; bh=dRPuiqqQJpQXjw6cIRi4fzLi2hziGrsSJ9cBq+BFA+s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GMGesjNduweHgKIV8krEDAGqLHO1r7xXJwYnceTnP6WCbRkgyqukMlbpdcz1Tn5+Z KFRjqfaIPsIRfpjqovZhkQh6g464H5Qzjb8YNPudW9iZ6K3lqB6V1ENeS61eQy0daZ dc9j/XUPWpDM/uNWmNamftKB9kX5QSiwEmZN9pZXEnLckPGSXG/OGka4lZwpNHb5uY WxcD7uqyznnQ2O3UV3jHPgjGBUUOfWmNeba26uYXcPz0l78sBxA5snpMZpJo+GAkSB s7DmLkMhGKqBkDueA5vx5yaoNA8GzsNNk9uFKCdxqmhJp0HU8jdOqxd+WOUdGJ1IOO iD1OseX1StzOg== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 38/53] selftests/mm: hugetlb-mmap: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:20 +0300 Message-ID: <20260406141735.2179309-39-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hugetlb-mmap test fails if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/hugetlb-mmap.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/mm/hugetlb-mmap.c b/tools/testing/self= tests/mm/hugetlb-mmap.c index 5be68fbc36dc..d4edb233101d 100644 --- a/tools/testing/selftests/mm/hugetlb-mmap.c +++ b/tools/testing/selftests/mm/hugetlb-mmap.c @@ -107,10 +107,9 @@ int main(int argc, char **argv) { size_t hugepage_size; size_t length =3D LENGTH; - int shift =3D 0; + int shift =3D 0, nr; =20 ksft_print_header(); - ksft_set_plan(2); =20 if (argc > 1) length =3D atol(argv[1]) << 20; @@ -126,9 +125,13 @@ int main(int argc, char **argv) } =20 /* munmap with fail if the length is not page aligned */ - if (hugepage_size > length) - length =3D hugepage_size; + length =3D (length + hugepage_size) & ~(hugepage_size - 1); + nr =3D length / hugepage_size; + + if (!hugetlb_setup_default(nr)) + ksft_exit_skip("Not enough %lu Kb pages\n", hugepage_size >> 10); =20 + ksft_set_plan(2); ksft_print_msg("Mapping %lu Mbytes\n", (unsigned long)length >> 20); =20 test_anon_mmap(length, shift); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 2AB093803C5; Mon, 6 Apr 2026 14:21:32 +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=1775485292; cv=none; b=bam46cjPSdh8pzNa9WmcePytjI23f+1X9FWdiVaWCEF3gvDG+cvv5iOKHahrgilk9MhMQpAFOH4foGWAGvyag/Ptn5PgYbPFvMjsOLmjdqBfUI14RU4NyA7j/siyqLXnYFIuX68JAgfUD++qNEm/BdpxuzQY/np+O6uERH8aB5I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485292; c=relaxed/simple; bh=53qqY7PQB/uAj+zPP1JxuvnMAG3AtCcj7DDDSb0K5uw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hOMDNTQEjopHlZY1Qsz3LxJ+wzaNifiq3weWQNBlFgZgUjpFWLBHY8ZOrS1wPiXDIJ5VrzrAz3Jang3lgfRjts2v7l/+amseCgM3m7as9PxQuS88Pwlk/aAwxmBwOiX8X9/NnnFkOja3+Xz3/pVzjc/MXCqz6mCp+ku6ub86S2U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TAdJCPE9; 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="TAdJCPE9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C13EFC2BCB2; Mon, 6 Apr 2026 14:21:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485292; bh=53qqY7PQB/uAj+zPP1JxuvnMAG3AtCcj7DDDSb0K5uw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TAdJCPE9O8ff2Xunk0iUh1hSJscOC/eHqdSPiWd7BoHpI6bwE61qLpf+8pUD36Skt /oYHytW5tcFZ/DpIjaukljiuLAmI1Wg/ugS7TFYC1FpaKXBrLlBxN1e8Ct0uPMh6GR lrvCUkD88cJ0NNMaT32kx7gYtTvXQ7NOUY3KXVMI/Dv/SFuf7DKY+f+s5KHj+morqF 8WKx4mzVHDOmhH55hMB4XTI65CsYhAQRbz46OHqvJGZ7dPYxqhp04NjeMRjCYVSyKU +7hcuINHOe674eEUMlXR+ewBIfct/CTF3w2OvQErftx8uuNzo9watAoW/TOfeUs31M IKeXmLQ582D9w== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 39/53] selftests/mm: hugetlb-mremap: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:21 +0300 Message-ID: <20260406141735.2179309-40-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hugetlb-mremap test fails if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/hugetlb-mremap.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/mm/hugetlb-mremap.c b/tools/testing/se= lftests/mm/hugetlb-mremap.c index 1c87c39780c5..09241a279ec2 100644 --- a/tools/testing/selftests/mm/hugetlb-mremap.c +++ b/tools/testing/selftests/mm/hugetlb-mremap.c @@ -26,6 +26,7 @@ #include #include "kselftest.h" #include "vm_util.h" +#include "hugepage_settings.h" =20 #define DEFAULT_LENGTH_MB 10UL #define MB_TO_BYTES(x) (x * 1024 * 1024) @@ -108,8 +109,9 @@ static void register_region_with_uffd(char *addr, size_= t len) =20 int main(int argc, char *argv[]) { + unsigned long hugepage_size; + int ret =3D 0, fd, nr; size_t length =3D 0; - int ret =3D 0, fd; =20 ksft_print_header(); ksft_set_plan(1); @@ -125,7 +127,14 @@ int main(int argc, char *argv[]) else length =3D DEFAULT_LENGTH_MB; =20 + hugepage_size =3D default_huge_page_size(); length =3D MB_TO_BYTES(length); + length =3D (length + hugepage_size) & ~(hugepage_size - 1); + nr =3D length / hugepage_size; + + if (!hugetlb_setup_default(nr)) + ksft_exit_skip("Not enough huge pages\n"); + fd =3D memfd_create(argv[0], MFD_HUGETLB); if (fd < 0) ksft_exit_fail_msg("Open failed: %s\n", strerror(errno)); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 E5BD237FF7A; Mon, 6 Apr 2026 14:21:37 +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=1775485298; cv=none; b=g26pmQ5cEGUZFJlfX52JjgHvGla6XntlZKhZ10rTGYphM+bZUiPOtI5ZXZR9S182ILjaIzDATsO3hmNqEC1ZKuCH3XxfBQk56NwX+o/t4dLy/bHRJbHvK55sLNVeKCRbNJvKlDnlt1HSClc+PxUZLFRd7wkhRQY/ig1F6fr0B/4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485298; c=relaxed/simple; bh=CuwM0pZ3/JhUx+ejuVCSFOxrDGLqHKrdn9rmOFHqvFo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NRuayayO1iBck1GuqCGxljUEtFNuEkT0OgWI0eZYl4tDzJIdV6eJW0I5/RtbhjYzjuU2autvt9MwH3OGZE5QclGBNREky80Vn6QPvO62Gb1h662cvnY6fw8F8K3k/1qdQEnw+6IhEdjxBZX0sYhFYgnRo3OM7NqbkNie3zze0JM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JlreYPFC; 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="JlreYPFC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 88FD4C4CEF7; Mon, 6 Apr 2026 14:21:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485297; bh=CuwM0pZ3/JhUx+ejuVCSFOxrDGLqHKrdn9rmOFHqvFo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JlreYPFCUZsHB3nh1FuJHqiHLnh//pLb8PeKlos/Koi7YMTF7uhzfyt8q3e6vQrpE knMm1RKbCISOvxmqRr44D89N+IHgp97QFpaCzQfGfm0fK+n9Jbsz5JC1VSxbxtHlsS KyjDUpkERbnBVwRAv6m1XIawR7PiDXl66iq1QEtO2pnkwbGAvzNpzN4Ebeun42iufD D/ln53NO2EkWucLp3YpIBSxOVx6tC9ZPOuzORusCYfm4o48WuezCu/Fhjgo1Bvd41x 7pE4GtMTu0trXzmkLuWKLz+D6qPK5MGyQnSUrTmxS35uSwRgE6mNWswtfdKitKHa4V +upLdKtl4ZY2w== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 40/53] selftests/mm: hugetlb-shm: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:22 +0300 Message-ID: <20260406141735.2179309-41-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hugetlb-shm test fails if there are no free huge pages prepared by a wrapper script and shm liimts in proc are too low. Add setup of HugeTLB pages and shm limits to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/hugetlb-shm.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tools/testing/selftests/mm/hugetlb-shm.c b/tools/testing/selft= ests/mm/hugetlb-shm.c index 10e4baa091f2..e721ef17974c 100644 --- a/tools/testing/selftests/mm/hugetlb-shm.c +++ b/tools/testing/selftests/mm/hugetlb-shm.c @@ -29,9 +29,24 @@ #include =20 #include "vm_util.h" +#include "hugepage_settings.h" =20 #define LENGTH (256UL*1024*1024) =20 +static void prepare(void) +{ + unsigned long length, hugepage_size, nr; + + hugepage_size =3D default_huge_page_size(); + length =3D (LENGTH + hugepage_size) & ~(hugepage_size - 1); + nr =3D length / hugepage_size; + + if (!hugetlb_setup_default(nr)) + ksft_exit_skip("Not enough free huge pages\n"); + + shm_limits_prepare(length); +} + int main(void) { int shmid; @@ -41,6 +56,8 @@ int main(void) ksft_print_header(); ksft_set_plan(1); =20 + prepare(); + shmid =3D shmget(2, LENGTH, SHM_HUGETLB | IPC_CREAT | SHM_R | SHM_W); if (shmid < 0) ksft_exit_fail_perror("shmget"); @@ -79,3 +96,5 @@ int main(void) ksft_test_result_pass("hugepage using SysV shmget/shmat\n"); ksft_finished(); } + +SHM_LIMITS_RESTORE() --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 E335737FF7A; Mon, 6 Apr 2026 14:21:43 +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=1775485304; cv=none; b=aHlJLOa/bKGjGLyXG8csULJQ6LhVie9J02PsTgxhryeK+Jf3s3310phfxMcWH6c+n7y4JJWwvfDTv+KUiCeNlwFsix/MeOkLBcEJQL7H/8JNtwUFLcvN1t4nRhy2nyTagcRlqCHJAn9mCaFIDdZ8kqH3lHSA0v0ZKsexGoGU3l4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485304; c=relaxed/simple; bh=Ebag/OZwcEEdNBOTVBqp4Cs1aPruonU0XrgpI45ideI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ULvprpoYfK8Tm5uNFSkdbVDw4JxE3K8j+zIAh4sRB1xrxpOR5t/M1ip610Us18QWJFIrY2ap2tjWt90Bq0X70RogyaagUPfQAOKFcP6Cv/+hEM/zJeS/imOghMTHfJIM7e3UTuFii3F4V+c8PY8KUJPgIUnSDIWM3ZWT4lWOUbM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OJrwcWLh; 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="OJrwcWLh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4F74AC2BCB6; Mon, 6 Apr 2026 14:21:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485303; bh=Ebag/OZwcEEdNBOTVBqp4Cs1aPruonU0XrgpI45ideI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OJrwcWLh6aojOINmg2AOvSNrDBrN+C9q+lorsQOCSJABN9LWXZ1WXP6HawdGEhnA8 DkRbaAl0X3oOs2q4IDIBKkq5AdfV6J/aLTBgM+xXL5w0xWKtCcIVBBPEDXs1RfiUuH 28NS4x3noVe6rcurS3wQIlJ+JMpeR2bsUsr4YUSkn3Ti0bJPMBek5Jd8UGhdBBfLSV b3ZDzjiMVtWQ+RtQR5/P3Y/4qbERfLl+88czbtDA9us2qqGklXHNvv4hecQQAyIJoG 6Ubm9FVKJZbzZBzqnwUoCi4rDiBR62fxrSBvytmruY3OIBE9QE8hNYdsp/wIwOv11Q Onkf4mLTVHUzQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 41/53] selftests/mm: hugetlb-soft-online: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:23 +0300 Message-ID: <20260406141735.2179309-42-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hugetlb-soft-online test uses open coded access to /proc to determine availability of huge pages and fails if there are no enough free huget pages.. Replace open coded access to /proc with hugepage helpers and add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- .../selftests/mm/hugetlb-soft-offline.c | 45 ++++--------------- 1 file changed, 8 insertions(+), 37 deletions(-) diff --git a/tools/testing/selftests/mm/hugetlb-soft-offline.c b/tools/test= ing/selftests/mm/hugetlb-soft-offline.c index a8bc02688085..bc202e4ed2bd 100644 --- a/tools/testing/selftests/mm/hugetlb-soft-offline.c +++ b/tools/testing/selftests/mm/hugetlb-soft-offline.c @@ -6,9 +6,7 @@ * - if enable_soft_offline =3D 1, a hugepage should be dissolved and * nr_hugepages/free_hugepages should be reduced by 1. * - * Before running, make sure more than 2 hugepages of default_hugepagesz - * are allocated. For example, if /proc/meminfo/Hugepagesize is 2048kB: - * echo 8 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages + * The test allocates 8 default hugepages */ =20 #define _GNU_SOURCE @@ -25,6 +23,7 @@ #include =20 #include "kselftest.h" +#include "hugepage_settings.h" =20 #ifndef MADV_SOFT_OFFLINE #define MADV_SOFT_OFFLINE 101 @@ -100,32 +99,6 @@ static int set_enable_soft_offline(int value) return 0; } =20 -static int read_nr_hugepages(unsigned long hugepage_size, - unsigned long *nr_hugepages) -{ - char buffer[256] =3D {0}; - char cmd[256] =3D {0}; - - sprintf(cmd, "cat /sys/kernel/mm/hugepages/hugepages-%ldkB/nr_hugepages", - hugepage_size); - FILE *cmdfile =3D popen(cmd, "r"); - - if (cmdfile =3D=3D NULL) { - ksft_perror(EPREFIX "failed to popen nr_hugepages"); - return -1; - } - - if (!fgets(buffer, sizeof(buffer), cmdfile)) { - ksft_perror(EPREFIX "failed to read nr_hugepages"); - pclose(cmdfile); - return -1; - } - - *nr_hugepages =3D atoll(buffer); - pclose(cmdfile); - return 0; -} - static int create_hugetlbfs_file(struct statfs *file_stat) { int fd; @@ -177,20 +150,14 @@ static void test_soft_offline_common(int enable_soft_= offline) ksft_exit_fail_msg("Failed to set enable_soft_offline\n"); } =20 - if (read_nr_hugepages(hugepagesize_kb, &nr_hugepages_before) !=3D 0) { - close(fd); - ksft_exit_fail_msg("Failed to read nr_hugepages\n"); - } + nr_hugepages_before =3D hugetlb_nr_default_pages(); =20 ksft_print_msg("Before MADV_SOFT_OFFLINE nr_hugepages=3D%ld\n", nr_hugepages_before); =20 ret =3D do_soft_offline(fd, 2 * file_stat.f_bsize, expect_errno); =20 - if (read_nr_hugepages(hugepagesize_kb, &nr_hugepages_after) !=3D 0) { - close(fd); - ksft_exit_fail_msg("Failed to read nr_hugepages\n"); - } + nr_hugepages_after =3D hugetlb_nr_default_pages(); =20 ksft_print_msg("After MADV_SOFT_OFFLINE nr_hugepages=3D%ld\n", nr_hugepages_after); @@ -219,6 +186,10 @@ static void test_soft_offline_common(int enable_soft_o= ffline) int main(int argc, char **argv) { ksft_print_header(); + + if (!hugetlb_setup_default(8)) + ksft_exit_skip("not enough hugetlb pages\n"); + ksft_set_plan(2); =20 test_soft_offline_common(1); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 722883859CD; Mon, 6 Apr 2026 14:21:49 +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=1775485309; cv=none; b=KDcsJr7iXIcWMXg7SbsdxYaYmYunJ7FCY7xcQL5zmaRG/mUzwoEnVpWI2pzMztxRSDTpTANQWHq6Z+EVo/fv4JZMGBzhuhWXRSaTMjLmH9AFXo7d4Dy1y5G4haiA9BN+mAT653ghQcIEIJNcarnr4bTVNe+9M4daSl0MfH6Oe30= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485309; c=relaxed/simple; bh=XUYa2AHXODnUwL+2gtS49wymmJEGg8QhpNWWbUz0fDg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Blx70Bra15Gln0B6Jo2rczdPtsMRpKerX9zGnlXjp+CfRudPm5GFYC8EILMJjubA7DDa/xf366h3FLwgbHKRbl7LPALWy24nBRYkqxLM75dU5USJkfePBsb41KdpnoEkaI5vDHMsSbu8HHceeK3vjlilrnLLg6L85qL77f16T70= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mCdMMrXM; 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="mCdMMrXM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 15A5FC4CEF7; Mon, 6 Apr 2026 14:21:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485309; bh=XUYa2AHXODnUwL+2gtS49wymmJEGg8QhpNWWbUz0fDg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mCdMMrXMCaE63glUC3PQoRjNenlzBJV1SZ2AIQVxmR8JJiom0kW//1iJtNFKUfSbR WL9hfkjDzD1qJeWKlddwetkCAD0dw3ZmORaDZA8t6KPTitUQ3BLlJIAOsAv/smIcI6 lchB/kbjP8e+9dkLeEmbcCAIfSE88BKFokS6mis0RfUaSZ49YcRpyTFAEbtrTKkurd 88GWj3eoxU/kQSkipFkAC0qR1lEiM8QV8Mh/UPimQRatYTdnJk0c5sSbsyUiMOLEUL VaFy4JtAUPncOEQ5+Y/bMuE25B+6f9ca2M1eBVmmjDJU1u+EVzvqRuSNsrwgGgNy7Q 3cwi415eJxxuA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 42/53] selftests/mm: hugetlb-vmemmap: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:24 +0300 Message-ID: <20260406141735.2179309-43-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" hugetlb-vmemmap test fails if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/hugetlb-vmemmap.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/testing/selftests/mm/hugetlb-vmemmap.c b/tools/testing/s= elftests/mm/hugetlb-vmemmap.c index af5786bebfd1..507df78a158d 100644 --- a/tools/testing/selftests/mm/hugetlb-vmemmap.c +++ b/tools/testing/selftests/mm/hugetlb-vmemmap.c @@ -97,6 +97,9 @@ int main(int argc, char **argv) ksft_print_header(); ksft_set_plan(1); =20 + if (!hugetlb_setup_default(1)) + ksft_exit_skip("Not enough free huge pages\n"); + pagesize =3D psize(); maplength =3D default_huge_page_size(); if (!maplength) --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 3B43D3822AD; Mon, 6 Apr 2026 14:21:55 +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=1775485315; cv=none; b=WHnR+sn7sIHo0+/ULxdp7d0XdiZA+g1UZ2jW0rE0sNwx7W6I/W6YbiW9TJcG/O2VR2QmdckGvvGcZrpHc8KNTPxkapIv/0RunXA9lD2hK9QREVnAqgLGj5oe1eFFJQyd7JhyflbWs49lrJ1JNi+IRNl+6jHlLD1YeP0Gt+Fo4Wo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485315; c=relaxed/simple; bh=vCnjdXeTkcOgDXKHH4wTrbHB2ThXfy9k351DRlaWe10=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aKdgwm7KUURuEESlX0I8FVLz0oXddgT/OSLXnMqafGDyGktyGScjWuhnSuiK2Q2GAI+0XckkM3WqHC2v1gxy2DzyvoI/iUiEoYpU1/Gr5ChonwVZMwHXZlsqEPt4mkwVuc2hgyTWptUihYceiADIUb4bY0wHOVusRyeAcTObess= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qz4ev3vM; 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="qz4ev3vM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D0450C2BCAF; Mon, 6 Apr 2026 14:21:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485315; bh=vCnjdXeTkcOgDXKHH4wTrbHB2ThXfy9k351DRlaWe10=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qz4ev3vMyNDmP0KmG7lLNnA398L3h6LHlWRGk0c6u8ZflSN0OmjEc8kDVS6idFXjq UzbwnFHPTGjr7GRlO7RyMCKBMNVYo4/0duoqLb5m0yADaGftrIhpwUlkMGF7VYSpIw Vd9cCj1gk5awmow67SpPEsvmFXt0NKzCPzpEvf8FRrgCYMm51lx9GZcaCzQ+0Mg3Hc 17bLZVpV2NixENoYj6g/F7efFEHkcD1TOkLFqBAPWXTKh6Cdbf9yk21k/ttK+qy3HI 7QJRq7Qe8N5M1hNECEkA20Mg1RkFTcP9KWH6AQ4WlAvCtGcZmKR8P8NKYxOmDVrUWm ltJwvx8tz+d+A== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 43/53] selftests/mm: migration: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:25 +0300 Message-ID: <20260406141735.2179309-44-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" migration skips HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Since kselftest_harness runs fixture setup and the tests in child processes, use HUGETLB_SETUP_DEFAULT_PAGES() that defines a constructor that runs in the main process and add verification that there are enough free huge pages to the tests that use them. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/migration.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/testing/selftests/mm/migration.c b/tools/testing/selftes= ts/mm/migration.c index ccf42002ce86..61fb00953f83 100644 --- a/tools/testing/selftests/mm/migration.c +++ b/tools/testing/selftests/mm/migration.c @@ -23,6 +23,8 @@ #define MAX_RETRIES 100 #define ALIGN(x, a) (((x) + (a - 1)) & (~((a) - 1))) =20 +HUGETLB_SETUP_DEFAULT_PAGES(1) + FIXTURE(migration) { pthread_t *threads; @@ -277,6 +279,9 @@ TEST_F_TIMEOUT(migration, private_anon_htlb, 2*RUNTIME) if (!hugepage_size) SKIP(return, "Reading HugeTLB pagesize failed\n"); =20 + if (hugetlb_free_default_pages() < 1) + SKIP(return, "Not enough huge pages\n"); + ptr =3D mmap(NULL, hugepage_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0); ASSERT_NE(ptr, MAP_FAILED); @@ -308,6 +313,9 @@ TEST_F_TIMEOUT(migration, shared_anon_htlb, 2*RUNTIME) if (!hugepage_size) SKIP(return, "Reading HugeTLB pagesize failed\n"); =20 + if (hugetlb_free_default_pages() < 1) + SKIP(return, "Not enough huge pages\n"); + ptr =3D mmap(NULL, hugepage_size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0); ASSERT_NE(ptr, MAP_FAILED); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 087123803F5; Mon, 6 Apr 2026 14:22:01 +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=1775485321; cv=none; b=rVP+Y4Kzp7Ny5fXdfV9LO0oznlzvQ6IS1fesn88KfCVGrJnNqEkb7LQ5a5QpEQz9AQA2eU9oAB3sAKICFJfUlYqpmjezKwyd99L+ChT74uwphf7TJxLcWrEt49vOsFtb/jD4L9XQ+Du3ZtOef9eyHAZEnsGw++pgmYgeg1mDFnc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485321; c=relaxed/simple; bh=6G+HupLEy7RoQW/oaRMLwy3Q9S37tIjtSZCXvkrmYmU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mU7wUg8EedEOLaT9Onap2+ErMMjLEqNCRw2xGi8JSakjlhEZf8uhTmDv9dx16TvU5mUc50FdjkpwJsIxDTnRdX2Y5sNhek81qsBQFUrTAdkb8lWXhONrq+lkeCNvaJ3e4Jh1/UXovXLRBIuaFClvJ6DZAD401qMQ/4k1Lmw0rG8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=uEBwcr3x; 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="uEBwcr3x" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 97A22C4CEF7; Mon, 6 Apr 2026 14:21:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485320; bh=6G+HupLEy7RoQW/oaRMLwy3Q9S37tIjtSZCXvkrmYmU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uEBwcr3xgDc101sXyUZmyP2HhdQ2KQG9tsXjusdOpcbtmZLvj9MLAB/0pXk0e9jip PrVEKcvGkpCWy9XXk9iaPxn1R3IRmM2kHhgKGA107uoEjhAqAostjiZpyOLJm3/YpO QnwMU/h9n+6lScb8OOZaaHBgf8fj9XILjYSqBZtH2l/M1xOKTrNL7HKMZ207hEowW4 qQukBKGXWtSru0slOUHskG4PdNFLW+gsvdAPVaHA3YtBQCo5+FaiCb/cm9OcQDDx16 LJ0MHkHDrBsifBcUnrjMef386h7Y6GIVCZ7unFeYwpURpbCcditAAyJYwnHO0W2ee/ f05Yxc2GfTcTQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 44/53] selftests/mm: pagemap_ioctl: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:26 +0300 Message-ID: <20260406141735.2179309-45-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" pagemap-ioctl skips HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/pagemap_ioctl.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/mm/pagemap_ioctl.c b/tools/testing/sel= ftests/mm/pagemap_ioctl.c index 7f9428d6062c..e2c62cb6978f 100644 --- a/tools/testing/selftests/mm/pagemap_ioctl.c +++ b/tools/testing/selftests/mm/pagemap_ioctl.c @@ -7,8 +7,6 @@ #include #include #include -#include "vm_util.h" -#include "kselftest.h" #include #include #include @@ -23,6 +21,10 @@ #include #include =20 +#include "vm_util.h" +#include "kselftest.h" +#include "hugepage_settings.h" + #define PAGEMAP_BITS_ALL (PAGE_IS_WPALLOWED | PAGE_IS_WRITTEN | \ PAGE_IS_FILE | PAGE_IS_PRESENT | \ PAGE_IS_SWAPPED | PAGE_IS_PFNZERO | \ @@ -1554,6 +1556,9 @@ int main(int __attribute__((unused)) argc, char *argv= []) if (init_uffd()) ksft_exit_skip("Failed to initialize userfaultfd\n"); =20 + if (!hugetlb_setup_default(4)) + ksft_exit_skip("Not enough huge pages\n"); + ksft_set_plan(117); =20 page_size =3D getpagesize(); @@ -1605,7 +1610,7 @@ int main(int __attribute__((unused)) argc, char *argv= []) } =20 /* 5. SHM Hugetlb page testing */ - mem_size =3D 2*1024*1024; + mem_size =3D default_huge_page_size(); mem =3D gethugetlb_mem(mem_size, &shmid); if (mem) { wp_init(mem, mem_size); @@ -1633,7 +1638,7 @@ int main(int __attribute__((unused)) argc, char *argv= []) } =20 /* 7. File Hugetlb testing */ - mem_size =3D 2*1024*1024; + mem_size =3D default_huge_page_size(); fd =3D memfd_create("uffd-test", MFD_HUGETLB | MFD_NOEXEC_SEAL); if (fd < 0) ksft_exit_fail_msg("uffd-test creation failed %d %s\n", errno, strerror(= errno)); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 D848A387586; Mon, 6 Apr 2026 14:22:06 +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=1775485326; cv=none; b=uDS0YUT/tTmjhwzsMrVfbzfQ7DDvCakQm/R9Mo3aUtFDZm5u1qzV+uuNOeH8hYlkFIwqbzeiZN4pQwDLdHqVVWemtTXxvIjHz+XethNsFbLlAqFOwpWl3WMB0mjTZX+zjRBTecjWACp3rWpDWIdBpOauvjm5H/N74xPvqofDwQw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485326; c=relaxed/simple; bh=y1/LZCjoyF2qnYsdueFnA+DH0rudzkRE8f0qNrnyHBc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IH+nSlXBLZyJtrbJ4qq8RtB/p1tajsdn2yK8XEr3I5sOSko8wK/gZVvtpJg5PlZODy7Uqr+9qcuDuKb1j9rWJQNb1od3GoK7ed+J/thhhDY5LcRs0ASUZiZcM+YOzdpIUwVSb0HxL98L9gR2Sq2UjxDmp+weeaouSUPpy3PSh9o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cPRuhkU6; 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="cPRuhkU6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5F79AC4CEF7; Mon, 6 Apr 2026 14:22:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485326; bh=y1/LZCjoyF2qnYsdueFnA+DH0rudzkRE8f0qNrnyHBc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cPRuhkU6mDC5MuJezdrELx9YKbcv8uiZS9LaS5xXzknAzK9DcpHRfnTIW1as9LEEK T6pTXeqyRzKGBmeTQWPFcZKe9+1hkjXJcrg+2HO/c+CN78JMa6HnEimxSQPEwAwd1o 4lpkALLLJTFPaHyK+Lkk0M6PNHWp1Ibt9ArPxrztdHG0D+cVCue3A9Dkb96b12ZBWf jZr3YUzgU1Lbxdz06fO2taHB34MYGa/I90syKGSvtfJdl3VbuIPbxLzpgS+G9Pnb2w 3yQtG8jdl0W9HbnyXSS2CJxY4PStA0ojUB42lWuDWz6gSCxEi14ZHBlWu4lwl+VHEC ehsbHFqEP1J/Q== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 45/53] selftests/mm: protection_keys: use library code for HugeTLB setup Date: Mon, 6 Apr 2026 17:17:27 +0300 Message-ID: <20260406141735.2179309-46-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" protection_keys open codes setup of HugeTLB pages. Replace it with the library functions from hugepage_setup. Replace exit() calls with _exit() to avoid restoring HugeTLB settings in the middle of test. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/protection_keys.c | 51 ++++++-------------- 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/tools/testing/selftests/mm/protection_keys.c b/tools/testing/s= elftests/mm/protection_keys.c index c069250969f5..6657f13bc7e7 100644 --- a/tools/testing/selftests/mm/protection_keys.c +++ b/tools/testing/selftests/mm/protection_keys.c @@ -47,6 +47,7 @@ #include =20 #include "pkey-helpers.h" +#include "hugepage_settings.h" =20 int iteration_nr =3D 1; int test_nr; @@ -61,6 +62,7 @@ noinline int read_ptr(int *ptr) return *ptr; } =20 +#if CONTROL_TRACING > 0 static void cat_into_file(char *str, char *file) { int fd =3D open(file, O_RDWR); @@ -86,7 +88,6 @@ static void cat_into_file(char *str, char *file) close(fd); } =20 -#if CONTROL_TRACING > 0 static int warned_tracing; static int tracing_root_ok(void) { @@ -709,50 +710,28 @@ static void *malloc_pkey_anon_huge(long size, int pro= t, u16 pkey) } =20 static int hugetlb_setup_ok; -#define SYSFS_FMT_NR_HUGE_PAGES "/sys/kernel/mm/hugepages/hugepages-%ldkB/= nr_hugepages" #define GET_NR_HUGE_PAGES 10 static void setup_hugetlbfs(void) { - int err; - int fd; - char buf[256]; - long hpagesz_kb; - long hpagesz_mb; + long hpagesz_mb =3D HPAGE_SIZE / 1024 / 1024; + unsigned long free_pages; =20 if (geteuid() !=3D 0) { ksft_print_msg("WARNING: not run as root, can not do hugetlb test\n"); return; } =20 - cat_into_file(__stringify(GET_NR_HUGE_PAGES), "/proc/sys/vm/nr_hugepages"= ); - /* - * Now go make sure that we got the pages and that they + * Make sure that we got the pages and that they * are PMD-level pages. Someone might have made PUD-level * pages the default. */ - hpagesz_kb =3D HPAGE_SIZE / 1024; - hpagesz_mb =3D hpagesz_kb / 1024; - sprintf(buf, SYSFS_FMT_NR_HUGE_PAGES, hpagesz_kb); - fd =3D open(buf, O_RDONLY); - if (fd < 0) { - fprintf(stderr, "opening sysfs %ldM hugetlb config: %s\n", - hpagesz_mb, strerror(errno)); - return; - } - - /* -1 to guarantee leaving the trailing \0 */ - err =3D read(fd, buf, sizeof(buf)-1); - close(fd); - if (err <=3D 0) { - fprintf(stderr, "reading sysfs %ldM hugetlb config: %s\n", - hpagesz_mb, strerror(errno)); - return; - } - - if (atoi(buf) !=3D GET_NR_HUGE_PAGES) { - fprintf(stderr, "could not confirm %ldM pages, got: '%s' expected %d\n", - hpagesz_mb, buf, GET_NR_HUGE_PAGES); + hugetlb_save_settings(); + hugetlb_set_nr_pages(HPAGE_SIZE, GET_NR_HUGE_PAGES); + free_pages =3D hugetlb_free_pages(HPAGE_SIZE); + if (free_pages < GET_NR_HUGE_PAGES) { + ksft_print_msg("could not confirm %ldM pages, got: '%ld' expected %d\n", + hpagesz_mb, free_pages, GET_NR_HUGE_PAGES); return; } =20 @@ -1129,7 +1108,7 @@ static void become_child(void) /* in the child */ return; } - exit(0); + _exit(0); } =20 /* Assumes that all pkeys other than 'pkey' are unallocated */ @@ -1508,18 +1487,18 @@ static void test_ptrace_modifies_pkru(int *ptr, u16= pkey) * checking */ if (__read_pkey_reg() !=3D new_pkru) - exit(1); + _exit(1); =20 /* Stop and allow the tracer to clear XSTATE_BV for PKRU */ raise(SIGSTOP); =20 if (__read_pkey_reg() !=3D 0) - exit(1); + _exit(1); =20 /* Stop and allow the tracer to examine PKRU */ raise(SIGSTOP); =20 - exit(0); + _exit(0); } =20 pkey_assert(child =3D=3D waitpid(child, &status, 0)); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 986753822BE; Mon, 6 Apr 2026 14:22:12 +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=1775485332; cv=none; b=F0xC+LzDtKSnD6s5+qsXl6eUGC957YXptVTlqil7cFheVZ3f1+fo59eFoLqxpLHpHk037PPvJr8NHrDG+vZozih8mukvljfDEXlnjrhEzl/w+kJWozkyoo4Jau7mtmPUemLur16g3LzqDfi1Mg/7L+aTFuXIyn5mJ0NZxMF2fUE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485332; c=relaxed/simple; bh=pMqT3V7GrLrPKmH8KQ0+ElCx+AnALakW5vIuoVUm4lQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VJ9vAtgRvPrW8OnUzLlmSxLuQHxNwf/X1GmKrR2Qo/UqRZCJsSDNJdrsEaTIfnBTKvrdeE22iZMYvXOpramf5kQ4dBttqGB9zDKl1GvBomBjWIspIGkXTVrWdhGqNvYmKY9mB7T85z+1BV5Z0I+wOfnmLxMRGNr52uW7urPGkwg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BYH1bLrW; 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="BYH1bLrW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 34247C4CEF7; Mon, 6 Apr 2026 14:22:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485332; bh=pMqT3V7GrLrPKmH8KQ0+ElCx+AnALakW5vIuoVUm4lQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BYH1bLrWN+kqDPqrKkbA/4R+gwbNFK9TBYJJa3XC5o3+nbbQZq/YB07XN+qTrXCBf fa88CC6sECrTZ+O+5xaH46DwoO6jiK8+Hd8+evRAks2PIOzIFS4+VOAQGY25EqjXr4 gcdfR7i5izU3e6Zq8MNeyIK/UyEvLgw4rwoKZOE6wCVMNl3GrxX1hWzPdqpeiqkz7m YaPtB/OurDAY0cwg+u7lRJnJeIDEvX9EVncLETO+joHQ0QmB4RaD5HKr2Fa2Ag3/Mc j55mno1SZEFewORkJd+GfGteJYauRJNz2FCogxmmj/5bwnTIg67pWSOsXIVxEWcGsA EbXS0MNwPJUMA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 46/53] selftests/mm: thuge-gen: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:28 +0300 Message-ID: <20260406141735.2179309-47-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" thuge-gen skips tests if there are no free huge pages prepared by a wrapper script and shm liimts in proc are too low. Replace custom detection of huge pages with the library functions and add setup of HugeTLB pages and shm limits to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/thuge-gen.c | 79 ++++---------------------- 1 file changed, 11 insertions(+), 68 deletions(-) diff --git a/tools/testing/selftests/mm/thuge-gen.c b/tools/testing/selftes= ts/mm/thuge-gen.c index 1007bc8aa57c..b63d87d72a7d 100644 --- a/tools/testing/selftests/mm/thuge-gen.c +++ b/tools/testing/selftests/mm/thuge-gen.c @@ -38,15 +38,6 @@ #ifndef SHM_HUGE_SHIFT #define SHM_HUGE_SHIFT 26 #endif -#ifndef SHM_HUGE_MASK -#define SHM_HUGE_MASK 0x3f -#endif -#ifndef SHM_HUGE_2MB -#define SHM_HUGE_2MB (21 << SHM_HUGE_SHIFT) -#endif -#ifndef SHM_HUGE_1GB -#define SHM_HUGE_1GB (30 << SHM_HUGE_SHIFT) -#endif =20 #define NUM_PAGESIZES 5 #define NUM_PAGES 4 @@ -64,32 +55,10 @@ int ilog2(unsigned long v) =20 void show(unsigned long ps) { - char buf[100]; - if (ps =3D=3D getpagesize()) return; =20 - ksft_print_msg("%luMB: ", ps >> 20); - - fflush(stdout); - snprintf(buf, sizeof buf, - "cat /sys/kernel/mm/hugepages/hugepages-%lukB/free_hugepages", - ps >> 10); - system(buf); -} - -unsigned long read_free(unsigned long ps) -{ - unsigned long val =3D 0; - char buf[100]; - - snprintf(buf, sizeof(buf), - "/sys/kernel/mm/hugepages/hugepages-%lukB/free_hugepages", - ps >> 10); - if (read_sysfs(buf, &val) && ps !=3D getpagesize()) - ksft_print_msg("missing %s\n", buf); - - return val; + ksft_print_msg("%luMB: %ld\n", ps >> 20, hugetlb_free_pages(ps)); } =20 void test_mmap(unsigned long size, unsigned flags) @@ -97,14 +66,14 @@ void test_mmap(unsigned long size, unsigned flags) char *map; unsigned long before, after; =20 - before =3D read_free(size); + before =3D hugetlb_free_pages(size); map =3D mmap(NULL, size*NUM_PAGES, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB|flags, -1, 0); if (map =3D=3D MAP_FAILED) ksft_exit_fail_msg("mmap: %s\n", strerror(errno)); =20 memset(map, 0xff, size*NUM_PAGES); - after =3D read_free(size); + after =3D hugetlb_free_pages(size); =20 show(size); ksft_test_result(size =3D=3D getpagesize() || (before - after) =3D=3D NUM= _PAGES, @@ -121,7 +90,7 @@ void test_shmget(unsigned long size, unsigned flags) struct shm_info i; char *map; =20 - before =3D read_free(size); + before =3D hugetlb_free_pages(size); id =3D shmget(IPC_PRIVATE, size * NUM_PAGES, IPC_CREAT|0600|flags); if (id < 0) { if (errno =3D=3D EPERM) { @@ -142,7 +111,7 @@ void test_shmget(unsigned long size, unsigned flags) shmctl(id, IPC_RMID, NULL); =20 memset(map, 0xff, size*NUM_PAGES); - after =3D read_free(size); + after =3D hugetlb_free_pages(size); =20 show(size); ksft_test_result(size =3D=3D getpagesize() || (before - after) =3D=3D NUM= _PAGES, @@ -154,43 +123,15 @@ void test_shmget(unsigned long size, unsigned flags) void find_pagesizes(void) { unsigned long largest =3D getpagesize(); - unsigned long shmmax_val =3D 0; int i; - glob_t g; =20 - glob("/sys/kernel/mm/hugepages/hugepages-*kB", 0, NULL, &g); - assert(g.gl_pathc <=3D NUM_PAGESIZES); - for (i =3D 0; (i < g.gl_pathc) && (num_page_sizes < NUM_PAGESIZES); i++) { - sscanf(g.gl_pathv[i], "/sys/kernel/mm/hugepages/hugepages-%lukB", - &page_sizes[num_page_sizes]); - page_sizes[num_page_sizes] <<=3D 10; - ksft_print_msg("Found %luMB\n", page_sizes[i] >> 20); + num_page_sizes =3D hugetlb_setup(NUM_PAGES, page_sizes, ARRAY_SIZE(page_s= izes)); =20 - if (page_sizes[num_page_sizes] > largest) + for (i =3D 0; i < num_page_sizes; i++) + if (page_sizes[i] > largest) largest =3D page_sizes[i]; =20 - if (read_free(page_sizes[num_page_sizes]) >=3D NUM_PAGES) - num_page_sizes++; - else - ksft_print_msg("SKIP for size %lu MB as not enough huge pages, need %u\= n", - page_sizes[num_page_sizes] >> 20, NUM_PAGES); - } - globfree(&g); - - read_sysfs("/proc/sys/kernel/shmmax", &shmmax_val); - if (shmmax_val < NUM_PAGES * largest) { - ksft_print_msg("WARNING: shmmax is too small to run this test.\n"); - ksft_print_msg("Please run the following command to increase shmmax:\n"); - ksft_print_msg("echo %lu > /proc/sys/kernel/shmmax\n", largest * NUM_PAG= ES); - ksft_exit_skip("Test skipped due to insufficient shmmax value.\n"); - } - -#if defined(__x86_64__) - if (largest !=3D 1U<<30) { - ksft_exit_skip("No GB pages available on x86-64\n" - "Please boot with hugepagesz=3D1G hugepages=3D%d\n", NUM_PAGES); - } -#endif + shm_limits_prepare(NUM_PAGES * largest); } =20 int main(void) @@ -233,3 +174,5 @@ int main(void) =20 ksft_finished(); } + +SHM_LIMITS_RESTORE() --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 5DFB9383C82; Mon, 6 Apr 2026 14:22:18 +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=1775485338; cv=none; b=Gbyp4owLtetFBF7caopjZGy2Z4xe+ar56tafhCvenhr6RTQXwMY6edA0EtLGKlzvD3uZ9n5g3XjktQQBQ1KDOJfzjhaoht2Fa01dKkXAhvH1qFAPWvzeu7kkeWk1eq4nH1XR6+uapb1Si/D9H9TnTuHXCrj4SHyHrWnNNpH1lM0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485338; c=relaxed/simple; bh=n2KgdfeDkv6qGICkBg3Vwdx+MRmhbjeNlFxUjnQTB8E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OvdmXlRfk/74+zoHsafuMUGacDuYpGrVH2hYJrAbCRm6K/IEUibCM98bdj4jy9BddJN244B5frb9QF69rwBTM/TxifulbqFQkc+p8awajkVbn2IkO1n0RNR1WSvpr1sv5fgQsgpP0vHz0k/llW0SwGKyT6RDpSkmDxQvIiJaULE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HVQdV5Nj; 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="HVQdV5Nj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 024D9C4CEF7; Mon, 6 Apr 2026 14:22:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485338; bh=n2KgdfeDkv6qGICkBg3Vwdx+MRmhbjeNlFxUjnQTB8E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HVQdV5NjOMae23YnkDJqbhXIXRIvarXLiGjQXNzVM1HhAdxTHA473+q34g55LSTac +5Ic3jvWPiNUGJpsG2uFYh7yZs8OvMHrkXBVedvuRYGYipe+UY4//sbJKeg8G/peh+ G+OVu7eMqtC3fbRRBnQNpexqPfNnBENZM1Fc6yrAXZ6uPcH8PBASGM1RcMDGN3T4kX RwmwF1jYqQPiW73FOCrlY8fblS3zwrks7eIj5di3ZWIO0aijiia7q3uVw8JqGNYv9Z wpvvhhSx+81KPECoqbjFMVsBcAEWWMCJccHepUog8B0+9IZ72YU3O1x7aPuPUc1gsN cWH3yZDX38qOQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 47/53] selftests/mm: uffd-stress: use hugetlb_save and alloc huge pages Date: Mon, 6 Apr 2026 17:17:29 +0300 Message-ID: <20260406141735.2179309-48-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" uffd-stress skips HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/uffd-stress.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/mm/uffd-stress.c b/tools/testing/selft= ests/mm/uffd-stress.c index 7e37cf3d27f6..9693d042f16f 100644 --- a/tools/testing/selftests/mm/uffd-stress.c +++ b/tools/testing/selftests/mm/uffd-stress.c @@ -479,9 +479,12 @@ int main(int argc, char **argv) * Ensure nr_parallel - 1 hugepages on top of that to account * for racy extra reservation of hugepages. */ - if (gopts->test_type =3D=3D TEST_HUGETLB && - hugetlb_free_default_pages() < 2 * (bytes / gopts->page_size) + gopts-= >nr_parallel - 1) - ksft_exit_skip("Skipping userfaultfd... not enough hugepages\n"); + if (gopts->test_type =3D=3D TEST_HUGETLB) { + unsigned long nr =3D 2 * (bytes / gopts->page_size) + gopts->nr_parallel= - 1; + + if (!hugetlb_setup_default(nr)) + ksft_exit_skip("Skipping userfaultfd... not enough hugepages\n"); + } =20 gopts->nr_pages_per_cpu =3D bytes / gopts->page_size / gopts->nr_parallel; if (!gopts->nr_pages_per_cpu) { --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 2D7C3383C8C; Mon, 6 Apr 2026 14:22:24 +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=1775485344; cv=none; b=WSDvXnxHX1awV8BzaUOGVH1KMx9EN7K30NI0X/1DT9d5otbCfHz/2uDjG/VnUZxS4xnk3AB2/3XwyjNKE3dAkIFrqPNnXtCLrjEq6kEX1KQ/q0ZxG2jryuuMBIbflGY5VeR1M7YTdVrjIaQ1bJ13GzrozaslxRTKahvkKpAKwcs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485344; c=relaxed/simple; bh=C8Qz87BGrLBhc4P4E9wehTmUZkE5iKzjerVbkLBntAU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=moGA6URdYvtykctsCb5o7fUoJXsZY/YjtnarZ/i1+ObZMrMSOWh70h/23D2NIQuB6cTxi33qJtBzqBslfyIi6s9yxV7c2Bd9C8AtPo8PgYgPHgW1WhcPL2gEGqE08868qZ0u2A6l0tiakpRV1KnYT6VtdfwzDqfRq5sxQ3DsTB8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=R+f2wWK1; 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="R+f2wWK1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BC790C4CEF7; Mon, 6 Apr 2026 14:22:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485344; bh=C8Qz87BGrLBhc4P4E9wehTmUZkE5iKzjerVbkLBntAU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=R+f2wWK11uSqkm9w/gfOoe4ZmrpHmrkIcM1nMH2cBjS9dSHUYp+bLIQJ/Tbl8vS4q I5EwAxRWOxcIYqXLtvkMw5zFRiDiugCF9S5eFV7eqRGcMfuBBk4qTA4scRyNVDtZdV otJ46/4U20iAcoCWzjRkv97RyFLYbyqJkRglCuI2PUO9BckpRA4QBpFMUG40/670VB xWlvyefHf3tLItwxLBIz8oTgKU7jNhkwHB0GYNyxnC+ZCkIez7SI+KnHiclZBFrKMt +9Gd/J8NUtQeORxVoxKNj1yD5PKwV0d3JP7w8xDE3v9mRqUyu7gLb1t0IWDuzuQGHT jPMFiLjWpYReA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 48/53] selftests/mm: uffd-unit-tests: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:30 +0300 Message-ID: <20260406141735.2179309-49-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" uffd-unit-tests skips HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Replace exit() calls with _exit() to avoid restoring HugeTLB settings in the middle of test. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/uffd-unit-tests.c | 31 +++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/mm/uffd-unit-tests.c b/tools/testing/s= elftests/mm/uffd-unit-tests.c index 1a33db281f8a..20e1829db91f 100644 --- a/tools/testing/selftests/mm/uffd-unit-tests.c +++ b/tools/testing/selftests/mm/uffd-unit-tests.c @@ -305,7 +305,7 @@ static int pagemap_test_fork(uffd_global_test_opts_t *g= opts, bool with_event, bo if (test_pin) unpin_pages(&args); /* Succeed */ - exit(0); + _exit(0); } waitpid(child, &result, 0); =20 @@ -773,7 +773,7 @@ static void uffd_sigbus_test_common(uffd_global_test_op= ts_t *gopts, bool wp) err("fork"); =20 if (!pid) - exit(faulting_process(gopts, 2, wp)); + _exit(faulting_process(gopts, 2, wp)); =20 waitpid(pid, &err, 0); if (err) @@ -827,7 +827,7 @@ static void uffd_events_test_common(uffd_global_test_op= ts_t *gopts, bool wp) err("fork"); =20 if (!pid) - exit(faulting_process(gopts, 0, wp)); + _exit(faulting_process(gopts, 0, wp)); =20 waitpid(pid, &err, 0); if (err) @@ -1706,11 +1706,32 @@ static int uffd_count_tests(int n_tests, int n_mems= , const char *test_filter) return count; } =20 +static unsigned long uffd_setup_hugetlb(void) +{ + unsigned long nr_hugepages, hp_size; + + hugetlb_save_settings(); + hp_size =3D default_huge_page_size(); + + if (!hp_size) + return 0; + + /* need twice UFFD_TEST_MEM_SIZE, one for src area and one for dst */ + nr_hugepages =3D 2 * MAX(UFFD_TEST_MEM_SIZE, hp_size * 2) / hp_size; + hugetlb_set_nr_default_pages(nr_hugepages); + + if (hugetlb_free_default_pages() < nr_hugepages) + return 0; + + return hp_size; +} + int main(int argc, char *argv[]) { int n_tests =3D sizeof(uffd_tests) / sizeof(uffd_test_case_t); int n_mems =3D sizeof(mem_types) / sizeof(mem_type_t); const char *test_filter =3D NULL; + unsigned long hugepage_size; bool list_only =3D false; uffd_test_case_t *test; mem_type_t *mem_type; @@ -1745,6 +1766,8 @@ int main(int argc, char *argv[]) return KSFT_PASS; } =20 + hugepage_size =3D uffd_setup_hugetlb(); + ksft_print_header(); ksft_set_plan(uffd_count_tests(n_tests, n_mems, test_filter)); =20 @@ -1771,7 +1794,7 @@ int main(int argc, char *argv[]) uffd_test_case_ops =3D test->test_case_ops; =20 if (mem_type->mem_flag & (MEM_HUGETLB_PRIVATE | MEM_HUGETLB)) { - gopts.page_size =3D default_huge_page_size(); + gopts.page_size =3D hugepage_size; if (gopts.page_size =3D=3D 0) { uffd_test_skip("huge page size is 0, feature missing?"); continue; --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 1EBC4382379; Mon, 6 Apr 2026 14:22:29 +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=1775485350; cv=none; b=bJBit7SHGKupCbHR5zyaK6Ne2oIKyU/8Pu/hlQWUjygaXygp0YUl/m5bFxf0POq/gPFaJK+o8WC5tR/Nwk2gdzVlr9i4ArONrNiGjxzLR3CQ32VFoJw2Na5r9oeBc7KnvqhRneLYp4+CWZeOTotODt5Q0KuOCPjt/bVSxBBLGSU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485350; c=relaxed/simple; bh=HtpaUkBbB7ijuw6rctcgEdxPGwj4VxmBP6AvOyp0uHE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ggDM1fQDl7IZV2866sCZehzRGdxA3XMzU7YQZDeeAnkJqtIk9aBTzMMYPNGIMikIMdhfRM6alFwYhFX907xuez/zMK89C/zEwxu8fIcayEUFhyoQUfM7VzSVPt8lzH7v+o1dwcapALKuPmZ4pwvNMaY/KW7hK3+xa+X22jMBaXQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TF6tEmT4; 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="TF6tEmT4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 82C65C4CEF7; Mon, 6 Apr 2026 14:22:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485349; bh=HtpaUkBbB7ijuw6rctcgEdxPGwj4VxmBP6AvOyp0uHE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TF6tEmT40RH2kGrtuZAt24+jBc0o5j7vcOmyMvGR9T0mxP6K0eLAhbyCN4X1nA6OS nEEoZvaemSaPAWM21Nkl3+WNZgmNvC1gwpBpv8490Wbh5cbb+e+bgvUKbnAR+VkhOl 3ux38WwEk7d2SCxDEsK9QwK+UQ8Cm603XgTOr6IdWpAjkKNhLxt2R5Kz7B01lCwtrX UBtcM6Irm+1F7denqZNEghot7G3mjLTJ446YuOk0kYO44tCBZJ7ygblrUDFeDGbZcU 9b2ShSGbfziy7ItIYBg93yF/2oSu8EfLkHbR2VmLrQ4AkgQpvGi6/A7aXHvwMpcyJL +y5ajsMM7FeMg== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 49/53] selftests/mm: uffd-wp-mremap: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:31 +0300 Message-ID: <20260406141735.2179309-50-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" uffd-wp-remap skips HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/uffd-wp-mremap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/mm/uffd-wp-mremap.c b/tools/testing/se= lftests/mm/uffd-wp-mremap.c index 9d67b11c2f28..f63fe02f404f 100644 --- a/tools/testing/selftests/mm/uffd-wp-mremap.c +++ b/tools/testing/selftests/mm/uffd-wp-mremap.c @@ -336,14 +336,14 @@ int main(int argc, char **argv) struct thp_settings settings; int i, j, plan =3D 0; =20 + hugepage_save_settings(true, true); + pagesize =3D getpagesize(); nr_thpsizes =3D detect_thp_sizes(thpsizes, ARRAY_SIZE(thpsizes)); - nr_hugetlbsizes =3D detect_hugetlb_page_sizes(hugetlbsizes, - ARRAY_SIZE(hugetlbsizes)); + nr_hugetlbsizes =3D hugetlb_setup(1, hugetlbsizes, ARRAY_SIZE(hugetlbsize= s)); =20 /* If THP is supported, save THP settings and initially disable THP. */ if (nr_thpsizes) { - thp_save_settings(); thp_read_settings(&settings); for (i =3D 0; i < NR_ORDERS; i++) { settings.hugepages[i].enabled =3D THP_NEVER; --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 A5CEE384238; Mon, 6 Apr 2026 14:22:35 +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=1775485355; cv=none; b=MWSaLbVGDFLe8Pws2KLXZH2BPEw7lxIGdf6yppP9P20SBkgDjDWw7MiIZmMGJ5ecyhSnm2rzMMjIaSpBlSY6BYJnHQivdSB3ubnNlZyPU7SUpzynCB2nM3g8Oy87S7udjGsXVMR2ff1S/JLc0P6ira+hgkFrvs80cJZ039GBlxw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485355; c=relaxed/simple; bh=c9lUlZ2MxGuh/r9cAcf/coqCUPJYBUQSQ+lZzu+qpn4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ivBHec+wvXAgTVrcVgcUwERsA3Ql27aZX0kzOs9fv3LDSY8/w44L3Zq9s7181ROUC8506JJJXWA8eXXNEnGsDDO5GArIk29A5vZcfcghGyqESbPAPXzo6LLKEwK8jPAmpOtZ43eLUbcIOPluT45axE4zTYFzXHFm4g1hCdRUH2E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cEsblsUH; 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="cEsblsUH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4A0CAC4CEF7; Mon, 6 Apr 2026 14:22:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485355; bh=c9lUlZ2MxGuh/r9cAcf/coqCUPJYBUQSQ+lZzu+qpn4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cEsblsUH9azMAcK080g7t0QSFUTGfc0iQBF1lE3jnkjzFQa/DMnrgcwQUtQO+SuN1 kBF7m5lf6V37cqCz7rpVEBp6W9JgYWkZvFXO+rFlGze9jJ7t5TJU8Qm9LnhqkmiBcC ntTHXQm9+5JJ4Pnw2gK/n4QZO2kzXv4Zyo4qbxciumi9G/NBYvvvjIQkWprEUEpMOF Np4dS/XumqPG/6xZCq2IP6I+W/V1FkNHXRAzah/r+CTsqZZNsWUda5kZ4NWb1iXdW7 ufqCernM6yxBTGLRLK9YW+EGR/GSww82H5huWVykgk7zjoUYssPv7J0y58xkeMfq1K zF5S++tOYandQ== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 50/53] selftests/mm: va_high_addr_switch: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:32 +0300 Message-ID: <20260406141735.2179309-51-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" va_high_addr_switch skips HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/va_high_addr_switch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/mm/va_high_addr_switch.c b/tools/testi= ng/selftests/mm/va_high_addr_switch.c index d42ad50eb2d3..4a764589f553 100644 --- a/tools/testing/selftests/mm/va_high_addr_switch.c +++ b/tools/testing/selftests/mm/va_high_addr_switch.c @@ -323,7 +323,7 @@ int main(int argc, char **argv) if (!supported_arch()) ksft_exit_skip("Architecture not supported\n"); =20 - if (argc =3D=3D 2 && !strcmp(argv[1], "--run-hugetlb")) + if (hugetlb_setup_default(6)) run_hugetlb =3D true; =20 testcases_init(); --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 6DEEC3806B2; Mon, 6 Apr 2026 14:22:41 +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=1775485361; cv=none; b=G3CpGR43GpkcpUuELPWlLAjkV69bDvy5y52DWwZ2cp0TUgtlTwlbQ/ZeWKeD1UhwxrWsP1XUipPw94xramwL5lyZRhGOMit8kry/HzerX2GLw++bGBdtfFMBbBnhcoaiqNthegGKPN0ej8VD6eAXpSDUugUrtCu6Ui45e95bAfQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485361; c=relaxed/simple; bh=M6q1zkEt1sbIFV6K++NJye6dlph/Y82XdwR7nYmElQA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gu+rGHQYyW45VMOcLCjFTVma6mHhj5YBHRZ0AIgZ4gcIe007r46OAs6Zs3nkUg9TWtLLTwJw8ITb9IpOlqLPyi9pJy+n36vhpccNHqfAiMtOUW2eUH5E4iHFMrt7Y7+x4F1MYLQP8weN4vENXvejFsvAnLthorO8OURlTIfqjnw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QAJP+Jhd; 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="QAJP+Jhd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 10E00C4CEF7; Mon, 6 Apr 2026 14:22:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485361; bh=M6q1zkEt1sbIFV6K++NJye6dlph/Y82XdwR7nYmElQA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QAJP+JhdtSkCNKhsErENZZU8T6LZDngJhrwYigw/W0evwsKLji1rs8q4lLoyEO6hT 8tp9/XthNoGL/C6m6fcXdrDrU5SOn1iAZ5CI4W3r27OZejYyOw1ohrA+ERF2umOK1Z 81q/FcO2T8MUFOQzwabh8CM0E35mpGsSfYJaDjby3rtxcIy2T15+VzSB2NFkKRGC91 tuCKCrFHXbuOYfzk3Xviwf4Gx0+elZ8cfLapXD8Havt+ulJdxev68326nNOLZBAOLC EzwPUEHUXxLZrkYCNRLr6b/3Iv/hfl8svR38nMVvUqopiaJKnOUxt/2ELr9inpVo+Y 6Gqnrs7o4N5Jw== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 51/53] selftests/mm: va_high_addr_switch.sh: drop huge pages setup Date: Mon, 6 Apr 2026 17:17:33 +0300 Message-ID: <20260406141735.2179309-52-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Since va_high_addr_switch takes care of setting up huge pages, there is no need to set them up in the va_high_addr_switch.sh wrapper script. Signed-off-by: Mike Rapoport (Microsoft) --- .../selftests/mm/va_high_addr_switch.sh | 39 +------------------ 1 file changed, 1 insertion(+), 38 deletions(-) diff --git a/tools/testing/selftests/mm/va_high_addr_switch.sh b/tools/test= ing/selftests/mm/va_high_addr_switch.sh index 9492c2d72634..d66c0fd3cb4d 100755 --- a/tools/testing/selftests/mm/va_high_addr_switch.sh +++ b/tools/testing/selftests/mm/va_high_addr_switch.sh @@ -9,7 +9,6 @@ =20 # Kselftest framework requirement - SKIP code is 4. ksft_skip=3D4 -orig_nr_hugepages=3D0 =20 skip() { @@ -77,43 +76,7 @@ check_test_requirements() esac } =20 -save_nr_hugepages() -{ - orig_nr_hugepages=3D$(cat /proc/sys/vm/nr_hugepages) -} - -restore_nr_hugepages() -{ - echo "$orig_nr_hugepages" > /proc/sys/vm/nr_hugepages -} - -setup_nr_hugepages() -{ - local needpgs=3D$1 - while read -r name size unit; do - if [ "$name" =3D "HugePages_Free:" ]; then - freepgs=3D"$size" - break - fi - done < /proc/meminfo - if [ "$freepgs" -ge "$needpgs" ]; then - return - fi - local hpgs=3D$((orig_nr_hugepages + needpgs)) - echo $hpgs > /proc/sys/vm/nr_hugepages - - local nr_hugepgs=3D$(cat /proc/sys/vm/nr_hugepages) - if [ "$nr_hugepgs" !=3D "$hpgs" ]; then - restore_nr_hugepages - skip "$0: no enough hugepages for testing" - fi -} - check_test_requirements -save_nr_hugepages -# The HugeTLB tests require 6 pages -setup_nr_hugepages 6 -./va_high_addr_switch --run-hugetlb +./va_high_addr_switch retcode=3D$? -restore_nr_hugepages exit $retcode --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 8F569381B0C; Mon, 6 Apr 2026 14:22:47 +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=1775485367; cv=none; b=meUD+Ah/AYyootOFE2c3zy5+2dUgd5+W8xP/xy0FONOK6Qo0X/vATYZqCl6bNJREiQvC/LBJ1BHNiivC/waJDNUZFg3zREDtiL8YLIaBBWFvLt2Q6+YyZpUEEyE328EZzBdfpwTM8Uym6wcjqUk3ciQe+YbiWndfYyib0RQz5HQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485367; c=relaxed/simple; bh=XYoR5ykBzH9ln8CEkCcM3Jpo8h2bXIFgxUkz6fxZ/LA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QiEEOUSxAgntT+/QQvYHuox495w3vdLZ/8ZbNoKTh3kab8Ah2bQ+qVmyLQUpDYRRjYZ2voByuuiDzDMSs7qsd8/4Zv19th8/GkR+fgf6k6WwWyeaMxX5wusGyoqrlKUnYVPQaoEpiO2f4jbLx39ZQFbkDwGWky7u7s7aE9FVuic= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RVN+JTw/; 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="RVN+JTw/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CBB9EC4CEF7; Mon, 6 Apr 2026 14:22:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485367; bh=XYoR5ykBzH9ln8CEkCcM3Jpo8h2bXIFgxUkz6fxZ/LA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RVN+JTw/uWxfh0PVW+2wwrufGbFwIHsBNsRuK8r4mzYYR9SfsJJMPDt7+kC2G22h9 /jdXEHXQ78HCa2FtJAIUMNIYUd5Z/VKxdtPDVjlrXzopWagHU/Ms7r7m9shO7BNjUM g+pyM8e9AonkKyL+Vmbppo0/QfyqiuUtOyQRUSQYqI6S1aNb46Lrn6bURL/XJKv7S1 s1joRS/5QIcLVSMRNniGpGXua98DwX71QLLTw7mPl79cQ6+gC9PXg4d4cPaUZC0XF3 vGukwiZTIrYoSFfZlhsMZTAcRB8a/hZ7vu1dvSlpxmb7YI6y44wwPOUGB82847exFC eBjfPOZXIt+LA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 52/53] selftests/mm: run_vmtests.sh: free memory if available memory is low Date: Mon, 6 Apr 2026 17:17:34 +0300 Message-ID: <20260406141735.2179309-53-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" Currently when running THP and HugeTLB tests, if HAVE_HUGEPAGES is set run_test() drops caches, compacts memory and runs the test. But if HAVE_HUGEPAGES is not set it skips the tests entirely, even if THP tests have nothing to do with HAVE_HUGEPAGES. Replace the check if HAVE_HUGEPAGES is set with a check of how much memory is available. If there is less than 256 MB of available memory, drop caches and run compaction and then continue to run a test regardless of HAVE_HUGEPAGES value. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/run_vmtests.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/self= tests/mm/run_vmtests.sh index b9e520194634..b42d19036182 100755 --- a/tools/testing/selftests/mm/run_vmtests.sh +++ b/tools/testing/selftests/mm/run_vmtests.sh @@ -99,6 +99,9 @@ EOF exit 0 } =20 +mem_available_kb=3D$(awk '/MemAvailable/ {print $2}' /proc/meminfo) +mem_available_Mb=3D$((mem_available_kb / 1024)) + RUN_ALL=3Dfalse RUN_DESTRUCTIVE=3Dfalse TAP_PREFIX=3D"# " @@ -239,15 +242,12 @@ run_test() { # On memory constrainted systems some tests can fail to allocate hugepag= es. # perform some cleanup before the test for a higher success rate. if [ ${CATEGORY} =3D=3D "thp" -o ${CATEGORY} =3D=3D "hugetlb" ]; then - if [ "${HAVE_HUGEPAGES}" =3D "1" ]; then - echo 3 > /proc/sys/vm/drop_caches - sleep 2 - echo 1 > /proc/sys/vm/compact_memory - sleep 2 - else - echo "hugepages not supported" | tap_prefix - skip=3D1 - fi + if (( $mem_available_Mb < 256 )); then + echo 3 > /proc/sys/vm/drop_caches + sleep 2 + echo 1 > /proc/sys/vm/compact_memory + sleep 2 + fi fi =20 local test=3D$(pretty_name "$*") --=20 2.53.0 From nobody Sun Jun 14 21:18:04 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 41A4C381B0C; Mon, 6 Apr 2026 14:22:52 +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=1775485373; cv=none; b=CE2NdqLjYI41WvUi7mW8KJBwk8VCcksOPF6PSzHtGFbXUienuNBpqHmH73Z7Iqs7eS8JVFPdDVUE4j9bZR6o+NaYDssTCzY3mzK2NJ77fWPqcVMiOO2qC8zDtLR5Dngi1oYxVXGYtxiflePzU1AoBIUWh/zfOzGtCy88scTXe7g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485373; c=relaxed/simple; bh=sZoUbqG9CxBotaWHnOZiPFKTeBgb66YHvpq2HPRKqX0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m5HSQFb9I0yWtXbXvi3b9zP8Ug3aDNqM5S1BIRiipxjckzj6Tvn+GC2+cCVJhE4fuWuuEJshPo3CYCgGGqrSKilh9Yaz94JTtRuZO3jrGdAPUO+OdmHhh4D++sqUk2QK1WfZyhn0Yq4QSnBGaXnpkR1LhSkd5Zajx2pu+Khtr54= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=J3Kk9RhU; 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="J3Kk9RhU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9317DC2BC9E; Mon, 6 Apr 2026 14:22:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485372; bh=sZoUbqG9CxBotaWHnOZiPFKTeBgb66YHvpq2HPRKqX0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=J3Kk9RhUvfGMtcs9qRAEkmrUVJwm0etJxgkg2wBysazgb8bchQM9eu35eExUkxx+P DyZrrIUpNMpM3TE4RYHQ5Ns0uzyWv/Uu2xLiMwusvOKTZinc/D4EYJhFR+ziSNtw4e z47lvoJg7Ju160XRVuqJRW2BOYcfNZGpQEJjYaa/bLZNaCTFIAeEtQG5Cfr9KHs5ZB PoU4dRg6WAXzIipNh+3SwGvQJ8txQkVrV/ffHoS+NlspiNoqpWXNbgpyur1X8xPsu3 WPwdkcHeUIjTTYmJCW9QbhkNLORuIRfCjtEDvYp1toBXDuab4g5jYWjJOTnJjj2IiD V58SeHdkyVOJw== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 53/53] selftests/mm: run_vmtests.sh: drop detection and setup of HugeTLB Date: Mon, 6 Apr 2026 17:17:35 +0300 Message-ID: <20260406141735.2179309-54-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Mike Rapoport (Microsoft)" All the tests that use HugeTLB can detect and setup HugeTLB pages on their own. Drop detection and setup of HugeTLB from run_vmtests.sh. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/run_vmtests.sh | 128 ++-------------------- 1 file changed, 9 insertions(+), 119 deletions(-) diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/self= tests/mm/run_vmtests.sh index b42d19036182..7e0c379e7af4 100755 --- a/tools/testing/selftests/mm/run_vmtests.sh +++ b/tools/testing/selftests/mm/run_vmtests.sh @@ -157,60 +157,6 @@ run_gup_matrix() { done } =20 -# get huge pagesize and freepages from /proc/meminfo -while read -r name size unit; do - if [ "$name" =3D "HugePages_Free:" ]; then - freepgs=3D"$size" - fi - if [ "$name" =3D "Hugepagesize:" ]; then - hpgsize_KB=3D"$size" - fi -done < /proc/meminfo - -# Simple hugetlbfs tests have a hardcoded minimum requirement of -# huge pages totaling 256MB (262144KB) in size. The userfaultfd -# hugetlb test requires a minimum of 2 * nr_cpus huge pages. Take -# both of these requirements into account and attempt to increase -# number of huge pages available. -nr_cpus=3D$(nproc) -uffd_min_KB=3D$((hpgsize_KB * nr_cpus * 2)) -hugetlb_min_KB=3D$((256 * 1024)) -if [[ $uffd_min_KB -gt $hugetlb_min_KB ]]; then - needmem_KB=3D$uffd_min_KB -else - needmem_KB=3D$hugetlb_min_KB -fi - -# set proper nr_hugepages -if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then - orig_nr_hugepgs=3D$(cat /proc/sys/vm/nr_hugepages) - needpgs=3D$((needmem_KB / hpgsize_KB)) - tries=3D2 - while [ "$tries" -gt 0 ] && [ "$freepgs" -lt "$needpgs" ]; do - lackpgs=3D$((needpgs - freepgs)) - echo 3 > /proc/sys/vm/drop_caches - if ! echo $((lackpgs + orig_nr_hugepgs)) > /proc/sys/vm/nr_hugepages; th= en - echo "Please run this test as root" - exit $ksft_skip - fi - while read -r name size unit; do - if [ "$name" =3D "HugePages_Free:" ]; then - freepgs=3D$size - fi - done < /proc/meminfo - tries=3D$((tries - 1)) - done - nr_hugepgs=3D$(cat /proc/sys/vm/nr_hugepages) - if [ "$freepgs" -lt "$needpgs" ]; then - printf "Not enough huge pages available (%d < %d)\n" \ - "$freepgs" "$needpgs" - fi - HAVE_HUGEPAGES=3D1 -else - echo "no hugetlbfs support in kernel?" - HAVE_HUGEPAGES=3D0 -fi - # filter 64bit architectures ARCH64STR=3D"arm64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sparc64 x86= _64" if [ -z "$ARCH" ]; then @@ -283,29 +229,13 @@ run_test() { echo "TAP version 13" | tap_output =20 CATEGORY=3D"hugetlb" run_test ./hugetlb-mmap - -shmmax=3D$(cat /proc/sys/kernel/shmmax) -shmall=3D$(cat /proc/sys/kernel/shmall) -echo 268435456 > /proc/sys/kernel/shmmax -echo 4194304 > /proc/sys/kernel/shmall CATEGORY=3D"hugetlb" run_test ./hugetlb-shm -echo "$shmmax" > /proc/sys/kernel/shmmax -echo "$shmall" > /proc/sys/kernel/shmall - CATEGORY=3D"hugetlb" run_test ./hugetlb-mremap CATEGORY=3D"hugetlb" run_test ./hugetlb-vmemmap CATEGORY=3D"hugetlb" run_test ./hugetlb-madvise CATEGORY=3D"hugetlb" run_test ./hugetlb_dio - -if [ "${HAVE_HUGEPAGES}" =3D "1" ]; then - nr_hugepages_tmp=3D$(cat /proc/sys/vm/nr_hugepages) - # For this test, we need one and just one huge page - echo 1 > /proc/sys/vm/nr_hugepages - CATEGORY=3D"hugetlb" run_test ./hugetlb_fault_after_madv - CATEGORY=3D"hugetlb" run_test ./hugetlb_madv_vs_map - # Restore the previous number of huge pages, since further tests rely on = it - echo "$nr_hugepages_tmp" > /proc/sys/vm/nr_hugepages -fi +CATEGORY=3D"hugetlb" run_test ./hugetlb_fault_after_madv +CATEGORY=3D"hugetlb" run_test ./hugetlb_madv_vs_map =20 if test_selected "hugetlb"; then echo "NOTE: These hugetlb tests provide minimal coverage. Use" | tap_p= refix @@ -332,44 +262,12 @@ CATEGORY=3D"gup_test" run_test ./gup_longterm CATEGORY=3D"userfaultfd" run_test ./uffd-unit-tests uffd_stress_bin=3D./uffd-stress CATEGORY=3D"userfaultfd" run_test ${uffd_stress_bin} anon 20 16 -# Hugetlb tests require source and destination huge pages. Pass in almost = half -# the size of the free pages we have, which is used for *each*. An adjustm= ent -# of (nr_parallel - 1) is done (see nr_parallel in uffd-stress.c) to have = some -# extra hugepages - this is done to prevent the test from failing by racily -# reserving more hugepages than strictly required. -# uffd-stress expects a region expressed in MiB, so we adjust -# half_ufd_size_MB accordingly. adjustment=3D$(( (31 < (nr_cpus - 1)) ? 31 : (nr_cpus - 1) )) -half_ufd_size_MB=3D$((((freepgs - adjustment) * hpgsize_KB) / 1024 / 2)) -CATEGORY=3D"userfaultfd" run_test ${uffd_stress_bin} hugetlb "$half_ufd_si= ze_MB" 32 -CATEGORY=3D"userfaultfd" run_test ${uffd_stress_bin} hugetlb-private "$hal= f_ufd_size_MB" 32 +CATEGORY=3D"userfaultfd" run_test ${uffd_stress_bin} hugetlb 128 32 +CATEGORY=3D"userfaultfd" run_test ${uffd_stress_bin} hugetlb-private 128 32 CATEGORY=3D"userfaultfd" run_test ${uffd_stress_bin} shmem 20 16 CATEGORY=3D"userfaultfd" run_test ${uffd_stress_bin} shmem-private 20 16 -# uffd-wp-mremap requires at least one page of each size. -have_all_size_hugepgs=3Dtrue -declare -A nr_size_hugepgs -for f in /sys/kernel/mm/hugepages/**/nr_hugepages; do - old=3D$(cat $f) - nr_size_hugepgs["$f"]=3D"$old" - if [ "$old" =3D=3D 0 ]; then - echo 1 > "$f" - fi - if [ $(cat "$f") =3D=3D 0 ]; then - have_all_size_hugepgs=3Dfalse - break - fi -done -if $have_all_size_hugepgs; then - CATEGORY=3D"userfaultfd" run_test ./uffd-wp-mremap -else - echo "# SKIP ./uffd-wp-mremap" -fi - -#cleanup -for f in "${!nr_size_hugepgs[@]}"; do - echo "${nr_size_hugepgs["$f"]}" > "$f" -done -echo "$nr_hugepgs" > /proc/sys/vm/nr_hugepages +CATEGORY=3D"userfaultfd" run_test ./uffd-wp-mremap =20 CATEGORY=3D"compaction" run_test ./compaction_test =20 @@ -393,14 +291,11 @@ CATEGORY=3D"mremap" run_test ./mremap_test CATEGORY=3D"hugetlb" run_test ./thuge-gen CATEGORY=3D"hugetlb" run_test ./charge_reserved_hugetlb.sh -cgroup-v2 CATEGORY=3D"hugetlb" run_test ./hugetlb_reparenting_test.sh -cgroup-v2 + if $RUN_DESTRUCTIVE; then -nr_hugepages_tmp=3D$(cat /proc/sys/vm/nr_hugepages) -enable_soft_offline=3D$(cat /proc/sys/vm/enable_soft_offline) -echo 8 > /proc/sys/vm/nr_hugepages -CATEGORY=3D"hugetlb" run_test ./hugetlb-soft-offline -echo "$nr_hugepages_tmp" > /proc/sys/vm/nr_hugepages -echo "$enable_soft_offline" > /proc/sys/vm/enable_soft_offline -CATEGORY=3D"hugetlb" run_test ./hugetlb-read-hwpoison + CATEGORY=3D"hugetlb" run_test ./hugetlb-soft-offline + echo "$enable_soft_offline" > /proc/sys/vm/enable_soft_offline + CATEGORY=3D"hugetlb" run_test ./hugetlb-read-hwpoison fi =20 if [ $VADDR64 -ne 0 ]; then @@ -464,7 +359,6 @@ if [ -x ./protection_keys_64 ] then CATEGORY=3D"pkey" run_test ./protection_keys_64 fi -echo "$nr_hugepgs" > /proc/sys/vm/nr_hugepages =20 if [ -x ./soft-dirty ] then @@ -545,10 +439,6 @@ if [ -n "${LOADED_MOD}" ]; then modprobe -r hwpoison_inject > /dev/null 2>&1 fi =20 -if [ "${HAVE_HUGEPAGES}" =3D 1 ]; then - echo "$orig_nr_hugepgs" > /proc/sys/vm/nr_hugepages -fi - echo "SUMMARY: PASS=3D${count_pass} SKIP=3D${count_skip} FAIL=3D${count_fa= il}" | tap_prefix echo "1..${count_total}" | tap_output =20 --=20 2.53.0