1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3#please run as root 4 5# Kselftest framework requirement - SKIP code is 4. 6ksft_skip=4 7 8mnt=./huge 9exitcode=0 10 11##get huge pagesize and freepages from /proc/meminfo 12#while read name size unit; do 13# if [ "$name" = "HugePages_Free:" ]; then 14# freepgs=$size 15# fi 16# if [ "$name" = "Hugepagesize:" ]; then 17# hpgsize_KB=$size 18# fi 19#done < /proc/meminfo 20# 21## Simple hugetlbfs tests have a hardcoded minimum requirement of 22## huge pages totaling 256MB (262144KB) in size. The userfaultfd 23## hugetlb test requires a minimum of 2 * nr_cpus huge pages. Take 24## both of these requirements into account and attempt to increase 25## number of huge pages available. 26#nr_cpus=$(nproc) 27#hpgsize_MB=$((hpgsize_KB / 1024)) 28#half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128)) 29#needmem_KB=$((half_ufd_size_MB * 2 * 1024)) 30# 31##set proper nr_hugepages 32#if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then 33# nr_hugepgs=`cat /proc/sys/vm/nr_hugepages` 34# needpgs=$((needmem_KB / hpgsize_KB)) 35# tries=2 36# while [ $tries -gt 0 ] && [ $freepgs -lt $needpgs ]; do 37# lackpgs=$(( $needpgs - $freepgs )) 38# echo 3 > /proc/sys/vm/drop_caches 39# echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages 40# if [ $? -ne 0 ]; then 41# echo "Please run this test as root" 42# exit $ksft_skip 43# fi 44# while read name size unit; do 45# if [ "$name" = "HugePages_Free:" ]; then 46# freepgs=$size 47# fi 48# done < /proc/meminfo 49# tries=$((tries - 1)) 50# done 51# if [ $freepgs -lt $needpgs ]; then 52# printf "Not enough huge pages available (%d < %d)\n" \ 53# $freepgs $needpgs 54# exit 1 55# fi 56#else 57# echo "no hugetlbfs support in kernel?" 58# exit 1 59#fi 60# 61#mkdir $mnt 62#mount -t hugetlbfs none $mnt 63# 64#echo "---------------------" 65#echo "running hugepage-mmap" 66#echo "---------------------" 67#./hugepage-mmap 68#if [ $? -ne 0 ]; then 69# echo "[FAIL]" 70# exitcode=1 71#else 72# echo "[PASS]" 73#fi 74# 75#shmmax=`cat /proc/sys/kernel/shmmax` 76#shmall=`cat /proc/sys/kernel/shmall` 77#echo 268435456 > /proc/sys/kernel/shmmax 78#echo 4194304 > /proc/sys/kernel/shmall 79#echo "--------------------" 80#echo "running hugepage-shm" 81#echo "--------------------" 82#./hugepage-shm 83#if [ $? -ne 0 ]; then 84# echo "[FAIL]" 85# exitcode=1 86#else 87# echo "[PASS]" 88#fi 89#echo $shmmax > /proc/sys/kernel/shmmax 90#echo $shmall > /proc/sys/kernel/shmall 91# 92#echo "-------------------" 93#echo "running map_hugetlb" 94#echo "-------------------" 95#./map_hugetlb 96#if [ $? -ne 0 ]; then 97# echo "[FAIL]" 98# exitcode=1 99#else 100# echo "[PASS]" 101#fi 102# 103#echo "NOTE: The above hugetlb tests provide minimal coverage. Use" 104#echo " https://github.com/libhugetlbfs/libhugetlbfs.git for" 105#echo " hugetlb regression testing." 106# 107#echo "-------------------" 108#echo "running userfaultfd" 109#echo "-------------------" 110#./userfaultfd anon 128 32 111#if [ $? -ne 0 ]; then 112# echo "[FAIL]" 113# exitcode=1 114#else 115# echo "[PASS]" 116#fi 117# 118#echo "---------------------------" 119#echo "running userfaultfd_hugetlb" 120#echo "---------------------------" 121## Test requires source and destination huge pages. Size of source 122## (half_ufd_size_MB) is passed as argument to test. 123#./userfaultfd hugetlb $half_ufd_size_MB 32 $mnt/ufd_test_file 124#if [ $? -ne 0 ]; then 125# echo "[FAIL]" 126# exitcode=1 127#else 128# echo "[PASS]" 129#fi 130#rm -f $mnt/ufd_test_file 131# 132#echo "-------------------------" 133#echo "running userfaultfd_shmem" 134#echo "-------------------------" 135#./userfaultfd shmem 128 32 136#if [ $? -ne 0 ]; then 137# echo "[FAIL]" 138# exitcode=1 139#else 140# echo "[PASS]" 141#fi 142# 143##cleanup 144#umount $mnt 145#rm -rf $mnt 146#echo $nr_hugepgs > /proc/sys/vm/nr_hugepages 147# 148#echo "-----------------------" 149#echo "running compaction_test" 150#echo "-----------------------" 151#./compaction_test 152#if [ $? -ne 0 ]; then 153# echo "[FAIL]" 154# exitcode=1 155#else 156# echo "[PASS]" 157#fi 158 159echo "----------------------" 160echo "running on-fault-limit" 161echo "----------------------" 162sudo -u nobody ./on-fault-limit 163if [ $? -ne 0 ]; then 164 echo "[FAIL]" 165 exitcode=1 166else 167 echo "[PASS]" 168fi 169 170echo "--------------------" 171echo "running map_populate" 172echo "--------------------" 173./map_populate 174if [ $? -ne 0 ]; then 175 echo "[FAIL]" 176 exitcode=1 177else 178 echo "[PASS]" 179fi 180 181echo "--------------------" 182echo "running mlock2-tests" 183echo "--------------------" 184./mlock2-tests 185if [ $? -ne 0 ]; then 186 echo "[FAIL]" 187 exitcode=1 188else 189 echo "[PASS]" 190fi 191 192echo "-----------------------------" 193echo "running virtual_address_range" 194echo "-----------------------------" 195./virtual_address_range 196if [ $? -ne 0 ]; then 197 echo "[FAIL]" 198 exitcode=1 199else 200 echo "[PASS]" 201fi 202 203echo "-----------------------------" 204echo "running virtual address 128TB switch test" 205echo "-----------------------------" 206./va_128TBswitch 207if [ $? -ne 0 ]; then 208 echo "[FAIL]" 209 exitcode=1 210else 211 echo "[PASS]" 212fi 213 214exit $exitcode 215