Commit d9d957bd authored by Chunyu Hu's avatar Chunyu Hu Committed by Andrew Morton
Browse files

selftests/mm: alloc hugepages in va_high_addr_switch test

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/20250912013711.3002969-3-chuhu@redhat.com


Signed-off-by: default avatarChunyu Hu <chuhu@redhat.com>
Cc: David Hildenbrand <david@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 6e296bcf
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -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