diff mbox series

selftests/vm: Only run the 128TB boundary test if 5-level paging is enabled

Message ID 20220620143536.2767866-1-adam@wowsignal.io (mailing list archive)
State New
Headers show
Series selftests/vm: Only run the 128TB boundary test if 5-level paging is enabled | expand

Commit Message

Adam Sindelar June 20, 2022, 2:35 p.m. UTC
The test va_128TBswitch.c expects to be able to pass mmap an address hint
and length that cross the address 1<<47. This is not possible without
5-level page tables, so the test fails.

The test is already only run on 64-bit powerpc and x86 archs, but this
patch adds an additional check that skips the test if PG_TABLE_LEVELS < 5.
There is precedent for checking /proc/config.gz in selftests, e.g. in
selftests/firmware.

Signed-off-by: Adam Sindelar <adam@wowsignal.io>
---
 tools/testing/selftests/vm/Makefile          |  1 +
 tools/testing/selftests/vm/run_vmtests.sh    | 13 +++++++---
 tools/testing/selftests/vm/va_128TBswitch.sh | 26 ++++++++++++++++++++
 3 files changed, 36 insertions(+), 4 deletions(-)
 create mode 100755 tools/testing/selftests/vm/va_128TBswitch.sh

Comments

Adam Sindelar June 21, 2022, 8:07 a.m. UTC | #1
On Mon, Jun 20, 2022 at 07:35:36AM -0700, Adam Sindelar wrote:
> The test va_128TBswitch.c expects to be able to pass mmap an address hint
> and length that cross the address 1<<47. This is not possible without
> 5-level page tables, so the test fails.
> 
> The test is already only run on 64-bit powerpc and x86 archs, but this
> patch adds an additional check that skips the test if PG_TABLE_LEVELS < 5.
> There is precedent for checking /proc/config.gz in selftests, e.g. in
> selftests/firmware.
> 
> Signed-off-by: Adam Sindelar <adam@wowsignal.io>
> ---
>  tools/testing/selftests/vm/Makefile          |  1 +
>  tools/testing/selftests/vm/run_vmtests.sh    | 13 +++++++---
>  tools/testing/selftests/vm/va_128TBswitch.sh | 26 ++++++++++++++++++++
>  3 files changed, 36 insertions(+), 4 deletions(-)
>  create mode 100755 tools/testing/selftests/vm/va_128TBswitch.sh
> 
> diff --git a/tools/testing/selftests/vm/Makefile b/tools/testing/selftests/vm/Makefile
> index 68cacffc93ec..bc64ca1e0de3 100644
> --- a/tools/testing/selftests/vm/Makefile
> +++ b/tools/testing/selftests/vm/Makefile
> @@ -80,6 +80,7 @@ endif
>  TEST_PROGS := run_vmtests.sh
>  
>  TEST_FILES := test_vmalloc.sh
> +TEST_FILEs += va_128TBswitch.sh
>  
>  KSFT_KHDR_INSTALL := 1
>  include ../lib.mk
> diff --git a/tools/testing/selftests/vm/run_vmtests.sh b/tools/testing/selftests/vm/run_vmtests.sh
> index e953f3cd9664..10cccbedaaa1 100755
> --- a/tools/testing/selftests/vm/run_vmtests.sh
> +++ b/tools/testing/selftests/vm/run_vmtests.sh
> @@ -290,12 +290,17 @@ fi
>  echo "-----------------------------"
>  echo "running virtual address 128TB switch test"
>  echo "-----------------------------"
> -./va_128TBswitch
> -if [ $? -ne 0 ]; then
> +./va_128TBswitch.sh
> +ret_val=$?
> +
> +if [ $ret_val -eq 0 ]; then
> +    echo "[PASS]"
> +elif [ $ret_val -eq $ksft_skip ]; then
> +	 echo "[SKIP]"
> +	 exitcode=$ksft_skip
> +else
>      echo "[FAIL]"
>      exitcode=1
> -else
> -    echo "[PASS]"
>  fi
>  fi # VADDR64
>  
> diff --git a/tools/testing/selftests/vm/va_128TBswitch.sh b/tools/testing/selftests/vm/va_128TBswitch.sh
> new file mode 100755
> index 000000000000..f7b9db0bfd33
> --- /dev/null
> +++ b/tools/testing/selftests/vm/va_128TBswitch.sh
> @@ -0,0 +1,26 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# Copyright (C) 2022 Adam Sindelar (Meta) <adam@wowsignal.io>
> +#
> +# This is a test for mmap behavior with 5-level paging. This script wraps the
> +# real test to check that the kernel is configured to support at least 5
> +# pagetable levels.
> +
> +# 1 means the test failed
> +exitcode=1
> +
> +# Kselftest framework requirement - SKIP code is 4.
> +ksft_skip=4
> +
> +check_test_requirements()
> +{
> +    pg_table_levels=$(gzip -dcfq /proc/config.gz | grep PGTABLE_LEVELS | cut -d'=' -f 2)
> +    if [ $pg_table_levels -lt 5 ]; then
> +    echo "$0: PG_TABLE_LEVELS=${pg_table_levels}, must be >= 5 to run this test"
> +        exit $ksft_skip
> +    fi
> +}
> +
> +check_test_requirements
> +./va_128TBswitch
> -- 
> 2.30.2
> 

