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) <[email protected]> Signed-off-by: Yeoreum Yun <[email protected]> --- 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

