162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# please run as root 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci# Kselftest framework requirement - SKIP code is 4. 562306a36Sopenharmony_ciksft_skip=4 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci# 862306a36Sopenharmony_ci# To test memfd_create with hugetlbfs, there needs to be hpages_test 962306a36Sopenharmony_ci# huge pages free. Attempt to allocate enough pages to test. 1062306a36Sopenharmony_ci# 1162306a36Sopenharmony_cihpages_test=8 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci# 1462306a36Sopenharmony_ci# Get count of free huge pages from /proc/meminfo 1562306a36Sopenharmony_ci# 1662306a36Sopenharmony_ciwhile read name size unit; do 1762306a36Sopenharmony_ci if [ "$name" = "HugePages_Free:" ]; then 1862306a36Sopenharmony_ci freepgs=$size 1962306a36Sopenharmony_ci fi 2062306a36Sopenharmony_cidone < /proc/meminfo 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci# 2362306a36Sopenharmony_ci# If not enough free huge pages for test, attempt to increase 2462306a36Sopenharmony_ci# 2562306a36Sopenharmony_ciif [ -n "$freepgs" ] && [ $freepgs -lt $hpages_test ]; then 2662306a36Sopenharmony_ci nr_hugepgs=`cat /proc/sys/vm/nr_hugepages` 2762306a36Sopenharmony_ci hpages_needed=`expr $hpages_test - $freepgs` 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci if [ $UID != 0 ]; then 3062306a36Sopenharmony_ci echo "Please run memfd with hugetlbfs test as root" 3162306a36Sopenharmony_ci exit $ksft_skip 3262306a36Sopenharmony_ci fi 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci echo 3 > /proc/sys/vm/drop_caches 3562306a36Sopenharmony_ci echo $(( $hpages_needed + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages 3662306a36Sopenharmony_ci while read name size unit; do 3762306a36Sopenharmony_ci if [ "$name" = "HugePages_Free:" ]; then 3862306a36Sopenharmony_ci freepgs=$size 3962306a36Sopenharmony_ci fi 4062306a36Sopenharmony_ci done < /proc/meminfo 4162306a36Sopenharmony_cifi 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci# 4462306a36Sopenharmony_ci# If still not enough huge pages available, exit. But, give back any huge 4562306a36Sopenharmony_ci# pages potentially allocated above. 4662306a36Sopenharmony_ci# 4762306a36Sopenharmony_ciif [ $freepgs -lt $hpages_test ]; then 4862306a36Sopenharmony_ci # nr_hugepgs non-zero only if we attempted to increase 4962306a36Sopenharmony_ci if [ -n "$nr_hugepgs" ]; then 5062306a36Sopenharmony_ci echo $nr_hugepgs > /proc/sys/vm/nr_hugepages 5162306a36Sopenharmony_ci fi 5262306a36Sopenharmony_ci printf "Not enough huge pages available (%d < %d)\n" \ 5362306a36Sopenharmony_ci $freepgs $needpgs 5462306a36Sopenharmony_ci exit $ksft_skip 5562306a36Sopenharmony_cifi 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci# 5862306a36Sopenharmony_ci# Run the hugetlbfs test 5962306a36Sopenharmony_ci# 6062306a36Sopenharmony_ci./memfd_test hugetlbfs 6162306a36Sopenharmony_ci./run_fuse_test.sh hugetlbfs 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci# 6462306a36Sopenharmony_ci# Give back any huge pages allocated for the test 6562306a36Sopenharmony_ci# 6662306a36Sopenharmony_ciif [ -n "$nr_hugepgs" ]; then 6762306a36Sopenharmony_ci echo $nr_hugepgs > /proc/sys/vm/nr_hugepages 6862306a36Sopenharmony_cifi 69