]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
selftests/mm: alloc hugepages in va_high_addr_switch test
authorChunyu Hu <chuhu@redhat.com>
Mon, 8 Sep 2025 12:47:38 +0000 (20:47 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 12 Sep 2025 00:25:59 +0000 (17:25 -0700)
Alloc hugepages in the test internally, so we don't fully rely on the
run_vmtests.sh.  If run_vmtests.sh does that great, free hugepages is
enough for being used to run the test, leave it as it is, otherwise setup
the hugepages in the test.

Save the original nr_hugepages value and restore it after test finish, so
leave a stable test envronment.

Link: https://lkml.kernel.org/r/20250908124740.2946005-3-chuhu@redhat.com
Signed-off-by: Chunyu Hu <chuhu@redhat.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
tools/testing/selftests/mm/va_high_addr_switch.sh

index 325de53966b6dca0a67aae6496bc5e18489a0ace..a7d4b02b21dd1beb449886c7e158bc22db6ce82b 100755 (executable)
@@ -9,6 +9,7 @@
 
 # Kselftest framework requirement - SKIP code is 4.
 ksft_skip=4
+orig_nr_hugepages=0
 
 skip()
 {
@@ -76,5 +77,41 @@ check_test_requirements()
        esac
 }
 
+save_nr_hugepages()
+{
+       orig_nr_hugepages=$(cat /proc/sys/vm/nr_hugepages)
+}
+
+restore_nr_hugepages()
+{
+       echo "$orig_nr_hugepages" > /proc/sys/vm/nr_hugepages
+}
+
+setup_nr_hugepages()
+{
+       local needpgs=$1
+       while read -r name size unit; do
+               if [ "$name" = "HugePages_Free:" ]; then
+                       freepgs="$size"
+                       break
+               fi
+       done < /proc/meminfo
+       if [ "$freepgs" -ge "$needpgs" ]; then
+               return
+       fi
+       local hpgs=$((orig_nr_hugepages + needpgs))
+       echo $hpgs > /proc/sys/vm/nr_hugepages
+
+       local nr_hugepgs=$(cat /proc/sys/vm/nr_hugepages)
+       if [ "$nr_hugepgs" != "$hpgs" ]; then
+               restore_nr_hugepages
+               skip "$0: no enough hugepages for testing"
+       fi
+}
+
 check_test_requirements
+save_nr_hugepages
+# 4 keep_mapped pages, and one for tmp usage
+setup_nr_hugepages 5
 ./va_high_addr_switch --run-hugetlb
+restore_nr_hugepages