[PATCH v3 3/3] kselftest: mm: introduce size_to_shift() helper

From: Yeoreum Yun

Date: Mon Sep 14 2026 - 03:43:07 EST


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) <david@xxxxxxxxxx>
Signed-off-by: Yeoreum Yun <yeoreum.yun@xxxxxxx>
---
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;
}

+uint64_t size_to_shift(uint64_t size)
+{
+ if (__builtin_popcountll(size) != 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;

- __pmd_pshift = ffsl(__pmd_psize) - 1;
+ __pmd_pshift = size_to_shift(__pmd_psize);

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 len);
+uint64_t size_to_shift(uint64_t size);
uint64_t pmd_psize(void);
uint64_t pmd_pshift(void);
unsigned long rss_anon(void);

--
2.43.0