This patch adds 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

Signed-off-by: Li Wang <[email protected]>
---
 .../selftests/mm/va_high_addr_switch.sh       | 28 +++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/tools/testing/selftests/mm/va_high_addr_switch.sh 
b/tools/testing/selftests/mm/va_high_addr_switch.sh
index 2c725773cd79..1f92e8caceac 100755
--- a/tools/testing/selftests/mm/va_high_addr_switch.sh
+++ b/tools/testing/selftests/mm/va_high_addr_switch.sh
@@ -41,6 +41,31 @@ check_supported_x86_64()
        fi
 }
 
+check_supported_ppc64()
+{
+       local config="/proc/config.gz"
+       [[ -f "${config}" ]] || config="/boot/config-$(uname -r)"
+       [[ -f "${config}" ]] || fail "Cannot find kernel config in /proc or 
/boot"
+
+       local pg_table_levels=$(gzip -dcfq "${config}" | grep PGTABLE_LEVELS | 
cut -d'=' -f 2)
+       if [[ "${pg_table_levels}" -lt 5 ]]; then
+               echo "$0: PGTABLE_LEVELS=${pg_table_levels}, must be >= 5 to 
run this test"
+               exit $ksft_skip
+       fi
+
+       local mmu_support=$(grep -m1 "mmu" /proc/cpuinfo | awk '{print $3}')
+       if [[ "$mmu_support" != "radix" ]]; then
+               echo "$0: System does not use Radix MMU, required for 5-level 
paging"
+               exit $ksft_skip
+       fi
+
+       local hugepages_total=$(awk '/HugePages_Total/ {print $2}' 
/proc/meminfo)
+       if [[ "${hugepages_total}" -eq 0 ]]; then
+               echo "$0: HugePages are not enabled, required for some tests"
+               exit $ksft_skip
+       fi
+}
+
 check_test_requirements()
 {
        # The test supports x86_64 and powerpc64. We currently have no useful
@@ -50,6 +75,9 @@ check_test_requirements()
                "x86_64")
                        check_supported_x86_64
                ;;
+               "ppc64le"|"ppc64")
+                       check_supported_ppc64
+               ;;
                *)
                        return 0
                ;;
-- 
2.48.1


Reply via email to