mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-02 09:21:19 -04:00
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: Chunyu Hu <chuhu@redhat.com> Cc: David Hildenbrand <david@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user