linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 1/3] selftests/mm: fix va_high_addr_switch.sh return value
@ 2025-12-07 12:22 Chunyu Hu
  2025-12-07 12:22 ` [PATCH v1 2/3] selftests/mm: allocate 6 hugepages in va_high_addr_switch.sh Chunyu Hu
  2025-12-08 15:44 ` [PATCH v1 1/3] selftests/mm: fix va_high_addr_switch.sh return value Luiz Capitulino
  0 siblings, 2 replies; 6+ messages in thread
From: Chunyu Hu @ 2025-12-07 12:22 UTC (permalink / raw)
  To: akpm, david, shuah, linux-mm
  Cc: linux-kselftest, linux-kernel, lorenzo.stoakes, Liam.Howlett,
	vbabka, rppt, surenb, mhocko, chuhu, Luiz Capitulino

Patch series "Fix va_high_addr_switch.sh test failure - again", v1.

There are two issues exist for the  va_high_addr_switch test. One issue is
the test return value is ignored in va_high_addr_switch.sh. The second is
the va_high_addr_switch requires 6 hugepages but it requires 5.

Besides that, the nr_hugepages setup in run_vmtests.sh for arm64 can be
done in va_high_addr_switch.sh too.

This patch: (of 3)

The return value should be return value of va_high_addr_switch, otherwise
a test failure would be silently ignored.

Fixes: d9d957bd7b61 ("selftests/mm: alloc hugepages in va_high_addr_switch test")
CC: Luiz Capitulino <luizcap@redhat.com>
Signed-off-by: Chunyu Hu <chuhu@redhat.com>
---
 tools/testing/selftests/mm/va_high_addr_switch.sh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/testing/selftests/mm/va_high_addr_switch.sh b/tools/testing/selftests/mm/va_high_addr_switch.sh
index a7d4b02b21dd..f89fe078a8e6 100755
--- a/tools/testing/selftests/mm/va_high_addr_switch.sh
+++ b/tools/testing/selftests/mm/va_high_addr_switch.sh
@@ -114,4 +114,6 @@ save_nr_hugepages
 # 4 keep_mapped pages, and one for tmp usage
 setup_nr_hugepages 5
 ./va_high_addr_switch --run-hugetlb
+retcode=$?
 restore_nr_hugepages
+exit $retcode
-- 
2.49.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v1 2/3] selftests/mm: allocate 6 hugepages in va_high_addr_switch.sh
  2025-12-07 12:22 [PATCH v1 1/3] selftests/mm: fix va_high_addr_switch.sh return value Chunyu Hu
@ 2025-12-07 12:22 ` Chunyu Hu
  2025-12-07 12:22   ` [PATCH v1 3/3] selftests/mm: remove arm64 nr_hugepages setup for va_high_addr_switch test Chunyu Hu
  2025-12-08 15:47   ` [PATCH v1 2/3] selftests/mm: allocate 6 hugepages in va_high_addr_switch.sh Luiz Capitulino
  2025-12-08 15:44 ` [PATCH v1 1/3] selftests/mm: fix va_high_addr_switch.sh return value Luiz Capitulino
  1 sibling, 2 replies; 6+ messages in thread
From: Chunyu Hu @ 2025-12-07 12:22 UTC (permalink / raw)
  To: akpm, david, shuah, linux-mm
  Cc: linux-kselftest, linux-kernel, lorenzo.stoakes, Liam.Howlett,
	vbabka, rppt, surenb, mhocko, chuhu, Luiz Capitulino

The va_high_addr_switch test requires 6 hugepages, not 5. If running the
test directly by: ./va_high_addr_switch.sh, the test will hit a mmap 'FAIL'
caused by not enough hugepages:
  ```
  mmap(addr_switch_hint - hugepagesize, 2*hugepagesize, MAP_HUGETLB): 0x7f330f800000 - OK
  mmap(addr_switch_hint , 2*hugepagesize, MAP_FIXED | MAP_HUGETLB): 0xffffffffffffffff - FAILED
  ```
The failure can't be hit if run the tests by running 'run_vmtests.sh -t
hugevm' because the nr_hugepages is set to 128 at the beginning of
run_vmtests.sh and va_high_addr_switch.sh skip the setup of nr_hugepages
because already enough.

