From nobody Fri Sep 25 10:38:39 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id ABEEE3E4C90; Mon, 14 Sep 2026 07:31:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789371071; cv=none; b=oBjXVejIPbMRzX1AtaCxLbF4P+2jxkEpqKX1ALuzYGjPPFeFKRtXsa7sDwL4gMGxpotJxz/yO+H+JkkV83xQX0k+zWIhbimOoleCcIKpNWq4RSxLfTjemrKlOjA87r4KAH7XsWu9ualDTZj85jg4ruBY5FsFHljuTtzeBV1kC3Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789371071; c=relaxed/simple; bh=utuQ5Qw9PHZyHCVvUbwACf+tdMWlTIbrwdI3rerxdQA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ppitfUKg1hHvHIOaW1l2+EzSQcDhrr06MleT88CveUn/TwIXs/IBLsN/W+E9ZDzAQ7fBBH7hoECLHdrzb5vIXeDiNguE4XwPvjmhnV0aJ25qr2WrlVOOArP6uFdKAnhzxuWb8NIms17ka5R/WOHB+XGobNA+Mnuhs/IgJPd+kIQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=OPHlJX+M; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="OPHlJX+M" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3F5251570; Mon, 14 Sep 2026 00:31:04 -0700 (PDT) Received: from e129823.arm.com (e129823.arm.com [10.2.213.3]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6E39B3F59E; Mon, 14 Sep 2026 00:31:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1789371067; bh=utuQ5Qw9PHZyHCVvUbwACf+tdMWlTIbrwdI3rerxdQA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=OPHlJX+Mm3VJajJB1BXzm3KaXutP5muvUHjdzs6Mpk9Xf9yoNzGoPYet2V9rDbwqM iQXRrV84FxW7EjXoH6VwZUnJXlJUoaYsdf0ivpXm/LaQbmMuwXKyNpj+fL45CnUNSM Qb7GlLz40/tOQ3qkha4sWMrRleFv+fCwRU2M0/hI= From: Yeoreum Yun Date: Mon, 14 Sep 2026 08:30:46 +0100 Subject: [PATCH v3 1/3] kselftest: mm: rename read_pmd_pagesize() to pmd_psize() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260914-fix_hpage_macro-v3-1-c9a305a01d39@arm.com> References: <20260914-fix_hpage_macro-v3-0-c9a305a01d39@arm.com> In-Reply-To: <20260914-fix_hpage_macro-v3-0-c9a305a01d39@arm.com> To: Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Usama Arif , Kiryl Shutsemau , Peter Xu , linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Shuah Khan , Jason Gunthorpe , Leon Romanovsky , Sarthak Sharma , Yeoreum Yun X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=15952; i=yeoreum.yun@arm.com; h=from:subject:message-id; bh=utuQ5Qw9PHZyHCVvUbwACf+tdMWlTIbrwdI3rerxdQA=; b=owEB7QES/pANAwAKAW3Vw9FaxTEzAcsmYgBqp6KzPEr1wVDDj2wVTFEpz1goBrf0Yh2206PGQ m/Abq57twaJAbMEAAEKAB0WIQQtg+CS3QUzuFh1pJ1t1cPRWsUxMwUCaqeiswAKCRBt1cPRWsUx Mz38C/9dFZF/5oqpApRVeyneKUy8Mi000DqWf/jJinZozi7rVr1tjQn4HzDLV6PYfSNDw0mlgnI C3/DrQcfSkFWdaGyOuPpTGbfawqMUQQYfmCPVf2Rt/Hrn5lSbhVjiUdmzdnuSXGbwPEap087QzE sqJVm8MHiVWxGjJWfo+2ZfmkKwUdkxYkTlrx+FFFu5TmLJZk/e/yyGPZlGImNyxymu8/cr3Gvwp I4ajSsAsA0G0pKTWbgBjuItuQgVJxWGd1T8f5VGKr2gTVTCZVoazOr54S6gk5Aw9wGL0G+bL9Ge 9i5w4lJ+Kz83PZv1tlQfKe/oLS9M0zB+bavoTEkqLHVP2g8WjH0Bp1mS3Us8/qvquOlIQQyyDBh M7UaDtUUgVJtyB2jaRfJykGKSWieGUIarROyB0dsKzVgLj+5UmNcT4kmP2jq7NvgjtJVjW0SSoB 46fOBVhY73qmM1TqXZ9jFrfq+FVhLP+gcoxJzdDSSogBt1c4NJTgy22rRhAxuh5iGQxFg= X-Developer-Key: i=yeoreum.yun@arm.com; a=openpgp; fpr=2D83E092DD0533B85875A49D6DD5C3D15AC53133 For consistency with psize(), rename read_pmd_pagesize() to pmd_psize(). There is no functional change. Suggested-by: David Hildenbrand (Arm) Signed-off-by: Yeoreum Yun Acked-by: David Hildenbrand (Arm) Reviewed-by: Lorenzo Stoakes (ARM) Reviewed-by: Zi Yan --- tools/testing/selftests/mm/cow.c | 2 +- tools/testing/selftests/mm/folio_split_race_test.c | 2 +- tools/testing/selftests/mm/hmm-tests.c | 22 +++++++++++-------= ---- tools/testing/selftests/mm/khugepaged.c | 2 +- tools/testing/selftests/mm/migration.c | 4 ++-- tools/testing/selftests/mm/mkdirty.c | 2 +- tools/testing/selftests/mm/pagemap_ioctl.c | 2 +- tools/testing/selftests/mm/prctl_thp_disable.c | 4 ++-- tools/testing/selftests/mm/process_madv.c | 2 +- tools/testing/selftests/mm/soft-dirty.c | 2 +- tools/testing/selftests/mm/split_huge_page_test.c | 2 +- tools/testing/selftests/mm/uffd-common.c | 6 +++--- tools/testing/selftests/mm/uffd-unit-tests.c | 8 ++++---- tools/testing/selftests/mm/uffd-wp-mremap.c | 2 +- tools/testing/selftests/mm/vm_util.c | 8 ++++---- tools/testing/selftests/mm/vm_util.h | 2 +- 16 files changed, 36 insertions(+), 36 deletions(-) diff --git a/tools/testing/selftests/mm/cow.c b/tools/testing/selftests/mm/= cow.c index 8aa5249d9bef..e42edeccfd7a 100644 --- a/tools/testing/selftests/mm/cow.c +++ b/tools/testing/selftests/mm/cow.c @@ -1889,7 +1889,7 @@ int main(int argc, char **argv) thp_save_settings(); =20 pagesize =3D getpagesize(); - pmdsize =3D read_pmd_pagesize(); + pmdsize =3D pmd_psize(); if (pmdsize) { /* Only if THP is supported. */ thp_read_settings(&default_settings); diff --git a/tools/testing/selftests/mm/folio_split_race_test.c b/tools/tes= ting/selftests/mm/folio_split_race_test.c index 1960635a953e..a956e5c74c65 100644 --- a/tools/testing/selftests/mm/folio_split_race_test.c +++ b/tools/testing/selftests/mm/folio_split_race_test.c @@ -235,7 +235,7 @@ int main(void) ksft_print_header(); =20 page_size =3D getpagesize(); - pmd_pagesize =3D read_pmd_pagesize(); + pmd_pagesize =3D pmd_psize(); =20 if (!thp_available() || !pmd_pagesize) ksft_exit_skip("Transparent Hugepages not available\n"); diff --git a/tools/testing/selftests/mm/hmm-tests.c b/tools/testing/selftes= ts/mm/hmm-tests.c index e2642eca0d02..ad14372b75d9 100644 --- a/tools/testing/selftests/mm/hmm-tests.c +++ b/tools/testing/selftests/mm/hmm-tests.c @@ -569,7 +569,7 @@ TEST_F(hmm, anon_write_child) =20 for (migrate =3D 0; migrate < 2; ++migrate) { for (use_thp =3D 0; use_thp < 2; ++use_thp) { - npages =3D ALIGN(use_thp ? read_pmd_pagesize() : HMM_BUFFER_SIZE, + npages =3D ALIGN(use_thp ? pmd_psize() : HMM_BUFFER_SIZE, self->page_size) >> self->page_shift; ASSERT_NE(npages, 0); size =3D npages << self->page_shift; @@ -730,7 +730,7 @@ TEST_F(hmm, anon_write_huge) int *ptr; int ret; =20 - size =3D 2 * read_pmd_pagesize(); + size =3D 2 * pmd_psize(); =20 buffer =3D hmm_buffer_alloc(size, size, PROT_READ | PROT_WRITE, @@ -1941,7 +1941,7 @@ TEST_F(hmm, migrate_anon_huge_empty) int *ptr; int ret; =20 - size =3D read_pmd_pagesize(); + size =3D pmd_psize(); =20 buffer =3D hmm_buffer_alloc(2 * size, size, PROT_READ, @@ -1984,7 +1984,7 @@ TEST_F(hmm, migrate_anon_huge_zero) int ret; int val; =20 - size =3D read_pmd_pagesize(); + size =3D pmd_psize(); =20 buffer =3D hmm_buffer_alloc(2 * size, size, PROT_READ, @@ -2038,7 +2038,7 @@ TEST_F(hmm, migrate_anon_huge_free) int *ptr; int ret; =20 - size =3D read_pmd_pagesize(); + size =3D pmd_psize(); =20 buffer =3D hmm_buffer_alloc(2 * size, size, PROT_READ | PROT_WRITE, @@ -2091,7 +2091,7 @@ TEST_F(hmm, migrate_anon_huge_fault) int *ptr; int ret; =20 - size =3D read_pmd_pagesize(); + size =3D pmd_psize(); =20 buffer =3D hmm_buffer_alloc(2 * size, size, PROT_READ | PROT_WRITE, @@ -2161,7 +2161,7 @@ TEST_F(hmm, migrate_partial_unmap_fault) { struct hmm_buffer *buffer; unsigned long npages; - unsigned long size =3D read_pmd_pagesize(); + unsigned long size =3D pmd_psize(); unsigned long unmap_size; unsigned long offsets[3]; unsigned long i; @@ -2226,7 +2226,7 @@ TEST_F(hmm, migrate_remap_fault) { struct hmm_buffer *buffer; unsigned long npages; - unsigned long size =3D read_pmd_pagesize(); + unsigned long size =3D pmd_psize(); unsigned long offsets[3]; unsigned long i; void *old_ptr, *new_ptr =3D NULL; @@ -2323,7 +2323,7 @@ TEST_F(hmm, migrate_anon_huge_err) int *ptr; int ret; =20 - size =3D read_pmd_pagesize(); + size =3D pmd_psize(); =20 buffer =3D hmm_buffer_alloc(2 * size, 2 * size, PROT_READ | PROT_WRITE, @@ -2413,7 +2413,7 @@ TEST_F(hmm, migrate_anon_huge_zero_err) int *ptr; int ret; =20 - size =3D read_pmd_pagesize(); + size =3D pmd_psize(); =20 buffer =3D hmm_buffer_alloc(2 * size, 2 * size, PROT_READ, @@ -2609,7 +2609,7 @@ static inline int run_migration_benchmark(int fd, int= use_thp, size_t buffer_siz TEST_F_TIMEOUT(hmm, benchmark_thp_migration, 120) { struct benchmark_results thp_results, regular_results; - size_t thp_size =3D read_pmd_pagesize(); + size_t thp_size =3D pmd_psize(); int iterations =3D 5; =20 if (!thp_size) diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selfte= sts/mm/khugepaged.c index f82673f5f6b4..76c1fbcc5260 100644 --- a/tools/testing/selftests/mm/khugepaged.c +++ b/tools/testing/selftests/mm/khugepaged.c @@ -1330,7 +1330,7 @@ int main(int argc, char **argv) ksft_exit_skip("Transparent Hugepages not available\n"); =20 page_size =3D getpagesize(); - hpage_pmd_size =3D read_pmd_pagesize(); + hpage_pmd_size =3D pmd_psize(); if (!hpage_pmd_size) ksft_exit_fail_msg("Reading PMD pagesize failed\n"); hpage_pmd_nr =3D hpage_pmd_size / page_size; diff --git a/tools/testing/selftests/mm/migration.c b/tools/testing/selftes= ts/mm/migration.c index f19d53c69576..4280d2c87b22 100644 --- a/tools/testing/selftests/mm/migration.c +++ b/tools/testing/selftests/mm/migration.c @@ -229,7 +229,7 @@ TEST_F_TIMEOUT(migration, private_anon_thp, 2*RUNTIME) if (!thp_is_enabled()) SKIP(return, "Transparent Hugepages not available"); =20 - pmdsize =3D read_pmd_pagesize(); + pmdsize =3D pmd_psize(); if (!pmdsize) SKIP(return, "Reading PMD pagesize failed"); =20 @@ -263,7 +263,7 @@ 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(); + pmdsize =3D pmd_psize(); if (!pmdsize) SKIP(return, "Reading PMD pagesize failed"); =20 diff --git a/tools/testing/selftests/mm/mkdirty.c b/tools/testing/selftests= /mm/mkdirty.c index 68dd447a5454..49ef643a6e63 100644 --- a/tools/testing/selftests/mm/mkdirty.c +++ b/tools/testing/selftests/mm/mkdirty.c @@ -330,7 +330,7 @@ int main(void) int err, tests =3D 2; =20 pagesize =3D getpagesize(); - thpsize =3D read_pmd_pagesize(); + thpsize =3D pmd_psize(); if (thpsize) { ksft_print_msg("[INFO] detected THP size: %zu KiB\n", thpsize / 1024); diff --git a/tools/testing/selftests/mm/pagemap_ioctl.c b/tools/testing/sel= ftests/mm/pagemap_ioctl.c index d9a4fb782ecf..d0e34dd5850b 100644 --- a/tools/testing/selftests/mm/pagemap_ioctl.c +++ b/tools/testing/selftests/mm/pagemap_ioctl.c @@ -1654,7 +1654,7 @@ int main(int __attribute__((unused)) argc, char *argv= []) ksft_print_header(); =20 page_size =3D getpagesize(); - hpage_size =3D read_pmd_pagesize(); + hpage_size =3D pmd_psize(); =20 if (init_uffd()) ksft_exit_skip("Failed to initialize userfaultfd\n"); diff --git a/tools/testing/selftests/mm/prctl_thp_disable.c b/tools/testing= /selftests/mm/prctl_thp_disable.c index 82c6e96ea6eb..d0290c4567bd 100644 --- a/tools/testing/selftests/mm/prctl_thp_disable.c +++ b/tools/testing/selftests/mm/prctl_thp_disable.c @@ -133,7 +133,7 @@ FIXTURE_SETUP(prctl_thp_disable_completely) if (!thp_available()) SKIP(return, "Transparent Hugepages not available\n"); =20 - self->pmdsize =3D read_pmd_pagesize(); + self->pmdsize =3D pmd_psize(); if (!self->pmdsize) SKIP(return, "Unable to read PMD size\n"); =20 @@ -241,7 +241,7 @@ FIXTURE_SETUP(prctl_thp_disable_except_madvise) if (!thp_available()) SKIP(return, "Transparent Hugepages not available\n"); =20 - self->pmdsize =3D read_pmd_pagesize(); + self->pmdsize =3D pmd_psize(); if (!self->pmdsize) SKIP(return, "Unable to read PMD size\n"); =20 diff --git a/tools/testing/selftests/mm/process_madv.c b/tools/testing/self= tests/mm/process_madv.c index 3fffd5f7e6fb..7e32bad8ab2a 100644 --- a/tools/testing/selftests/mm/process_madv.c +++ b/tools/testing/selftests/mm/process_madv.c @@ -141,7 +141,7 @@ TEST_F(process_madvise, remote_collapse) void *map_addr; } info; =20 - huge_page_size =3D read_pmd_pagesize(); + huge_page_size =3D pmd_psize(); if (huge_page_size <=3D 0) SKIP(return, "Could not determine a valid huge page size.\n"); =20 diff --git a/tools/testing/selftests/mm/soft-dirty.c b/tools/testing/selfte= sts/mm/soft-dirty.c index 5f278913c4d7..670fcad083b5 100644 --- a/tools/testing/selftests/mm/soft-dirty.c +++ b/tools/testing/selftests/mm/soft-dirty.c @@ -88,7 +88,7 @@ static void test_hugepage(int pagemap_fd, int pagesize) return; } =20 - size_t hpage_len =3D read_pmd_pagesize(); + size_t hpage_len =3D pmd_psize(); if (!hpage_len) ksft_exit_fail_msg("Reading PMD pagesize failed"); =20 diff --git a/tools/testing/selftests/mm/split_huge_page_test.c b/tools/test= ing/selftests/mm/split_huge_page_test.c index c01d227d7fd6..295a6769d670 100644 --- a/tools/testing/selftests/mm/split_huge_page_test.c +++ b/tools/testing/selftests/mm/split_huge_page_test.c @@ -658,7 +658,7 @@ int main(int argc, char **argv) =20 pagesize =3D getpagesize(); pageshift =3D ffs(pagesize) - 1; - pmd_pagesize =3D read_pmd_pagesize(); + pmd_pagesize =3D pmd_psize(); if (!pmd_pagesize) ksft_exit_fail_msg("Reading PMD pagesize failed\n"); =20 diff --git a/tools/testing/selftests/mm/uffd-common.c b/tools/testing/selft= ests/mm/uffd-common.c index 1fb967ef4985..0b8bbb55c335 100644 --- a/tools/testing/selftests/mm/uffd-common.c +++ b/tools/testing/selftests/mm/uffd-common.c @@ -137,7 +137,7 @@ static void shmem_release_pages(uffd_global_test_opts_t= *gopts, char *rel_area) static int shmem_allocate_area(uffd_global_test_opts_t *gopts, void **allo= c_area, bool is_src) { void *area_alias =3D NULL; - size_t bytes =3D gopts->nr_pages * gopts->page_size, hpage_size =3D read_= pmd_pagesize(); + size_t bytes =3D gopts->nr_pages * gopts->page_size, hpage_size =3D pmd_p= size(); unsigned long offset =3D is_src ? 0 : bytes; char *p =3D NULL, *p_alias =3D NULL; int mem_fd =3D uffd_mem_fd_create(bytes * 2, false); @@ -194,10 +194,10 @@ static void shmem_alias_mapping(uffd_global_test_opts= _t *gopts, __u64 *start, =20 static void shmem_check_pmd_mapping(uffd_global_test_opts_t *gopts, void *= p, int expect_nr_hpages) { - size_t len =3D expect_nr_hpages * read_pmd_pagesize(); + size_t len =3D expect_nr_hpages * pmd_psize(); =20 if (!check_huge_shmem(gopts->area_dst_alias, len, expect_nr_hpages, - read_pmd_pagesize())) + pmd_psize())) err("Did not find expected %d number of hugepages", expect_nr_hpages); } diff --git a/tools/testing/selftests/mm/uffd-unit-tests.c b/tools/testing/s= elftests/mm/uffd-unit-tests.c index 6f2360f9b75d..dcb1755c35fb 100644 --- a/tools/testing/selftests/mm/uffd-unit-tests.c +++ b/tools/testing/selftests/mm/uffd-unit-tests.c @@ -646,7 +646,7 @@ static void uffd_minor_test_common(uffd_global_test_opt= s_t *gopts, bool test_col uffd_test_ops->check_pmd_mapping(gopts, gopts->area_dst, gopts->nr_pages * gopts->page_size / - read_pmd_pagesize()); + pmd_psize()); /* * This won't cause uffd-fault - it purely just makes sure there * was no corruption. @@ -1975,7 +1975,7 @@ static void uffd_move_handle_fault(uffd_global_test_o= pts_t *gopts, struct uffd_m static void uffd_move_pmd_handle_fault(uffd_global_test_opts_t *gopts, str= uct uffd_msg *msg, struct uffd_args *args) { - uffd_move_handle_fault_common(gopts, msg, args, read_pmd_pagesize()); + uffd_move_handle_fault_common(gopts, msg, args, pmd_psize()); } =20 static void @@ -2086,7 +2086,7 @@ static void uffd_move_pmd_test(uffd_global_test_opts_= t *gopts, uffd_test_args_t { if (madvise(gopts->area_dst, gopts->nr_pages * gopts->page_size, MADV_HUG= EPAGE)) err("madvise(MADV_HUGEPAGE) failure"); - uffd_move_test_common(gopts, targs, read_pmd_pagesize(), + uffd_move_test_common(gopts, targs, pmd_psize(), uffd_move_pmd_handle_fault); } =20 @@ -2094,7 +2094,7 @@ static void uffd_move_pmd_split_test(uffd_global_test= _opts_t *gopts, uffd_test_a { if (madvise(gopts->area_dst, gopts->nr_pages * gopts->page_size, MADV_NOH= UGEPAGE)) err("madvise(MADV_NOHUGEPAGE) failure"); - uffd_move_test_common(gopts, targs, read_pmd_pagesize(), + uffd_move_test_common(gopts, targs, pmd_psize(), uffd_move_pmd_handle_fault); } =20 diff --git a/tools/testing/selftests/mm/uffd-wp-mremap.c b/tools/testing/se= lftests/mm/uffd-wp-mremap.c index 572c2516e874..f46edd3ee6d8 100644 --- a/tools/testing/selftests/mm/uffd-wp-mremap.c +++ b/tools/testing/selftests/mm/uffd-wp-mremap.c @@ -38,7 +38,7 @@ static int detect_thp_sizes(size_t sizes[], int max) int i; =20 /* thp not supported at all. */ - if (!read_pmd_pagesize()) + if (!pmd_psize()) return 0; =20 orders =3D thp_supported_orders(); diff --git a/tools/testing/selftests/mm/vm_util.c b/tools/testing/selftests= /mm/vm_util.c index 4821a3563036..e712a980851c 100644 --- a/tools/testing/selftests/mm/vm_util.c +++ b/tools/testing/selftests/mm/vm_util.c @@ -155,7 +155,7 @@ bool check_for_pattern(FILE *fp, const char *pattern, c= har *buf, size_t len) return false; } =20 -uint64_t read_pmd_pagesize(void) +uint64_t pmd_psize(void) { int fd; char buf[20]; @@ -412,7 +412,7 @@ static bool check_large_folios(void *addr, size_t len, = int nr_hpages, =20 bool check_huge_anon(void *addr, size_t len, int nr_hpages, uint64_t hpage= _size) { - uint64_t pmd_pagesize =3D read_pmd_pagesize(); + uint64_t pmd_pagesize =3D pmd_psize(); =20 if (!pmd_pagesize) ksft_exit_fail_msg("reading PMD pagesize failed\n"); @@ -425,7 +425,7 @@ bool check_huge_anon(void *addr, size_t len, int nr_hpa= ges, uint64_t hpage_size) =20 bool check_huge_file(void *addr, size_t len, int nr_hpages, uint64_t hpage= _size) { - uint64_t pmd_pagesize =3D read_pmd_pagesize(); + uint64_t pmd_pagesize =3D pmd_psize(); =20 if (!pmd_pagesize) ksft_exit_fail_msg("reading PMD pagesize failed\n"); @@ -438,7 +438,7 @@ bool check_huge_file(void *addr, size_t len, int nr_hpa= ges, uint64_t hpage_size) =20 bool check_huge_shmem(void *addr, size_t len, int nr_hpages, uint64_t hpag= e_size) { - uint64_t pmd_pagesize =3D read_pmd_pagesize(); + uint64_t pmd_pagesize =3D pmd_psize(); =20 if (!pmd_pagesize) ksft_exit_fail_msg("reading PMD pagesize failed\n"); diff --git a/tools/testing/selftests/mm/vm_util.h b/tools/testing/selftests= /mm/vm_util.h index 9a49af88702e..a40e40c820ef 100644 --- a/tools/testing/selftests/mm/vm_util.h +++ b/tools/testing/selftests/mm/vm_util.h @@ -88,7 +88,7 @@ bool pagemap_is_populated(int fd, char *start); unsigned long pagemap_get_pfn(int fd, char *start); void clear_softdirty(void); bool check_for_pattern(FILE *fp, const char *pattern, char *buf, size_t le= n); -uint64_t read_pmd_pagesize(void); +uint64_t pmd_psize(void); unsigned long rss_anon(void); bool check_huge_anon(void *addr, size_t len, int nr_hpages, uint64_t hpage= _size); bool check_huge_file(void *addr, size_t len, int nr_hpages, uint64_t hpage= _size); --=20 2.43.0 From nobody Fri Sep 25 10:38:39 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DD7773E5ED5; Mon, 14 Sep 2026 07:31:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789371076; cv=none; b=Pju7bvgGNFe2ZyPQOb+gIdhhMEzRmBh/q8b46Yo5gnd4fwEVcQBb/N1Jbsjq2rL1R1E7qghS0fE36wn1Q+cDUkiO/CpTVDHX4hUjyoOhJuz4DgHgB3zh2bKMixcwg6I4vxLTmL2hKIVOkfIA+/K5SYABtu7oJzcAH0U3ljg308k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789371076; c=relaxed/simple; bh=bLvv5MbEFDAD1wAGeigHtgwqqm/7rxMekNWQLENldUk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=erkWgeAWa1G4zqZ84WYkP8ORhgAfUqvcY/rZ9rikLAD8bi37H9AHUlojtAP483/Qg8qTFbcfxeXnV19TxZWO/puMmijcTUq3AA7oYdaikNkkD7OZldieJvyn1BxT53fVTP6Gy81Qf1iS5FNn8akTioDnJHGyC9/CCuWZ/ENY25s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=HN4WVcvE; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="HN4WVcvE" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0C7851C01; Mon, 14 Sep 2026 00:31:08 -0700 (PDT) Received: from e129823.arm.com (e129823.arm.com [10.2.213.3]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3D6413F59E; Mon, 14 Sep 2026 00:31:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1789371071; bh=bLvv5MbEFDAD1wAGeigHtgwqqm/7rxMekNWQLENldUk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=HN4WVcvER0Xh/HukcuJ6SqjRHuvq+ULxxy/BOlsBnrZoQkYz/4SyBl6wytt35Rn/l 0TIlL1XLet8GNldgqbSR2jotBRTXX6USLJkjZXzIYsZJjXVmmpg5dAawzsM96AfcVo m0uS8pn9u81XEJKjbexNV3GB2cbDs8QaHHJ6IZw4= From: Yeoreum Yun Date: Mon, 14 Sep 2026 08:30:47 +0100 Subject: [PATCH v3 2/3] kselftest: mm: remove HPAGE_SIZE and HPAGE_SHIFT macro Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260914-fix_hpage_macro-v3-2-c9a305a01d39@arm.com> References: <20260914-fix_hpage_macro-v3-0-c9a305a01d39@arm.com> In-Reply-To: <20260914-fix_hpage_macro-v3-0-c9a305a01d39@arm.com> To: Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Usama Arif , Kiryl Shutsemau , Peter Xu , linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Shuah Khan , Jason Gunthorpe , Leon Romanovsky , Sarthak Sharma , Yeoreum Yun X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=13602; i=yeoreum.yun@arm.com; h=from:subject:message-id; bh=bLvv5MbEFDAD1wAGeigHtgwqqm/7rxMekNWQLENldUk=; b=owEB7QES/pANAwAKAW3Vw9FaxTEzAcsmYgBqp6KzLn4IWONxl/yfMdJwc5Bb78CJLmXxgjDBL mL/0MNjNMWJAbMEAAEKAB0WIQQtg+CS3QUzuFh1pJ1t1cPRWsUxMwUCaqeiswAKCRBt1cPRWsUx M9QKDADVl9hWCXzJnm0Hp/v7OZsPAPnST9OZ1nZioizZEL+NkVBD3Gm8CWzn5L/PSUeAT1Il+w7 SaTF1TDuKSSXFCLGWueIazEQ7OK9fqnulGwTT94Vh2x6hAlEnBDI5Pv7GPSuqlY/rQd8SgLIM+S Jk9i8Dz1QU0bM/uEs8xmsYNN7M665XkRU0JdhtzVPmJ15reRoTpbBA0otB7lA/UqeitaNFBbNiq b3MfwTGJEGt3VxXVu4HvepUYnnsPGNM3Xokn6rTlq7jNEjlI4OSJkYIjmiXolEwyggVjCkBpD8r hON6u1aIwo2ExyqbHQ54XgaiXiSDNQj9MQg01/wmaXI/ZXgadsPEAb+kCKUF9SAKLxWv+u5PwZH qHWdQ1Hp2K6TmR+/ZKCHQkU6Jca0OFvexF3p2YxYNu1VH6GWLOrL4erZN00Xz23GnywcXKzDDSE LoSDixYB4xN8Z2pjHFtBx7BWzpH9qHDqAF34Po4rWoHTtbFSrqvVc+JsZHaSCOeUur9xk= X-Developer-Key: i=yeoreum.yun@arm.com; a=openpgp; fpr=2D83E092DD0533B85875A49D6DD5C3D15AC53133 HPAGE_SIZE and HPAGE_SHIFT macro is written based on the 4KB PAGE_SIZE. When this macro is used in some test, test result would be strange in the system where PAGE_SIZE is more then 4KB. Here is the example with transhuge-stress test with 16KB PAGE_SIZE: transhuge-stress: allocate 61073 transhuge pages, using 122146 MiB virtua= l memory and 1908 MiB of ram 3.292 s/loop, 0.054 ms/page, 37106.002 MiB/s 2566 succeed, 58507 faile= d, 2566 different pages 0.591 s/loop, 0.010 ms/page, 206850.792 MiB/s 0 succeed, 61073 faile= d, 0 different pages 0.527 s/loop, 0.009 ms/page, 231895.107 MiB/s 0 succeed, 61073 faile= d, 0 different pages 0.527 s/loop, 0.009 ms/page, 231839.704 MiB/s 0 succeed, 61073 faile= d, 0 different pages 0.528 s/loop, 0.009 ms/page, 231544.782 MiB/s 0 succeed, 61073 faile= d, 0 different pages 0.528 s/loop, 0.009 ms/page, 231462.074 MiB/s 0 succeed, 61073 faile= d, 0 different pages 0.527 s/loop, 0.009 ms/page, 231770.300 MiB/s 0 succeed, 61073 faile= d, 0 different pages ... ok 1 Completed Remove the HPAGE_SIZE and HPAGE_SHIFT macro and introduce pmd_pshift() helper to get the HPAGE_SHIFT properly. For HPAGE_SIZE, use pre-existing helper, pmd_psize(). Also, run the KSM_MERGE_TIME_HUGE_PAGES test with a size of 512 MiB, which is the least common multiple of the PMD sizes for 4 KiB, 16 KiB, and 64 KiB base pages. Since allocate_transhuge() allocates mappings in PMD-sized units, the test may fail with the previous size of 100 MiB, which is not a multiple of the PMD size when the base page size is 16 KiB or 64 KiB. After this patch, output of transhuge-stress: transhuge-stress: allocate 3817 transhuge pages, using 122146 MiB virtual= memory and 119 MiB of ram 2.558 s/loop, 0.670 ms/page, 47755.759 MiB/s 2585 succeed, 1232 failed= , 2585 different pages 2.640 s/loop, 0.692 ms/page, 46268.432 MiB/s 2585 succeed, 1232 failed= , 2585 different pages 2.635 s/loop, 0.690 ms/page, 46360.298 MiB/s 2585 succeed, 1232 failed= , 2585 different pages 2.782 s/loop, 0.729 ms/page, 43899.795 MiB/s 2616 succeed, 1201 failed= , 2616 different pages 2.692 s/loop, 0.705 ms/page, 45380.876 MiB/s 2627 succeed, 1190 failed= , 2627 different pages 2.612 s/loop, 0.684 ms/page, 46765.812 MiB/s 2628 succeed, 1189 failed= , 2628 different pages 2.683 s/loop, 0.703 ms/page, 45520.990 MiB/s 2630 succeed, 1187 failed= , 2630 different pages 2.727 s/loop, 0.714 ms/page, 44789.321 MiB/s 2631 succeed, 1186 failed= , 2631 different pages ... ok 1 Completed Suggested-by: Lorenzo Stoakes (ARM) Signed-off-by: Yeoreum Yun Reviewed-by: Zi Yan --- tools/testing/selftests/mm/guard-regions.c | 11 ++++++-- tools/testing/selftests/mm/ksm_tests.c | 16 +++++++----- tools/testing/selftests/mm/run_vmtests.sh | 4 +-- tools/testing/selftests/mm/transhuge-stress.c | 25 +++++++++++-------- tools/testing/selftests/mm/vm_util.c | 36 +++++++++++++++++++++++= +--- tools/testing/selftests/mm/vm_util.h | 9 +++---- 6 files changed, 71 insertions(+), 30 deletions(-) diff --git a/tools/testing/selftests/mm/guard-regions.c b/tools/testing/sel= ftests/mm/guard-regions.c index b724d62d2b75..eee29ef88cb2 100644 --- a/tools/testing/selftests/mm/guard-regions.c +++ b/tools/testing/selftests/mm/guard-regions.c @@ -2195,14 +2195,21 @@ TEST_F(guard_regions, pagemap_scan) TEST_F(guard_regions, collapse) { const unsigned long page_size =3D self->page_size; - const unsigned long size =3D 2 * HPAGE_SIZE; - const unsigned long num_pages =3D size / page_size; + const uint64_t hpage_size =3D pmd_psize(); + unsigned long size; + unsigned long num_pages; char *ptr; int i; =20 if (!thp_available()) SKIP(return, "Transparent Hugepages not available\n"); =20 + if (!hpage_size) + ksft_exit_fail_msg("reading hpage_size failed\n"); + + size =3D 2 * hpage_size; + num_pages =3D size / page_size; + /* Need file to be correct size for tests for non-anon. */ if (variant->backing !=3D ANON_BACKED) ASSERT_EQ(ftruncate(self->fd, size), 0); diff --git a/tools/testing/selftests/mm/ksm_tests.c b/tools/testing/selftes= ts/mm/ksm_tests.c index 5fd7792a0d47..617e31138af0 100644 --- a/tools/testing/selftests/mm/ksm_tests.c +++ b/tools/testing/selftests/mm/ksm_tests.c @@ -521,19 +521,23 @@ static int ksm_merge_hugepages_time(int merge_type, i= nt mapping, int prot, struct timespec start_time, end_time; unsigned long scan_time_ns; int pagemap_fd, n_normal_pages, n_huge_pages; + const uint64_t hpage_size =3D pmd_psize(); =20 if (!thp_is_enabled()) { ksft_print_msg("Transparent Hugepages not available\n"); return KSFT_SKIP; } =20 + if (!hpage_size) + ksft_exit_fail_msg("reading hpage_size failed\n"); + map_size *=3D MB; size_t len =3D map_size; =20 - len -=3D len % HPAGE_SIZE; - map_ptr_orig =3D mmap(NULL, len + HPAGE_SIZE, PROT_READ | PROT_WRITE, + len -=3D len % hpage_size; + map_ptr_orig =3D mmap(NULL, len + hpage_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_NORESERVE | MAP_PRIVATE, -1, 0); - map_ptr =3D map_ptr_orig + HPAGE_SIZE - (uintptr_t)map_ptr_orig % HPAGE_S= IZE; + map_ptr =3D map_ptr_orig + hpage_size - (uintptr_t)map_ptr_orig % hpage_s= ize; =20 if (map_ptr_orig =3D=3D MAP_FAILED) err(2, "initial mmap"); @@ -547,7 +551,7 @@ static int ksm_merge_hugepages_time(int merge_type, int= mapping, int prot, =20 n_normal_pages =3D 0; n_huge_pages =3D 0; - for (void *p =3D map_ptr; p < map_ptr + len; p +=3D HPAGE_SIZE) { + for (void *p =3D map_ptr; p < map_ptr + len; p +=3D hpage_size) { if (allocate_transhuge(p, pagemap_fd) < 0) n_normal_pages++; else @@ -578,11 +582,11 @@ static int ksm_merge_hugepages_time(int merge_type, i= nt mapping, int prot, 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); + munmap(map_ptr_orig, len + hpage_size); return KSFT_PASS; =20 err_out: - munmap(map_ptr_orig, len + HPAGE_SIZE); + munmap(map_ptr_orig, len + hpage_size); return KSFT_FAIL; } =20 diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/self= tests/mm/run_vmtests.sh index 0935dbef4884..d7beedd5e178 100755 --- a/tools/testing/selftests/mm/run_vmtests.sh +++ b/tools/testing/selftests/mm/run_vmtests.sh @@ -378,8 +378,8 @@ fi CATEGORY=3D"memfd_secret" run_test ./memfd_secret fi =20 -# KSM KSM_MERGE_TIME_HUGE_PAGES test with size of 100 -CATEGORY=3D"ksm" run_test ./ksm_tests -H -s 100 +# KSM KSM_MERGE_TIME_HUGE_PAGES test with size of 512 +CATEGORY=3D"ksm" run_test ./ksm_tests -H -s 512 # 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 diff --git a/tools/testing/selftests/mm/transhuge-stress.c b/tools/testing/= selftests/mm/transhuge-stress.c index 8eb0c5630e7e..40ca224a61f4 100644 --- a/tools/testing/selftests/mm/transhuge-stress.c +++ b/tools/testing/selftests/mm/transhuge-stress.c @@ -35,12 +35,17 @@ int main(int argc, char **argv) size_t map_len; int pagemap_fd; int duration =3D 0; + const uint64_t hpage_size =3D pmd_psize(); + const uint64_t hpage_shift =3D pmd_pshift(); =20 ksft_print_header(); =20 if (!thp_is_enabled()) ksft_exit_skip("Transparent Hugepages not available\n"); =20 + if (!hpage_size || !hpage_shift) + ksft_exit_fail_msg("reading hpage_size failed\n"); + ram =3D sysconf(_SC_PHYS_PAGES); if (ram > SIZE_MAX / psize() / 4) ram =3D SIZE_MAX / 4; @@ -70,23 +75,23 @@ int main(int argc, char **argv) } =20 warnx("allocate %zd transhuge pages, using %zd MiB virtual memory" - " and %zd MiB of ram", len >> HPAGE_SHIFT, len >> 20, - ram >> (20 + HPAGE_SHIFT - pshift() - 1)); + " and %zd MiB of ram", len >> hpage_shift, len >> 20, + ram >> (20 + hpage_shift - pshift() - 1)); =20 pagemap_fd =3D open("/proc/self/pagemap", O_RDONLY); if (pagemap_fd < 0) ksft_exit_fail_msg("open pagemap\n"); =20 - len -=3D len % HPAGE_SIZE; - ptr =3D mmap(NULL, len + HPAGE_SIZE, PROT_RW, mmap_flags, backing_fd, 0); + len -=3D len % hpage_size; + ptr =3D mmap(NULL, len + hpage_size, PROT_RW, mmap_flags, backing_fd, 0); if (ptr =3D=3D MAP_FAILED) ksft_exit_fail_msg("initial mmap"); - ptr +=3D HPAGE_SIZE - (uintptr_t)ptr % HPAGE_SIZE; + ptr +=3D hpage_size - (uintptr_t)ptr % hpage_size; =20 if (madvise(ptr, len, MADV_HUGEPAGE)) ksft_exit_fail_msg("MADV_HUGEPAGE"); =20 - map_len =3D ram >> (HPAGE_SHIFT - 1); + map_len =3D ram >> (hpage_shift - 1); map =3D malloc(map_len); if (!map) ksft_exit_fail_msg("map malloc\n"); @@ -99,7 +104,7 @@ int main(int argc, char **argv) memset(map, 0, map_len); =20 clock_gettime(CLOCK_MONOTONIC, &a); - for (p =3D ptr; p < ptr + len; p +=3D HPAGE_SIZE) { + for (p =3D ptr; p < ptr + len; p +=3D hpage_size) { int64_t pfn; =20 pfn =3D allocate_transhuge(p, pagemap_fd); @@ -107,7 +112,7 @@ int main(int argc, char **argv) if (pfn < 0) { nr_failed++; } else { - size_t idx =3D pfn >> (HPAGE_SHIFT - pshift()); + size_t idx =3D pfn >> (hpage_shift - pshift()); =20 nr_succeed++; if (idx >=3D map_len) { @@ -123,7 +128,7 @@ int main(int argc, char **argv) } =20 /* split transhuge page, keep last page */ - if (madvise(p, HPAGE_SIZE - psize(), MADV_DONTNEED)) + if (madvise(p, hpage_size - psize(), MADV_DONTNEED)) ksft_exit_fail_msg("MADV_DONTNEED"); } clock_gettime(CLOCK_MONOTONIC, &b); @@ -131,7 +136,7 @@ int main(int argc, char **argv) =20 ksft_print_msg("%.3f s/loop, %.3f ms/page, %10.3f MiB/s\t" "%4d succeed, %4d failed, %4d different pages\n", - s, s * 1000 / (len >> HPAGE_SHIFT), len / s / (1 << 20), + s, s * 1000 / (len >> hpage_shift), len / s / (1 << 20), nr_succeed, nr_failed, nr_pages); =20 if (duration > 0 && b.tv_sec - start.tv_sec >=3D duration) { diff --git a/tools/testing/selftests/mm/vm_util.c b/tools/testing/selftests= /mm/vm_util.c index e712a980851c..fd1432dc6152 100644 --- a/tools/testing/selftests/mm/vm_util.c +++ b/tools/testing/selftests/mm/vm_util.c @@ -21,6 +21,8 @@ =20 unsigned int __page_size; unsigned int __page_shift; +uint64_t __pmd_psize; +uint64_t __pmd_pshift; =20 uint64_t pagemap_get_entry(int fd, char *start) { @@ -161,6 +163,9 @@ uint64_t pmd_psize(void) char buf[20]; ssize_t num_read; =20 + if (__pmd_psize) + return __pmd_psize; + fd =3D open(PMD_SIZE_FILE_PATH, O_RDONLY); if (fd =3D=3D -1) return 0; @@ -173,7 +178,25 @@ uint64_t pmd_psize(void) buf[num_read] =3D '\0'; close(fd); =20 - return strtoul(buf, NULL, 10); + __pmd_psize =3D strtoul(buf, NULL, 10); + + return __pmd_psize; +} + +uint64_t pmd_pshift(void) +{ + if (__pmd_pshift) + return __pmd_pshift; + + if (!__pmd_psize) + __pmd_psize =3D pmd_psize(); + + if (!__pmd_psize) + return 0; + + __pmd_pshift =3D ffsl(__pmd_psize) - 1; + + return __pmd_pshift; } =20 unsigned long rss_anon(void) @@ -452,14 +475,19 @@ bool check_huge_shmem(void *addr, size_t len, int nr_= hpages, uint64_t hpage_size int64_t allocate_transhuge(void *ptr, int pagemap_fd) { uint64_t ent[2]; + const uint64_t hpage_size =3D pmd_psize(); + const uint64_t hpage_shift =3D pmd_pshift(); + + if (!hpage_size || !hpage_shift) + return -1; =20 /* drop pmd */ - if (mmap(ptr, HPAGE_SIZE, PROT_READ | PROT_WRITE, + if (mmap(ptr, hpage_size, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_ANONYMOUS | MAP_NORESERVE | MAP_PRIVATE, -1, 0) !=3D ptr) ksft_exit_fail_msg("mmap transhuge\n"); =20 - if (madvise(ptr, HPAGE_SIZE, MADV_HUGEPAGE)) + if (madvise(ptr, hpage_size, MADV_HUGEPAGE)) ksft_exit_fail_msg("MADV_HUGEPAGE\n"); =20 /* allocate transparent huge page */ @@ -471,7 +499,7 @@ int64_t allocate_transhuge(void *ptr, int pagemap_fd) =20 if (PAGEMAP_PRESENT(ent[0]) && PAGEMAP_PRESENT(ent[1]) && PAGEMAP_PFN(ent[0]) + 1 =3D=3D PAGEMAP_PFN(ent[1]) && - !(PAGEMAP_PFN(ent[0]) & ((1 << (HPAGE_SHIFT - pshift())) - 1))) + !(PAGEMAP_PFN(ent[0]) & ((1 << (hpage_shift - pshift())) - 1))) return PAGEMAP_PFN(ent[0]); =20 return -1; diff --git a/tools/testing/selftests/mm/vm_util.h b/tools/testing/selftests= /mm/vm_util.h index a40e40c820ef..71af4804f8f2 100644 --- a/tools/testing/selftests/mm/vm_util.h +++ b/tools/testing/selftests/mm/vm_util.h @@ -31,6 +31,8 @@ =20 extern unsigned int __page_size; extern unsigned int __page_shift; +extern uint64_t __pmd_psize; +extern uint64_t __pmd_pshift; =20 /* * Represents an open fd and PROCMAP_QUERY state for binary (via ioctl) @@ -89,6 +91,7 @@ unsigned long pagemap_get_pfn(int fd, char *start); void clear_softdirty(void); bool check_for_pattern(FILE *fp, const char *pattern, char *buf, size_t le= n); uint64_t pmd_psize(void); +uint64_t pmd_pshift(void); unsigned long rss_anon(void); bool check_huge_anon(void *addr, size_t len, int nr_hpages, uint64_t hpage= _size); bool check_huge_file(void *addr, size_t len, int nr_hpages, uint64_t hpage= _size); @@ -157,12 +160,6 @@ int ksm_stop(void); int get_hardware_corrupted_size(unsigned long *val); int unpoison_memory(unsigned long pfn); =20 -/* - * On ppc64 this will only work with radix 2M hugepage size - */ -#define HPAGE_SHIFT 21 -#define HPAGE_SIZE (1 << HPAGE_SHIFT) - #define PAGEMAP_PRESENT(ent) (((ent) & (1ull << 63)) !=3D 0) #define PAGEMAP_PFN(ent) ((ent) & ((1ull << 55) - 1)) =20 --=20 2.43.0 From nobody Fri Sep 25 10:38:39 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 609253EC80B; Mon, 14 Sep 2026 07:31:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789371078; cv=none; b=kyIR7P4oH8QEc677lGOKGb6RakPamQ8fH7rtd82ST9oW9drVZtcL7Va+5hyU8IcWdN6wwVGKVPDbV59mddk/wg3sj7AxKF8VnkjJkuPB8zOPr7+ALbRLrDsDB2H4tOr/NM9xvxWrp49uasK9+cqFaZLd2uGswk9xhDLAceydnok= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789371078; c=relaxed/simple; bh=BeGlU6VoC2nhiSQChEYkjBQ7HxlULOrBNPE3lWJ9ZRw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q9TI89Zw4uQ94KRp8pKNCF7hVSh2jrAVKHxLra1Z7UCYlC56D/F3elo86kQJpaD+akLgzqgllQsyhnsot43BiaPo+dl5hyfInxV6iHR+4KqVtWT4Ws5PEatCSU8YSaJb1sXjzPsgKDL3wO7fPeFmoW/0mA2TEeppwj43JiqWJsk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=e3Lv730m; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="e3Lv730m" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D43B81C14; Mon, 14 Sep 2026 00:31:11 -0700 (PDT) Received: from e129823.arm.com (e129823.arm.com [10.2.213.3]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 0BCB93F59E; Mon, 14 Sep 2026 00:31:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1789371075; bh=BeGlU6VoC2nhiSQChEYkjBQ7HxlULOrBNPE3lWJ9ZRw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=e3Lv730mJzEu/e0Xwxm1fzVM6ZLQ7xGlk7OMGxPIgbgNKgKR83jEZuObZdEcLuQNP Je4dImHlXBcx+Ltsv5q08gwvRbvv84+aB1hJJ70PGMQam9zjbgQPrOdFs8boReoBGO FdnARscTr6MxLUQopNNJDWR4luwOq6U4S5f6XfHM= From: Yeoreum Yun Date: Mon, 14 Sep 2026 08:30:48 +0100 Subject: [PATCH v3 3/3] kselftest: mm: introduce size_to_shift() helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260914-fix_hpage_macro-v3-3-c9a305a01d39@arm.com> References: <20260914-fix_hpage_macro-v3-0-c9a305a01d39@arm.com> In-Reply-To: <20260914-fix_hpage_macro-v3-0-c9a305a01d39@arm.com> To: Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Usama Arif , Kiryl Shutsemau , Peter Xu , linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Shuah Khan , Jason Gunthorpe , Leon Romanovsky , Sarthak Sharma , Yeoreum Yun X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1704; i=yeoreum.yun@arm.com; h=from:subject:message-id; bh=BeGlU6VoC2nhiSQChEYkjBQ7HxlULOrBNPE3lWJ9ZRw=; b=owEB7QES/pANAwAKAW3Vw9FaxTEzAcsmYgBqp6KzBl9ctDoG65maPc1EIPIDgHe0gQnqDEXw/ s+xku9RaRaJAbMEAAEKAB0WIQQtg+CS3QUzuFh1pJ1t1cPRWsUxMwUCaqeiswAKCRBt1cPRWsUx M9/0C/9PWswjSpx0cGos+ZePQPwtwlTukxcDz008DaWMjW9Pkd3nB3L9u8cQBWHisni2DEI+aMN kusuTkSLArK90ltCu5NtTJFZdhtn36RMPnUL4M2Q1OFsGo+ko+flul75cKIGY6pdvJt+soRQpTG GgTDMU1jmqpJElRdvszmhchzZb4+KdcqdRkkTRX6cmsxzbza6tiKK/7v88Uh6XihVlWgiqYLvJb xTGxWNJ09cRBAFKP6OeTMLSvQXXe0MtfBw34NRIQnQJyaDsWBiIzeFTewlGvqXlQOP9T56atWqR /lEKfvTY9G3w2ekHpscWvy7ULp9UesNcGm7LpHAIDASOR3tDhTt7mRxJ/YLBWODIbTjWTiW0SJO AjKB7jeq2PVA7id415eseiDmefXz78nXY+2d46buB4Fcd4Q3pClXBHLf/wXX5zi4wkde9NwuObH WFjQVU+atoMMulCs/5FNLVeuWbpvKyq3j6yGrv3Hen91EihT4zvce3x442qRLJWiIvPKo= X-Developer-Key: i=yeoreum.yun@arm.com; a=openpgp; fpr=2D83E092DD0533B85875A49D6DD5C3D15AC53133 Introduce size_to_shift() for future users that need to obtain shift of a huge-page which is other than pmd_psize(). Suggested-by: David Hildenbrand (Arm) Signed-off-by: Yeoreum Yun Reviewed-by: Lorenzo Stoakes (ARM) --- tools/testing/selftests/mm/vm_util.c | 10 +++++++++- tools/testing/selftests/mm/vm_util.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/mm/vm_util.c b/tools/testing/selftests= /mm/vm_util.c index fd1432dc6152..1fef1266429f 100644 --- a/tools/testing/selftests/mm/vm_util.c +++ b/tools/testing/selftests/mm/vm_util.c @@ -157,6 +157,14 @@ bool check_for_pattern(FILE *fp, const char *pattern, = char *buf, size_t len) return false; } =20 +uint64_t size_to_shift(uint64_t size) +{ + if (__builtin_popcountll(size) !=3D 1) + return 0; + + return ffsl(size) - 1; +} + uint64_t pmd_psize(void) { int fd; @@ -194,7 +202,7 @@ uint64_t pmd_pshift(void) if (!__pmd_psize) return 0; =20 - __pmd_pshift =3D ffsl(__pmd_psize) - 1; + __pmd_pshift =3D size_to_shift(__pmd_psize); =20 return __pmd_pshift; } diff --git a/tools/testing/selftests/mm/vm_util.h b/tools/testing/selftests= /mm/vm_util.h index 71af4804f8f2..0048e0e82770 100644 --- a/tools/testing/selftests/mm/vm_util.h +++ b/tools/testing/selftests/mm/vm_util.h @@ -90,6 +90,7 @@ bool pagemap_is_populated(int fd, char *start); unsigned long pagemap_get_pfn(int fd, char *start); void clear_softdirty(void); bool check_for_pattern(FILE *fp, const char *pattern, char *buf, size_t le= n); +uint64_t size_to_shift(uint64_t size); uint64_t pmd_psize(void); uint64_t pmd_pshift(void); unsigned long rss_anon(void); --=20 2.43.0