Skip to content

Commit 7f77300

Browse files
committed
selftest/mm: va_high_addr_switch: add ppc64 support check
JIRA: https://issues.redhat.com/browse/RHEL-85318 commit 983e760 Author: Li Wang <[email protected]> Date: Thu Mar 27 19:48:13 2025 +0800 selftest/mm: va_high_addr_switch: add ppc64 support check Add PPC64 Radix MMU support to the va_high_addr_switch.sh by introducing check_supported_ppc64(). The function verifies: - 5-level paging (PGTABLE_LEVELS >= 5) enable in kernel config - Radix MMU (required for PPC64 5-level translation) - HugePages availability (needed for some tests) If any check fails, the test is skipped (ksft_skip). This ensures compatibility with Power9/Power10 systems running in Radix MMU mode. Avoid failures on 4-level paging system: # mmap(NULL, MAP_HUGETLB): 0xffffffffffffffff - FAILED # mmap(LOW_ADDR, MAP_HUGETLB): 0xffffffffffffffff - FAILED # mmap(HIGH_ADDR, MAP_HUGETLB): 0xffffffffffffffff - FAILED # mmap(HIGH_ADDR, MAP_HUGETLB) again: 0xffffffffffffffff - FAILED # mmap(HIGH_ADDR, MAP_FIXED | MAP_HUGETLB): 0xffffffffffffffff - FAILED # mmap(-1, MAP_HUGETLB): 0xffffffffffffffff - FAILED # mmap(-1, MAP_HUGETLB) again: 0xffffffffffffffff - FAILED # mmap(ADDR_SWITCH_HINT - PAGE_SIZE, 2*HUGETLB_SIZE, MAP_HUGETLB): 0xffffffffffffffff - FAILED # mmap(ADDR_SWITCH_HINT , 2*HUGETLB_SIZE, MAP_FIXED | MAP_HUGETLB): 0xffffffffffffffff - FAILED Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Li Wang <[email protected]> Cc: Anshuman Khandual <[email protected]> Cc: Dev Jain <[email protected]> Cc: Kirill A. Shuemov <[email protected]> Cc: Shuah Khan <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Li Wang <[email protected]>
1 parent f4b0663 commit 7f77300

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

tools/testing/selftests/mm/va_high_addr_switch.sh

+28
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,31 @@ check_supported_x86_64()
4141
fi
4242
}
4343

44+
check_supported_ppc64()
45+
{
46+
local config="/proc/config.gz"
47+
[[ -f "${config}" ]] || config="/boot/config-$(uname -r)"
48+
[[ -f "${config}" ]] || fail "Cannot find kernel config in /proc or /boot"
49+
50+
local pg_table_levels=$(gzip -dcfq "${config}" | grep PGTABLE_LEVELS | cut -d'=' -f 2)
51+
if [[ "${pg_table_levels}" -lt 5 ]]; then
52+
echo "$0: PGTABLE_LEVELS=${pg_table_levels}, must be >= 5 to run this test"
53+
exit $ksft_skip
54+
fi
55+
56+
local mmu_support=$(grep -m1 "mmu" /proc/cpuinfo | awk '{print $3}')
57+
if [[ "$mmu_support" != "radix" ]]; then
58+
echo "$0: System does not use Radix MMU, required for 5-level paging"
59+
exit $ksft_skip
60+
fi
61+
62+
local hugepages_total=$(awk '/HugePages_Total/ {print $2}' /proc/meminfo)
63+
if [[ "${hugepages_total}" -eq 0 ]]; then
64+
echo "$0: HugePages are not enabled, required for some tests"
65+
exit $ksft_skip
66+
fi
67+
}
68+
4469
check_test_requirements()
4570
{
4671
# The test supports x86_64 and powerpc64. We currently have no useful
@@ -50,6 +75,9 @@ check_test_requirements()
5075
"x86_64")
5176
check_supported_x86_64
5277
;;
78+
"ppc64le"|"ppc64")
79+
check_supported_ppc64
80+
;;
5381
*)
5482
return 0
5583
;;

0 commit comments

Comments
 (0)