CC: Luiz Capitulino <luizcap@redhat.com>
Fixes: d9d957bd7b61 ("selftests/mm: alloc hugepages in va_high_addr_switch test")
Signed-off-by: Chunyu Hu <chuhu@redhat.com>
---
 tools/testing/selftests/mm/va_high_addr_switch.sh | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/mm/va_high_addr_switch.sh b/tools/testing/selftests/mm/va_high_addr_switch.sh
index f89fe078a8e6..98f3dfab62c5 100755
--- a/tools/testing/selftests/mm/va_high_addr_switch.sh
+++ b/tools/testing/selftests/mm/va_high_addr_switch.sh
@@ -111,8 +111,10 @@ setup_nr_hugepages()
 
 check_test_requirements
 save_nr_hugepages
-# 4 keep_mapped pages, and one for tmp usage
-setup_nr_hugepages 5
+# 5 keep_mapped hugepages are reserved in the first testings, and the last test
+# requires two hugepages, with one verlaped with the last second test, so one
+# extra, totally 6 hugepages
+setup_nr_hugepages 6
 ./va_high_addr_switch --run-hugetlb
 retcode=$?
 restore_nr_hugepages
-- 
2.49.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v1 3/3] selftests/mm: remove arm64 nr_hugepages setup for va_high_addr_switch test
  2025-12-07 12:22 ` [PATCH v1 2/3] selftests/mm: allocate 6 hugepages in va_high_addr_switch.sh Chunyu Hu
@ 2025-12-07 12:22   ` Chunyu Hu
  2025-12-08 15:48     ` Luiz Capitulino
  2025-12-08 15:47   ` [PATCH v1 2/3] selftests/mm: allocate 6 hugepages in va_high_addr_switch.sh Luiz Capitulino
  1 sibling, 1 reply; 6+ messages in thread
From: Chunyu Hu @ 2025-12-07 12:22 UTC (permalink / raw)
  To: akpm, david, shuah, linux-mm
  Cc: linux-kselftest, linux-kernel, lorenzo.stoakes, Liam.Howlett,
	vbabka, rppt, surenb, mhocko, chuhu, Luiz Capitulino

arm64 and x86_64 has the same nr_hugepages requriement for running the
va_high_addr_switch test. Since commit d9d957bd7b61 ("selftests/mm: alloc
hugepages in va_high_addr_switch test"), the setup can be done in
va_high_addr_switch.sh. So remove the duplicated setup.

CC: Luiz Capitulino <luizcap@redhat.com>
Signed-off-by: Chunyu Hu <chuhu@redhat.com>
---
 tools/testing/selftests/mm/run_vmtests.sh | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/selftests/mm/run_vmtests.sh
index d9173f2312b7..2dadbfc6e535 100755
--- a/tools/testing/selftests/mm/run_vmtests.sh
+++ b/tools/testing/selftests/mm/run_vmtests.sh
@@ -412,15 +412,7 @@ if [ $VADDR64 -ne 0 ]; then
 	fi
 
 	# va high address boundary switch test
-	ARCH_ARM64="arm64"
-	prev_nr_hugepages=$(cat /proc/sys/vm/nr_hugepages)
-	if [ "$ARCH" == "$ARCH_ARM64" ]; then
-		echo 6 > /proc/sys/vm/nr_hugepages
-	fi
 	CATEGORY="hugevm" run_test bash ./va_high_addr_switch.sh
-	if [ "$ARCH" == "$ARCH_ARM64" ]; then
-		echo $prev_nr_hugepages > /proc/sys/vm/nr_hugepages
-	fi
 fi # VADDR64
 
 # vmalloc stability smoke test
-- 
2.49.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v1 1/3] selftests/mm: fix va_high_addr_switch.sh return value
  2025-12-07 12:22 [PATCH v1 1/3] selftests/mm: fix va_high_addr_switch.sh return value Chunyu Hu
  2025-12-07 12:22 ` [PATCH v1 2/3] selftests/mm: allocate 6 hugepages in va_high_addr_switch.sh Chunyu Hu
@ 2025-12-08 15:44 ` Luiz Capitulino
  1 sibling, 0 replies; 6+ messages in thread
From: Luiz Capitulino @ 2025-12-08 15:44 UTC (permalink / raw)
  To: Chunyu Hu, akpm, david, shuah, linux-mm
  Cc: linux-kselftest, linux-kernel, lorenzo.stoakes, Liam.Howlett,
	vbabka, rppt, surenb, mhocko

