selftests/vm: only run 128TBswitch with 5-level paging
[linux-2.6-microblaze.git] / tools / testing / selftests / vm / va_128TBswitch.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 #
4 # Copyright (C) 2022 Adam Sindelar (Meta) <adam@wowsignal.io>
5 #
6 # This is a test for mmap behavior with 5-level paging. This script wraps the
7 # real test to check that the kernel is configured to support at least 5
8 # pagetable levels.
9
10 # 1 means the test failed
11 exitcode=1
12
13 # Kselftest framework requirement - SKIP code is 4.
14 ksft_skip=4
15
16 fail()
17 {
18         echo "$1"
19         exit $exitcode
20 }
21
22 check_supported_x86_64()
23 {
24         local config="/proc/config.gz"
25         [[ -f "${config}" ]] || config="/boot/config-$(uname -r)"
26         [[ -f "${config}" ]] || fail "Cannot find kernel config in /proc or /boot"
27
28         # gzip -dcfq automatically handles both compressed and plaintext input.
29         # See man 1 gzip under '-f'.
30         local pg_table_levels=$(gzip -dcfq "${config}" | grep PGTABLE_LEVELS | cut -d'=' -f 2)
31
32         if [[ "${pg_table_levels}" -lt 5 ]]; then
33                 echo "$0: PGTABLE_LEVELS=${pg_table_levels}, must be >= 5 to run this test"
34                 exit $ksft_skip
35         fi
36 }
37
38 check_test_requirements()
39 {
40         # The test supports x86_64 and powerpc64. We currently have no useful
41         # eligibility check for powerpc64, and the test itself will reject other
42         # architectures.
43         case `uname -m` in
44                 "x86_64")
45                         check_supported_x86_64
46                 ;;
47                 *)
48                         return 0
49                 ;;
50         esac
51 }
52
53 check_test_requirements
54 ./va_128TBswitch