Actually, I think I sent this to the wrong list. My bad, please disregard -
I'll send it to mm, where I think it belongs.
diff mbox series

Patch

diff --git a/tools/testing/selftests/vm/Makefile b/tools/testing/selftests/vm/Makefile
index 68cacffc93ec..bc64ca1e0de3 100644
--- a/tools/testing/selftests/vm/Makefile
+++ b/tools/testing/selftests/vm/Makefile
@@ -80,6 +80,7 @@  endif
 TEST_PROGS := run_vmtests.sh
 
 TEST_FILES := test_vmalloc.sh
+TEST_FILEs += va_128TBswitch.sh
 
 KSFT_KHDR_INSTALL := 1
 include ../lib.mk
diff --git a/tools/testing/selftests/vm/run_vmtests.sh b/tools/testing/selftests/vm/run_vmtests.sh
index e953f3cd9664..10cccbedaaa1 100755
--- a/tools/testing/selftests/vm/run_vmtests.sh
+++ b/tools/testing/selftests/vm/run_vmtests.sh
@@ -290,12 +290,17 @@  fi
 echo "-----------------------------"
 echo "running virtual address 128TB switch test"
 echo "-----------------------------"
-./va_128TBswitch
-if [ $? -ne 0 ]; then
+./va_128TBswitch.sh
+ret_val=$?
+
+if [ $ret_val -eq 0 ]; then
+    echo "[PASS]"
+elif [ $ret_val -eq $ksft_skip ]; then
+	 echo "[SKIP]"
+	 exitcode=$ksft_skip
+else
     echo "[FAIL]"
     exitcode=1
-else
-    echo "[PASS]"
 fi
 fi # VADDR64
 
diff --git a/tools/testing/selftests/vm/va_128TBswitch.sh b/tools/testing/selftests/vm/va_128TBswitch.sh
new file mode 100755
index 000000000000..f7b9db0bfd33
--- /dev/null
+++ b/tools/testing/selftests/vm/va_128TBswitch.sh
@@ -0,0 +1,26 @@ 
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright (C) 2022 Adam Sindelar (Meta) <adam@wowsignal.io>
+#
+# This is a test for mmap behavior with 5-level paging. This script wraps the
+# real test to check that the kernel is configured to support at least 5
+# pagetable levels.
+
+# 1 means the test failed
+exitcode=1
+
+# Kselftest framework requirement - SKIP code is 4.
+ksft_skip=4
+
+check_test_requirements()
+{
+    pg_table_levels=$(gzip -dcfq /proc/config.gz | grep PGTABLE_LEVELS | cut -d'=' -f 2)
+    if [ $pg_table_levels -lt 5 ]; then
+    echo "$0: PG_TABLE_LEVELS=${pg_table_levels}, must be >= 5 to run this test"
+        exit $ksft_skip
+    fi
+}
+
+check_test_requirements
+./va_128TBswitch