On 2025-12-07 07:22, Chunyu Hu wrote:
> Patch series "Fix va_high_addr_switch.sh test failure - again", v1.
> 
> There are two issues exist for the  va_high_addr_switch test. One issue is
> the test return value is ignored in va_high_addr_switch.sh. The second is
> the va_high_addr_switch requires 6 hugepages but it requires 5.
> 
> Besides that, the nr_hugepages setup in run_vmtests.sh for arm64 can be
> done in va_high_addr_switch.sh too.
> 
> This patch: (of 3)
> 
> The return value should be return value of va_high_addr_switch, otherwise
> a test failure would be silently ignored.
> 
> Fixes: d9d957bd7b61 ("selftests/mm: alloc hugepages in va_high_addr_switch test")
> CC: Luiz Capitulino <luizcap@redhat.com>
> Signed-off-by: Chunyu Hu <chuhu@redhat.com>

This fix is good, but there are two additional issues that need fixing
(maybe in separate patches):

1. In main() we do:

"""
         ret = run_test(testcases, sz_testcases);
         if (argc == 2 && !strcmp(argv[1], "--run-hugetlb"))
                 ret = run_test(hugetlb_testcases, sz_hugetlb_testcases);
"""

The second run_test() overwrites the return code of the first one, so if
the first fails and the second one succeeds, the test will report
success.

2. The following comment in va_high_addr_switch.sh is wrong in two
counts: there's an eligibility check for powerpc64 and the test doesn't
reject other architectures as it runs on arm64 as well.

"""
     # The test supports x86_64 and powerpc64. We currently have no useful
     # eligibility check for powerpc64, and the test itself will reject other
     # architectures.
"""

For this fix:

Reviewed-by: Luiz Capitulino <luizcap@redhat.com>

> ---
>   tools/testing/selftests/mm/va_high_addr_switch.sh | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/tools/testing/selftests/mm/va_high_addr_switch.sh b/tools/testing/selftests/mm/va_high_addr_switch.sh
> index a7d4b02b21dd..f89fe078a8e6 100755
> --- a/tools/testing/selftests/mm/va_high_addr_switch.sh
> +++ b/tools/testing/selftests/mm/va_high_addr_switch.sh
> @@ -114,4 +114,6 @@ save_nr_hugepages
>   # 4 keep_mapped pages, and one for tmp usage
>   setup_nr_hugepages 5
>   ./va_high_addr_switch --run-hugetlb
> +retcode=$?
>   restore_nr_hugepages
> +exit $retcode











^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v1 2/3] selftests/mm: allocate 6 hugepages in va_high_addr_switch.sh
  2025-12-07 12:22 ` [PATCH v1 2/3] selftests/mm: allocate 6 hugepages in va_high_addr_switch.sh Chunyu Hu
  2025-12-07 12:22   ` [PATCH v1 3/3] selftests/mm: remove arm64 nr_hugepages setup for va_high_addr_switch test Chunyu Hu
@ 2025-12-08 15:47   ` Luiz Capitulino
  1 sibling, 0 replies; 6+ messages in thread
From: Luiz Capitulino @ 2025-12-08 15:47 UTC (permalink / raw)
  To: Chunyu Hu, akpm, david, shuah, linux-mm
  Cc: linux-kselftest, linux-kernel, lorenzo.stoakes, Liam.Howlett,
	vbabka, rppt, surenb, mhocko

On 2025-12-07 07:22, Chunyu Hu wrote:
> The va_high_addr_switch test requires 6 hugepages, not 5. If running the
> test directly by: ./va_high_addr_switch.sh, the test will hit a mmap 'FAIL'
> caused by not enough hugepages:
>    ```
>    mmap(addr_switch_hint - hugepagesize, 2*hugepagesize, MAP_HUGETLB): 0x7f330f800000 - OK
>    mmap(addr_switch_hint , 2*hugepagesize, MAP_FIXED | MAP_HUGETLB): 0xffffffffffffffff - FAILED
>    ```
> The failure can't be hit if run the tests by running 'run_vmtests.sh -t
> hugevm' because the nr_hugepages is set to 128 at the beginning of
> run_vmtests.sh and va_high_addr_switch.sh skip the setup of nr_hugepages
> because already enough.
> 
> CC: Luiz Capitulino <luizcap@redhat.com>
> Fixes: d9d957bd7b61 ("selftests/mm: alloc hugepages in va_high_addr_switch test")
> Signed-off-by: Chunyu Hu <chuhu@redhat.com>
> ---
>   tools/testing/selftests/mm/va_high_addr_switch.sh | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/testing/selftests/mm/va_high_addr_switch.sh b/tools/testing/selftests/mm/va_high_addr_switch.sh
> index f89fe078a8e6..98f3dfab62c5 100755
> --- a/tools/testing/selftests/mm/va_high_addr_switch.sh
> +++ b/tools/testing/selftests/mm/va_high_addr_switch.sh
> @@ -111,8 +111,10 @@ setup_nr_hugepages()
>   
>   check_test_requirements
>   save_nr_hugepages
> -# 4 keep_mapped pages, and one for tmp usage
> -setup_nr_hugepages 5
> +# 5 keep_mapped hugepages are reserved in the first testings, and the last test
> +# requires two hugepages, with one verlaped with the last second test, so one
> +# extra, totally 6 hugepages

IMHO, I'd just say "The HugeTLB tests require 6 pages", otherwise the
fix look good to me.

> +setup_nr_hugepages 6
>   ./va_high_addr_switch --run-hugetlb
>   retcode=$?
>   restore_nr_hugepages



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v1 3/3] selftests/mm: remove arm64 nr_hugepages setup for va_high_addr_switch test
  2025-12-07 12:22   ` [PATCH v1 3/3] selftests/mm: remove arm64 nr_hugepages setup for va_high_addr_switch test Chunyu Hu
