| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| #please run as root |
| |
| # Kselftest framework requirement - SKIP code is 4. |
| ksft_skip=4 |
| |
| mnt=./huge |
| exitcode=0 |
| |
| ##get huge pagesize and freepages from /proc/meminfo |
| #while read name size unit; do |
| # if [ "$name" = "HugePages_Free:" ]; then |
| # freepgs=$size |
| # fi |
| # if [ "$name" = "Hugepagesize:" ]; then |
| # hpgsize_KB=$size |
| # fi |
| #done < /proc/meminfo |
| # |
| ## Simple hugetlbfs tests have a hardcoded minimum requirement of |
| ## huge pages totaling 256MB (262144KB) in size. The userfaultfd |
| ## hugetlb test requires a minimum of 2 * nr_cpus huge pages. Take |
| ## both of these requirements into account and attempt to increase |
| ## number of huge pages available. |
| #nr_cpus=$(nproc) |
| #hpgsize_MB=$((hpgsize_KB / 1024)) |
| #half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128)) |
| #needmem_KB=$((half_ufd_size_MB * 2 * 1024)) |
| # |
| ##set proper nr_hugepages |
| #if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then |
| # nr_hugepgs=`cat /proc/sys/vm/nr_hugepages` |
| # needpgs=$((needmem_KB / hpgsize_KB)) |
| # tries=2 |
| # while [ $tries -gt 0 ] && [ $freepgs -lt $needpgs ]; do |
| # lackpgs=$(( $needpgs - $freepgs )) |
| # echo 3 > /proc/sys/vm/drop_caches |
| # echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages |
| # if [ $? -ne 0 ]; then |
| # echo "Please run this test as root" |
| # exit $ksft_skip |
| # fi |
| # while read name size unit; do |
| # if [ "$name" = "HugePages_Free:" ]; then |
| # freepgs=$size |
| # fi |
| # done < /proc/meminfo |
| # tries=$((tries - 1)) |
| # done |
| # if [ $freepgs -lt $needpgs ]; then |
| # printf "Not enough huge pages available (%d < %d)\n" \ |
| # $freepgs $needpgs |
| # exit 1 |
| # fi |
| #else |
| # echo "no hugetlbfs support in kernel?" |
| # exit 1 |
| #fi |
| # |
| ##filter 64bit architectures |
| #ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 sparc64 x86_64" |
| #if [ -z $ARCH ]; then |
| # ARCH=`uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/'` |
| #fi |
| #VADDR64=0 |
| #echo "$ARCH64STR" | grep $ARCH && VADDR64=1 |
| # |
| #mkdir $mnt |
| #mount -t hugetlbfs none $mnt |
| # |
| #echo "---------------------" |
| #echo "running hugepage-mmap" |
| #echo "---------------------" |
| #./hugepage-mmap |
| #if [ $? -ne 0 ]; then |
| # echo "[FAIL]" |
| # exitcode=1 |
| #else |
| # echo "[PASS]" |
| #fi |
| # |
| #shmmax=`cat /proc/sys/kernel/shmmax` |
| #shmall=`cat /proc/sys/kernel/shmall` |
| #echo 268435456 > /proc/sys/kernel/shmmax |
| #echo 4194304 > /proc/sys/kernel/shmall |
| #echo "--------------------" |
| #echo "running hugepage-shm" |
| #echo "--------------------" |
| #./hugepage-shm |
| #if [ $? -ne 0 ]; then |
| # echo "[FAIL]" |
| # exitcode=1 |
| #else |
| # echo "[PASS]" |
| #fi |
| #echo $shmmax > /proc/sys/kernel/shmmax |
| #echo $shmall > /proc/sys/kernel/shmall |
| # |
| #echo "-------------------" |
| #echo "running map_hugetlb" |
| #echo "-------------------" |
| #./map_hugetlb |
| #if [ $? -ne 0 ]; then |
| # echo "[FAIL]" |
| # exitcode=1 |
| #else |
| # echo "[PASS]" |
| #fi |
| # |
| #echo "NOTE: The above hugetlb tests provide minimal coverage. Use" |
| #echo " https://github.com/libhugetlbfs/libhugetlbfs.git for" |
| #echo " hugetlb regression testing." |
| # |
| #echo "-------------------" |
| #echo "running userfaultfd" |
| #echo "-------------------" |
| #./userfaultfd anon 128 32 |
| #if [ $? -ne 0 ]; then |
| # echo "[FAIL]" |
| # exitcode=1 |
| #else |
| # echo "[PASS]" |
| #fi |
| # |
| #echo "---------------------------" |
| #echo "running userfaultfd_hugetlb" |
| #echo "---------------------------" |
| ## Test requires source and destination huge pages. Size of source |
| ## (half_ufd_size_MB) is passed as argument to test. |
| #./userfaultfd hugetlb $half_ufd_size_MB 32 $mnt/ufd_test_file |
| #if [ $? -ne 0 ]; then |
| # echo "[FAIL]" |
| # exitcode=1 |
| #else |
| # echo "[PASS]" |
| #fi |
| #rm -f $mnt/ufd_test_file |
| # |
| #echo "-------------------------" |
| #echo "running userfaultfd_shmem" |
| #echo "-------------------------" |
| #./userfaultfd shmem 128 32 |
| #if [ $? -ne 0 ]; then |
| # echo "[FAIL]" |
| # exitcode=1 |
| #else |
| # echo "[PASS]" |
| #fi |
| # |
| ##cleanup |
| #umount $mnt |
| #rm -rf $mnt |
| #echo $nr_hugepgs > /proc/sys/vm/nr_hugepages |
| # |
| #echo "-----------------------" |
| #echo "running compaction_test" |
| #echo "-----------------------" |
| #./compaction_test |
| #if [ $? -ne 0 ]; then |
| # echo "[FAIL]" |
| # exitcode=1 |
| #else |
| # echo "[PASS]" |
| #fi |
| |
| echo "----------------------" |
| echo "running on-fault-limit" |
| echo "----------------------" |
| sudo -u nobody ./on-fault-limit |
| if [ $? -ne 0 ]; then |
| echo "[FAIL]" |
| exitcode=1 |
| else |
| echo "[PASS]" |
| fi |
| |
| echo "--------------------" |
| echo "running map_populate" |
| echo "--------------------" |
| ./map_populate |
| if [ $? -ne 0 ]; then |
| echo "[FAIL]" |
| exitcode=1 |
| else |
| echo "[PASS]" |
| fi |
| |
| echo "--------------------" |
| echo "running mlock2-tests" |
| echo "--------------------" |
| ./mlock2-tests |
| if [ $? -ne 0 ]; then |
| echo "[FAIL]" |
| exitcode=1 |
| else |
| echo "[PASS]" |
| fi |
| |
| if [ $VADDR64 -ne 0 ]; then |
| echo "-----------------------------" |
| echo "running virtual_address_range" |
| echo "-----------------------------" |
| ./virtual_address_range |
| if [ $? -ne 0 ]; then |
| echo "[FAIL]" |
| exitcode=1 |
| else |
| echo "[PASS]" |
| fi |
| |
| echo "-----------------------------" |
| echo "running virtual address 128TB switch test" |
| echo "-----------------------------" |
| ./va_128TBswitch |
| if [ $? -ne 0 ]; then |
| echo "[FAIL]" |
| exitcode=1 |
| else |
| echo "[PASS]" |
| fi |
| fi # VADDR64 |
| |
| echo "------------------------------------" |
| echo "running vmalloc stability smoke test" |
| echo "------------------------------------" |
| ./test_vmalloc.sh smoke |
| ret_val=$? |
| |
| if [ $ret_val -eq 0 ]; then |
| echo "[PASS]" |
| elif [ $ret_val -eq $ksft_skip ]; then |
| echo "[SKIP]" |
| exitcode=$ksft_skip |
| else |
| echo "[FAIL]" |
| exitcode=1 |
| fi |
| |
| exit $exitcode |