From nobody Thu Sep 24 20:04:05 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BC14B3C1081; Mon, 21 Sep 2026 10:36:54 +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=1789987018; cv=none; b=sn8PkCskju16AFRge8sQ6ybGOM/Wn7jpcwGuuUp6ZP0w1Y8YCBPc95PtfrRSFCajGPlbNv3xLnp2XmZL8oStSyTVq7COtnnwIWdJ2o2dd80SeuYB/zfzN4qyAke9umRt4xyaIeDbU4/9SPWf04Pf2OItY5uNYmoFQIsPcyUUhzE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789987018; c=relaxed/simple; bh=9BKgzDUajJ7OiJikKPqxoEhT6PEtXLhia/NLiOCGDsE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=He5Vszg9uAeqigKi4Cy0iEB4DnnvsSG3vtPl0FWo5UPA9Lga4Aqihv2LoUvKohILhzCs+rtwxAhgeMQ9eqkdKdfHyVyS5011tbIG3OOPmNUjbuIbeqAWHRKBbty45M714diEtOZ2K3ltnnQ+v/6j9YyHd0HCYw/l3r8/KlRWOSI= 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=UCi9t8jk; 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="UCi9t8jk" 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 59C471CE0; Mon, 21 Sep 2026 03:36:50 -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 35E103F86C; Mon, 21 Sep 2026 03:36:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1789987013; bh=9BKgzDUajJ7OiJikKPqxoEhT6PEtXLhia/NLiOCGDsE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UCi9t8jkHxlSZkCGt5LKcT3iDr5fF3mqULiuQrGe4PAtBT7W/RKHbRwiUtQIH9Nju /9pLbPixpTT+7cgj8uaNDRqFPvVSYd/mNtBHiygzqmmQxHBMOnKiacXB8GAsti1AS+ BwniTZ9s3s8JydFd58C23ft+Y0nrG765hG7Ums8g= From: Yeoreum Yun Date: Mon, 21 Sep 2026 11:36:38 +0100 Subject: [PATCH v4 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: <20260921-fix_hpage_macro-v4-1-cdea4fc6ce3f@arm.com> References: <20260921-fix_hpage_macro-v4-0-cdea4fc6ce3f@arm.com> In-Reply-To: <20260921-fix_hpage_macro-v4-0-cdea4fc6ce3f@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=16129; i=yeoreum.yun@arm.com; h=from:subject:message-id; bh=9BKgzDUajJ7OiJikKPqxoEhT6PEtXLhia/NLiOCGDsE=; b=owEB7QES/pANAwAKAW3Vw9FaxTEzAcsmYgBqsQi81KFO5zdXHVP9Xl2wswtOHWb8fdesCpKrk 2lbh5ZI/waJAbMEAAEKAB0WIQQtg+CS3QUzuFh1pJ1t1cPRWsUxMwUCarEIvAAKCRBt1cPRWsUx M7sUDACu6/880tZjRJi7E2El3nHESkzC6OnBCTtgIyAxKLW4zCMpjHZfLZj0if9nUo7UQk7laPY gmZPTZjpRYWuDDixQkeMdupTzcoAqQi+Rvq4eb6cvTyIxJ0iOPIzraOyvfKqc/C5B2jqmDrrOy7 DlTmcnXJ6WyJSOk4/YwTujW3uaDg32QgFfeE1ZK+JPXpIxYVSWL/c5BFONL9D+h3PdMyOSXcT7Q eu34yDCbIFStPTLy1P+3o+YfST2DPLbUahI+UeJAPSMPV0B42XFCWKqQiP0hCaFxHtz+wJaNOL5 GDndXB1hulb0WnM8sU3VK3PQeT0vBaelTiDtPda1fkUtPDEl9q1e/k/RzJ4uqHDehS77NigtB0u i4w/5EV8CFHLlReBvhkcAYBg60mtzsMOFYkgL1ym8cQOGZ5gqL5nMHEAZ+wHOQGLeuW/B7Jqj1U CDxIem/ChUGqjY3fTlKOiX6EhzeMzf9li4Y5ZpiNcfJErlzuxEWfUP2dlHoQIc8Vxg8Vs= 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) Reviewed-by: Zi Yan Reviewed-by: Lorenzo Stoakes (ARM) Acked-by: David Hildenbrand (Arm) Signed-off-by: Yeoreum Yun --- 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 8aa5249d9bef6..e42edeccfd7a2 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 1960635a953eb..a956e5c74c655 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 e2642eca0d02b..ad14372b75d9e 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 f82673f5f6b47..76c1fbcc5260d 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 f19d53c695764..4280d2c87b22a 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 68dd447a54542..49ef643a6e639 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 d9a4fb782ecfe..d0e34dd5850b1 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 82c6e96ea6eb3..d0290c4567bd9 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 3fffd5f7e6fb4..7e32bad8ab2a9 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 5f278913c4d75..670fcad083b58 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 c01d227d7fd6d..295a6769d670b 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 1fb967ef49854..0b8bbb55c3357 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 ef9b3956bdcfd..05477466af1b2 100644 --- a/tools/testing/selftests/mm/uffd-unit-tests.c +++ b/tools/testing/selftests/mm/uffd-unit-tests.c @@ -588,7 +588,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. @@ -1914,7 +1914,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 @@ -2025,7 +2025,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 @@ -2033,7 +2033,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 572c2516e874d..f46edd3ee6d81 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 4821a35630363..e712a980851c8 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 9a49af88702e4..a40e40c820ef7 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 Thu Sep 24 20:04:05 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8511247605E; Mon, 21 Sep 2026 10:36:58 +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=1789987021; cv=none; b=ByhWkscatyso9+Bklfex493TmSICw4OVL9168xb0j18eg79WIFCUwS/JDs2ZNTcm61rd1sPrSZa1D7LBtwpaRjB6LF4PhW4r49HXYwc+Ma7rJxnXeIWF6QwLwuATY5Ltkz0YkqmhfaLWaT0jBA3MumL0gHmN870O3d9F0zGdTTE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789987021; c=relaxed/simple; bh=YcmsRwqkmq6DR2vw/t8aIRJTeQ82knJAqyfDSfzeHKk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r1XCrujCxGGydxzW6b4c798oJ4qJ+D+WDowQxhGqUfUWTxbi5k0qAglx6ABiqKpbwNU48Xm+PQFO9YFVdFIPsgwkDO84MlcLDQXicbP++kl5CsBLdWKmJBan9tLrwWt9d18oX8m/zf9CfJ1Id/FxYu8rrkEmg9VhGie5/3y5Wyo= 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=Ei7qTMCy; 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="Ei7qTMCy" 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 3D9631D13; Mon, 21 Sep 2026 03:36:54 -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 39F833F86C; Mon, 21 Sep 2026 03:36:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1789987017; bh=YcmsRwqkmq6DR2vw/t8aIRJTeQ82knJAqyfDSfzeHKk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Ei7qTMCyC7vP03MwVR8bOQRsRLthyyotJhiMZfEUbdJo2KVM3GYScmVUfeLa8iZUx CggZZdXCeZBwGEz5k3Z7qZm+1FHO1Kc7VcaZDQ9bGJJ6xuOiCiOSMuMEmaqj3O9gCz DCXJ2dKs8Bcx8qttaDabAC/I7zn4zKlK/xBj+o2o= From: Yeoreum Yun Date: Mon, 21 Sep 2026 11:36:39 +0100 Subject: [PATCH v4 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: <20260921-fix_hpage_macro-v4-2-cdea4fc6ce3f@arm.com> References: <20260921-fix_hpage_macro-v4-0-cdea4fc6ce3f@arm.com> In-Reply-To: <20260921-fix_hpage_macro-v4-0-cdea4fc6ce3f@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=13792; i=yeoreum.yun@arm.com; h=from:subject:message-id; bh=YcmsRwqkmq6DR2vw/t8aIRJTeQ82knJAqyfDSfzeHKk=; b=owEB7QES/pANAwAKAW3Vw9FaxTEzAcsmYgBqsQi9IX3wVRgRopas3NHgcWeAi7I+4ITMIO7IL 8xF9mSxtp6JAbMEAAEKAB0WIQQtg+CS3QUzuFh1pJ1t1cPRWsUxMwUCarEIvQAKCRBt1cPRWsUx M/w2C/9DHyglxpqKtN3D7aOzvJHD45wsRUOLR6NOGwAhGDuaE0HNaHKHZYcevNw8pb82E59dy6r 549wwUp34Z8KYwGslEI0fNIZHVoZNjS52S3hmxbEUE/m9hEXX/etICsmbmaY3nOOWBRe/6/hobh XoF5M8reFfhbhVSrpjt2S1cmH8YosdMPI8oXEppwYLBzClPgcrkcobRKTfK6APjfA+WIba9RFf+ OnVUB6nljJrOU2dgJxd5QH5qzgFOny7UROOdTeSf8seK9kPS3u312WPj6zIzZCZ0i7kWNNO3pQm 0AINQ0PVgfhJqr2HtkkpAMWSxyu1i6kZ1UQlgFqa62e0aLeYXM1tydfSJXu+Y6PyYbLSMGUfEIB Iobt9ry1S78ZaIUCBF9jYOgXqjGmQLIs+/Par+Zt6DZbnH9LeP9raHiGCGg+ttD58EGz1dSzCH6 GorZrCNnNkYMV++joM+2CSJdQAzz9JoyEipvd/jJOon1kdKgITslgeu14/2r4jWBolEGM= 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) Reviewed-by: Zi Yan Signed-off-by: Yeoreum Yun Acked-by: David Hildenbrand (Arm) Reviewed-by: Lorenzo Stoakes (ARM) --- 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 | 38 +++++++++++++++++++++++= ---- tools/testing/selftests/mm/vm_util.h | 9 +++---- 6 files changed, 72 insertions(+), 31 deletions(-) diff --git a/tools/testing/selftests/mm/guard-regions.c b/tools/testing/sel= ftests/mm/guard-regions.c index b724d62d2b755..eee29ef88cb20 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 5fd7792a0d479..617e31138af06 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 19755fb4edb94..345d1a79f07ef 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 8eb0c5630e7e3..40ca224a61f49 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 e712a980851c8..8f80e73dc22a5 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 =3D -1ull; +uint64_t __pmd_pshift =3D -1ull; =20 uint64_t pagemap_get_entry(int fd, char *start) { @@ -161,19 +163,40 @@ uint64_t pmd_psize(void) char buf[20]; ssize_t num_read; =20 + if (__pmd_psize !=3D -1ull) + return __pmd_psize; + fd =3D open(PMD_SIZE_FILE_PATH, O_RDONLY); - if (fd =3D=3D -1) + if (fd =3D=3D -1) { + __pmd_psize =3D 0; return 0; + } =20 num_read =3D read(fd, buf, 19); if (num_read < 1) { + __pmd_psize =3D 0; close(fd); return 0; } 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 !=3D -1ull) + return __pmd_pshift; + + if (__pmd_psize !=3D -1ull) + __pmd_psize =3D pmd_psize(); + + __pmd_pshift =3D (__pmd_psize > 0) ? ffsl(__pmd_psize) - 1 : 0; + + 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 a40e40c820ef7..71af4804f8f24 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 Thu Sep 24 20:04:05 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CCBA93BBFD3; Mon, 21 Sep 2026 10:37:02 +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=1789987024; cv=none; b=azrvo4Dac+ZkKEUfa2rxhClapjzxa98N21Qx3BcKmxkDjFjCgf1/te0XXXJtzeZpqFjsga5UizKvbb0Uqf8ECmE++NvIrdgp+8mXSuad1PGI+OwexFnv7FJnXVA4MzSqmm9VXj56Vmv5+p603eU/MUUFXODISb+oBr4EVhWmcgk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789987024; c=relaxed/simple; bh=z6zKDPWdrXtG9iLWi9rtRD0L5GkOLNqFKE7DfB+aIRQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rj7ECqxTNEOFWD6QbahHnnoxeXSPURMMZ0UEz0KCMW2HJFbU0OzUGjD5EwkcAjHBbtGyCbfi+MoGpbzYCyNHtYdTdWZGYi6+qReYPqGdrAtNpE0wpIrobb13MTeEbzUQQEczSvdP8XJcThEm9la8Eg9bBChu+foO5ELtquPsny0= 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=Sm+COEAh; 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="Sm+COEAh" 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 2235D143D; Mon, 21 Sep 2026 03:36:58 -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 1D96A3F86C; Mon, 21 Sep 2026 03:36:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1789987021; bh=z6zKDPWdrXtG9iLWi9rtRD0L5GkOLNqFKE7DfB+aIRQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Sm+COEAhvJbXTSdK1abZne3xFxB6pXb9NGTM8dWI3ctOJqcjdGKW4iQgJS2OopPZ8 qBYUaMzOpghOMjBzAKhdtOMIMsfnFH31FMGPVCGhR+dlJ1AwUQg85wxnWzdrAzz9bi o49yIVomAqB13hDOwWi5bsI05PROktlr9/a87Uo4= From: Yeoreum Yun Date: Mon, 21 Sep 2026 11:36:40 +0100 Subject: [PATCH v4 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: <20260921-fix_hpage_macro-v4-3-cdea4fc6ce3f@arm.com> References: <20260921-fix_hpage_macro-v4-0-cdea4fc6ce3f@arm.com> In-Reply-To: <20260921-fix_hpage_macro-v4-0-cdea4fc6ce3f@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=1684; i=yeoreum.yun@arm.com; h=from:subject:message-id; bh=z6zKDPWdrXtG9iLWi9rtRD0L5GkOLNqFKE7DfB+aIRQ=; b=owEB7QES/pANAwAKAW3Vw9FaxTEzAcsmYgBqsQi9VlnrICVKSmEAUcfLz+X3SNTnPnmmVJx4T PUKUnuuRKmJAbMEAAEKAB0WIQQtg+CS3QUzuFh1pJ1t1cPRWsUxMwUCarEIvQAKCRBt1cPRWsUx My8ZC/9Q9H8MVJ1jK7QQreGRH10Hzcsa3P2Hyz86kIi5/jIeguUvGUmUfWV7D+4Dq20FpNDL2z4 ub+riKgocduYQDaixCZAwW06zIzSDCdAOoBp2H+2el3O+IAOA047HBlae/74X9sSKf8zUFNqrIo kBXhwpONsZWj9vdxpsh40ASMPdytSthFe9AAbYOmNc0Mh04BNg6jtifRdVQbSeHwz/+o3oBXiR0 o0sKMi6IvpMZAU3zyUJF0Sq7ZqogFjEv8gHl554UPQG7YB8ZwhEojuHw8Oqz0Kc/NEJBiSVBwc4 T3n7VbgQmCBXaXuoCampv/myhHndZvfcRQj0DzldVPtXtTdcKUhU8F6XwXdWrCQR3OTv7USxsk7 KW9HvBmr73grKKE8CGQklYYQyuwvCbd6Mu54ezU6S71z+OJCDxXUVteRnVSXHTtkynKuqOuAxyV DowvbkpDAHxqDZmRXcMxQTM4YzxQUeqyGDy93DKvTRXV7hnInJGpBCGWpvXwxHJq1sLJk= 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) Reviewed-by: Lorenzo Stoakes (ARM) Signed-off-by: Yeoreum Yun Acked-by: David Hildenbrand (Arm) Reviewed-by: Zi Yan --- tools/testing/selftests/mm/vm_util.c | 2 +- tools/testing/selftests/mm/vm_util.h | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/mm/vm_util.c b/tools/testing/selftests= /mm/vm_util.c index 8f80e73dc22a5..970671058397d 100644 --- a/tools/testing/selftests/mm/vm_util.c +++ b/tools/testing/selftests/mm/vm_util.c @@ -194,7 +194,7 @@ uint64_t pmd_pshift(void) if (__pmd_psize !=3D -1ull) __pmd_psize =3D pmd_psize(); =20 - __pmd_pshift =3D (__pmd_psize > 0) ? ffsl(__pmd_psize) - 1 : 0; + __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 71af4804f8f24..6e37c90f3c3a5 100644 --- a/tools/testing/selftests/mm/vm_util.h +++ b/tools/testing/selftests/mm/vm_util.h @@ -148,6 +148,18 @@ static inline int sz2ord(size_t size, size_t pagesize) return __builtin_ctzll(size / pagesize); } =20 +static inline uint64_t size_to_shift(uint64_t size) +{ + /* + * The function returns the corresponding shift only when the size + * is a power of two; otherwise, it returns 0. + */ + if (!size || (size & (size - 1))) + return 0; + + return ffsl(size) - 1; +} + void *sys_mremap(void *old_address, unsigned long old_size, unsigned long new_size, int flags, void *new_address); =20 --=20 2.43.0