@ 2025-12-08 15:48     ` Luiz Capitulino
  0 siblings, 0 replies; 6+ messages in thread
From: Luiz Capitulino @ 2025-12-08 15:48 UTC (permalink / raw)
  To: Chunyu Hu, akpm, david, shuah, linux-mm
  Cc: linux-kselftest, linux-kernel, lorenzo.stoakes, Liam.Howlett,
	vbabka, rppt, surenb, mhocko

On 2025-12-07 07:22, Chunyu Hu wrote:
> arm64 and x86_64 has the same nr_hugepages requriement for running the
> va_high_addr_switch test. Since commit d9d957bd7b61 ("selftests/mm: alloc
> hugepages in va_high_addr_switch test"), the setup can be done in
> va_high_addr_switch.sh. So remove the duplicated setup.
> 
> CC: Luiz Capitulino <luizcap@redhat.com>
> Signed-off-by: Chunyu Hu <chuhu@redhat.com>

Reviewed-by: Luiz Capitulino <luizcap@redhat.com>

> ---
>   tools/testing/selftests/mm/run_vmtests.sh | 8 --------
>   1 file changed, 8 deletions(-)
> 
> diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/selftests/mm/run_vmtests.sh
> index d9173f2312b7..2dadbfc6e535 100755
> --- a/tools/testing/selftests/mm/run_vmtests.sh
> +++ b/tools/testing/selftests/mm/run_vmtests.sh
> @@ -412,15 +412,7 @@ if [ $VADDR64 -ne 0 ]; then
>   	fi
>   
>   	# va high address boundary switch test
> -	ARCH_ARM64="arm64"
> -	prev_nr_hugepages=$(cat /proc/sys/vm/nr_hugepages)
> -	if [ "$ARCH" == "$ARCH_ARM64" ]; then
> -		echo 6 > /proc/sys/vm/nr_hugepages
> -	fi
>   	CATEGORY="hugevm" run_test bash ./va_high_addr_switch.sh
> -	if [ "$ARCH" == "$ARCH_ARM64" ]; then
> -		echo $prev_nr_hugepages > /proc/sys/vm/nr_hugepages
> -	fi
>   fi # VADDR64
>   
>   # vmalloc stability smoke test



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-12-08 15:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-12-07 12:22 [PATCH v1 1/3] selftests/mm: fix va_high_addr_switch.sh return value Chunyu Hu
2025-12-07 12:22 ` [PATCH v1 2/3] selftests/mm: allocate 6 hugepages in va_high_addr_switch.sh Chunyu Hu
2025-12-07 12:22   ` [PATCH v1 3/3] selftests/mm: remove arm64 nr_hugepages setup for va_high_addr_switch test Chunyu Hu
2025-12-08 15:48     ` Luiz Capitulino
2025-12-08 15:47   ` [PATCH v1 2/3] selftests/mm: allocate 6 hugepages in va_high_addr_switch.sh Luiz Capitulino
2025-12-08 15:44 ` [PATCH v1 1/3] selftests/mm: fix va_high_addr_switch.sh return value Luiz Capitulino

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox