18c2ecf20Sopenharmony_ci#!/bin/bash 28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 38c2ecf20Sopenharmony_ci#please run as root 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci# Kselftest framework requirement - SKIP code is 4. 68c2ecf20Sopenharmony_ciksft_skip=4 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_cimnt=./huge 98c2ecf20Sopenharmony_ciexitcode=0 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#get huge pagesize and freepages from /proc/meminfo 128c2ecf20Sopenharmony_ciwhile read name size unit; do 138c2ecf20Sopenharmony_ci if [ "$name" = "HugePages_Free:" ]; then 148c2ecf20Sopenharmony_ci freepgs=$size 158c2ecf20Sopenharmony_ci fi 168c2ecf20Sopenharmony_ci if [ "$name" = "Hugepagesize:" ]; then 178c2ecf20Sopenharmony_ci hpgsize_KB=$size 188c2ecf20Sopenharmony_ci fi 198c2ecf20Sopenharmony_cidone < /proc/meminfo 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci# Simple hugetlbfs tests have a hardcoded minimum requirement of 228c2ecf20Sopenharmony_ci# huge pages totaling 256MB (262144KB) in size. The userfaultfd 238c2ecf20Sopenharmony_ci# hugetlb test requires a minimum of 2 * nr_cpus huge pages. Take 248c2ecf20Sopenharmony_ci# both of these requirements into account and attempt to increase 258c2ecf20Sopenharmony_ci# number of huge pages available. 268c2ecf20Sopenharmony_cinr_cpus=$(nproc) 278c2ecf20Sopenharmony_cihpgsize_MB=$((hpgsize_KB / 1024)) 288c2ecf20Sopenharmony_cihalf_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128)) 298c2ecf20Sopenharmony_cineedmem_KB=$((half_ufd_size_MB * 2 * 1024)) 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci#set proper nr_hugepages 328c2ecf20Sopenharmony_ciif [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then 338c2ecf20Sopenharmony_ci nr_hugepgs=`cat /proc/sys/vm/nr_hugepages` 348c2ecf20Sopenharmony_ci needpgs=$((needmem_KB / hpgsize_KB)) 358c2ecf20Sopenharmony_ci tries=2 368c2ecf20Sopenharmony_ci while [ $tries -gt 0 ] && [ $freepgs -lt $needpgs ]; do 378c2ecf20Sopenharmony_ci lackpgs=$(( $needpgs - $freepgs )) 388c2ecf20Sopenharmony_ci echo 3 > /proc/sys/vm/drop_caches 398c2ecf20Sopenharmony_ci echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages 408c2ecf20Sopenharmony_ci if [ $? -ne 0 ]; then 418c2ecf20Sopenharmony_ci echo "Please run this test as root" 428c2ecf20Sopenharmony_ci exit $ksft_skip 438c2ecf20Sopenharmony_ci fi 448c2ecf20Sopenharmony_ci while read name size unit; do 458c2ecf20Sopenharmony_ci if [ "$name" = "HugePages_Free:" ]; then 468c2ecf20Sopenharmony_ci freepgs=$size 478c2ecf20Sopenharmony_ci fi 488c2ecf20Sopenharmony_ci done < /proc/meminfo 498c2ecf20Sopenharmony_ci tries=$((tries - 1)) 508c2ecf20Sopenharmony_ci done 518c2ecf20Sopenharmony_ci if [ $freepgs -lt $needpgs ]; then 528c2ecf20Sopenharmony_ci printf "Not enough huge pages available (%d < %d)\n" \ 538c2ecf20Sopenharmony_ci $freepgs $needpgs 548c2ecf20Sopenharmony_ci exit 1 558c2ecf20Sopenharmony_ci fi 568c2ecf20Sopenharmony_cielse 578c2ecf20Sopenharmony_ci echo "no hugetlbfs support in kernel?" 588c2ecf20Sopenharmony_ci exit 1 598c2ecf20Sopenharmony_cifi 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci#filter 64bit architectures 628c2ecf20Sopenharmony_ciARCH64STR="arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64" 638c2ecf20Sopenharmony_ciif [ -z $ARCH ]; then 648c2ecf20Sopenharmony_ci ARCH=`uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/'` 658c2ecf20Sopenharmony_cifi 668c2ecf20Sopenharmony_ciVADDR64=0 678c2ecf20Sopenharmony_ciecho "$ARCH64STR" | grep $ARCH && VADDR64=1 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_cimkdir $mnt 708c2ecf20Sopenharmony_cimount -t hugetlbfs none $mnt 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_ciecho "---------------------" 738c2ecf20Sopenharmony_ciecho "running hugepage-mmap" 748c2ecf20Sopenharmony_ciecho "---------------------" 758c2ecf20Sopenharmony_ci./hugepage-mmap 768c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 778c2ecf20Sopenharmony_ci echo "[FAIL]" 788c2ecf20Sopenharmony_ci exitcode=1 798c2ecf20Sopenharmony_cielse 808c2ecf20Sopenharmony_ci echo "[PASS]" 818c2ecf20Sopenharmony_cifi 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_cishmmax=`cat /proc/sys/kernel/shmmax` 848c2ecf20Sopenharmony_cishmall=`cat /proc/sys/kernel/shmall` 858c2ecf20Sopenharmony_ciecho 268435456 > /proc/sys/kernel/shmmax 868c2ecf20Sopenharmony_ciecho 4194304 > /proc/sys/kernel/shmall 878c2ecf20Sopenharmony_ciecho "--------------------" 888c2ecf20Sopenharmony_ciecho "running hugepage-shm" 898c2ecf20Sopenharmony_ciecho "--------------------" 908c2ecf20Sopenharmony_ci./hugepage-shm 918c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 928c2ecf20Sopenharmony_ci echo "[FAIL]" 938c2ecf20Sopenharmony_ci exitcode=1 948c2ecf20Sopenharmony_cielse 958c2ecf20Sopenharmony_ci echo "[PASS]" 968c2ecf20Sopenharmony_cifi 978c2ecf20Sopenharmony_ciecho $shmmax > /proc/sys/kernel/shmmax 988c2ecf20Sopenharmony_ciecho $shmall > /proc/sys/kernel/shmall 998c2ecf20Sopenharmony_ci 1008c2ecf20Sopenharmony_ciecho "-------------------" 1018c2ecf20Sopenharmony_ciecho "running map_hugetlb" 1028c2ecf20Sopenharmony_ciecho "-------------------" 1038c2ecf20Sopenharmony_ci./map_hugetlb 1048c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 1058c2ecf20Sopenharmony_ci echo "[FAIL]" 1068c2ecf20Sopenharmony_ci exitcode=1 1078c2ecf20Sopenharmony_cielse 1088c2ecf20Sopenharmony_ci echo "[PASS]" 1098c2ecf20Sopenharmony_cifi 1108c2ecf20Sopenharmony_ci 1118c2ecf20Sopenharmony_ciecho "NOTE: The above hugetlb tests provide minimal coverage. Use" 1128c2ecf20Sopenharmony_ciecho " https://github.com/libhugetlbfs/libhugetlbfs.git for" 1138c2ecf20Sopenharmony_ciecho " hugetlb regression testing." 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_ciecho "---------------------------" 1168c2ecf20Sopenharmony_ciecho "running map_fixed_noreplace" 1178c2ecf20Sopenharmony_ciecho "---------------------------" 1188c2ecf20Sopenharmony_ci./map_fixed_noreplace 1198c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 1208c2ecf20Sopenharmony_ci echo "[FAIL]" 1218c2ecf20Sopenharmony_ci exitcode=1 1228c2ecf20Sopenharmony_cielse 1238c2ecf20Sopenharmony_ci echo "[PASS]" 1248c2ecf20Sopenharmony_cifi 1258c2ecf20Sopenharmony_ci 1268c2ecf20Sopenharmony_ciecho "--------------------------------------------" 1278c2ecf20Sopenharmony_ciecho "running 'gup_benchmark -U' (normal/slow gup)" 1288c2ecf20Sopenharmony_ciecho "--------------------------------------------" 1298c2ecf20Sopenharmony_ci./gup_benchmark -U 1308c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 1318c2ecf20Sopenharmony_ci echo "[FAIL]" 1328c2ecf20Sopenharmony_ci exitcode=1 1338c2ecf20Sopenharmony_cielse 1348c2ecf20Sopenharmony_ci echo "[PASS]" 1358c2ecf20Sopenharmony_cifi 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_ciecho "------------------------------------------" 1388c2ecf20Sopenharmony_ciecho "running gup_benchmark -b (pin_user_pages)" 1398c2ecf20Sopenharmony_ciecho "------------------------------------------" 1408c2ecf20Sopenharmony_ci./gup_benchmark -b 1418c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 1428c2ecf20Sopenharmony_ci echo "[FAIL]" 1438c2ecf20Sopenharmony_ci exitcode=1 1448c2ecf20Sopenharmony_cielse 1458c2ecf20Sopenharmony_ci echo "[PASS]" 1468c2ecf20Sopenharmony_cifi 1478c2ecf20Sopenharmony_ci 1488c2ecf20Sopenharmony_ciecho "-------------------" 1498c2ecf20Sopenharmony_ciecho "running userfaultfd" 1508c2ecf20Sopenharmony_ciecho "-------------------" 1518c2ecf20Sopenharmony_ci./userfaultfd anon 128 32 1528c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 1538c2ecf20Sopenharmony_ci echo "[FAIL]" 1548c2ecf20Sopenharmony_ci exitcode=1 1558c2ecf20Sopenharmony_cielse 1568c2ecf20Sopenharmony_ci echo "[PASS]" 1578c2ecf20Sopenharmony_cifi 1588c2ecf20Sopenharmony_ci 1598c2ecf20Sopenharmony_ciecho "---------------------------" 1608c2ecf20Sopenharmony_ciecho "running userfaultfd_hugetlb" 1618c2ecf20Sopenharmony_ciecho "---------------------------" 1628c2ecf20Sopenharmony_ci# Test requires source and destination huge pages. Size of source 1638c2ecf20Sopenharmony_ci# (half_ufd_size_MB) is passed as argument to test. 1648c2ecf20Sopenharmony_ci./userfaultfd hugetlb $half_ufd_size_MB 32 $mnt/ufd_test_file 1658c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 1668c2ecf20Sopenharmony_ci echo "[FAIL]" 1678c2ecf20Sopenharmony_ci exitcode=1 1688c2ecf20Sopenharmony_cielse 1698c2ecf20Sopenharmony_ci echo "[PASS]" 1708c2ecf20Sopenharmony_cifi 1718c2ecf20Sopenharmony_cirm -f $mnt/ufd_test_file 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_ciecho "-------------------------" 1748c2ecf20Sopenharmony_ciecho "running userfaultfd_shmem" 1758c2ecf20Sopenharmony_ciecho "-------------------------" 1768c2ecf20Sopenharmony_ci./userfaultfd shmem 128 32 1778c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 1788c2ecf20Sopenharmony_ci echo "[FAIL]" 1798c2ecf20Sopenharmony_ci exitcode=1 1808c2ecf20Sopenharmony_cielse 1818c2ecf20Sopenharmony_ci echo "[PASS]" 1828c2ecf20Sopenharmony_cifi 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci#cleanup 1858c2ecf20Sopenharmony_ciumount $mnt 1868c2ecf20Sopenharmony_cirm -rf $mnt 1878c2ecf20Sopenharmony_ciecho $nr_hugepgs > /proc/sys/vm/nr_hugepages 1888c2ecf20Sopenharmony_ci 1898c2ecf20Sopenharmony_ciecho "-----------------------" 1908c2ecf20Sopenharmony_ciecho "running compaction_test" 1918c2ecf20Sopenharmony_ciecho "-----------------------" 1928c2ecf20Sopenharmony_ci./compaction_test 1938c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 1948c2ecf20Sopenharmony_ci echo "[FAIL]" 1958c2ecf20Sopenharmony_ci exitcode=1 1968c2ecf20Sopenharmony_cielse 1978c2ecf20Sopenharmony_ci echo "[PASS]" 1988c2ecf20Sopenharmony_cifi 1998c2ecf20Sopenharmony_ci 2008c2ecf20Sopenharmony_ciecho "----------------------" 2018c2ecf20Sopenharmony_ciecho "running on-fault-limit" 2028c2ecf20Sopenharmony_ciecho "----------------------" 2038c2ecf20Sopenharmony_cisudo -u nobody ./on-fault-limit 2048c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 2058c2ecf20Sopenharmony_ci echo "[FAIL]" 2068c2ecf20Sopenharmony_ci exitcode=1 2078c2ecf20Sopenharmony_cielse 2088c2ecf20Sopenharmony_ci echo "[PASS]" 2098c2ecf20Sopenharmony_cifi 2108c2ecf20Sopenharmony_ci 2118c2ecf20Sopenharmony_ciecho "--------------------" 2128c2ecf20Sopenharmony_ciecho "running map_populate" 2138c2ecf20Sopenharmony_ciecho "--------------------" 2148c2ecf20Sopenharmony_ci./map_populate 2158c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 2168c2ecf20Sopenharmony_ci echo "[FAIL]" 2178c2ecf20Sopenharmony_ci exitcode=1 2188c2ecf20Sopenharmony_cielse 2198c2ecf20Sopenharmony_ci echo "[PASS]" 2208c2ecf20Sopenharmony_cifi 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_ciecho "-------------------------" 2238c2ecf20Sopenharmony_ciecho "running mlock-random-test" 2248c2ecf20Sopenharmony_ciecho "-------------------------" 2258c2ecf20Sopenharmony_ci./mlock-random-test 2268c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 2278c2ecf20Sopenharmony_ci echo "[FAIL]" 2288c2ecf20Sopenharmony_ci exitcode=1 2298c2ecf20Sopenharmony_cielse 2308c2ecf20Sopenharmony_ci echo "[PASS]" 2318c2ecf20Sopenharmony_cifi 2328c2ecf20Sopenharmony_ci 2338c2ecf20Sopenharmony_ciecho "--------------------" 2348c2ecf20Sopenharmony_ciecho "running mlock2-tests" 2358c2ecf20Sopenharmony_ciecho "--------------------" 2368c2ecf20Sopenharmony_ci./mlock2-tests 2378c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 2388c2ecf20Sopenharmony_ci echo "[FAIL]" 2398c2ecf20Sopenharmony_ci exitcode=1 2408c2ecf20Sopenharmony_cielse 2418c2ecf20Sopenharmony_ci echo "[PASS]" 2428c2ecf20Sopenharmony_cifi 2438c2ecf20Sopenharmony_ci 2448c2ecf20Sopenharmony_ciecho "-----------------" 2458c2ecf20Sopenharmony_ciecho "running thuge-gen" 2468c2ecf20Sopenharmony_ciecho "-----------------" 2478c2ecf20Sopenharmony_ci./thuge-gen 2488c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 2498c2ecf20Sopenharmony_ci echo "[FAIL]" 2508c2ecf20Sopenharmony_ci exitcode=1 2518c2ecf20Sopenharmony_cielse 2528c2ecf20Sopenharmony_ci echo "[PASS]" 2538c2ecf20Sopenharmony_cifi 2548c2ecf20Sopenharmony_ci 2558c2ecf20Sopenharmony_ciif [ $VADDR64 -ne 0 ]; then 2568c2ecf20Sopenharmony_ciecho "-----------------------------" 2578c2ecf20Sopenharmony_ciecho "running virtual_address_range" 2588c2ecf20Sopenharmony_ciecho "-----------------------------" 2598c2ecf20Sopenharmony_ci./virtual_address_range 2608c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 2618c2ecf20Sopenharmony_ci echo "[FAIL]" 2628c2ecf20Sopenharmony_ci exitcode=1 2638c2ecf20Sopenharmony_cielse 2648c2ecf20Sopenharmony_ci echo "[PASS]" 2658c2ecf20Sopenharmony_cifi 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ciecho "-----------------------------" 2688c2ecf20Sopenharmony_ciecho "running virtual address 128TB switch test" 2698c2ecf20Sopenharmony_ciecho "-----------------------------" 2708c2ecf20Sopenharmony_ci./va_128TBswitch 2718c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 2728c2ecf20Sopenharmony_ci echo "[FAIL]" 2738c2ecf20Sopenharmony_ci exitcode=1 2748c2ecf20Sopenharmony_cielse 2758c2ecf20Sopenharmony_ci echo "[PASS]" 2768c2ecf20Sopenharmony_cifi 2778c2ecf20Sopenharmony_cifi # VADDR64 2788c2ecf20Sopenharmony_ci 2798c2ecf20Sopenharmony_ciecho "------------------------------------" 2808c2ecf20Sopenharmony_ciecho "running vmalloc stability smoke test" 2818c2ecf20Sopenharmony_ciecho "------------------------------------" 2828c2ecf20Sopenharmony_ci./test_vmalloc.sh smoke 2838c2ecf20Sopenharmony_ciret_val=$? 2848c2ecf20Sopenharmony_ci 2858c2ecf20Sopenharmony_ciif [ $ret_val -eq 0 ]; then 2868c2ecf20Sopenharmony_ci echo "[PASS]" 2878c2ecf20Sopenharmony_cielif [ $ret_val -eq $ksft_skip ]; then 2888c2ecf20Sopenharmony_ci echo "[SKIP]" 2898c2ecf20Sopenharmony_ci exitcode=$ksft_skip 2908c2ecf20Sopenharmony_cielse 2918c2ecf20Sopenharmony_ci echo "[FAIL]" 2928c2ecf20Sopenharmony_ci exitcode=1 2938c2ecf20Sopenharmony_cifi 2948c2ecf20Sopenharmony_ci 2958c2ecf20Sopenharmony_ciecho "------------------------------------" 2968c2ecf20Sopenharmony_ciecho "running MREMAP_DONTUNMAP smoke test" 2978c2ecf20Sopenharmony_ciecho "------------------------------------" 2988c2ecf20Sopenharmony_ci./mremap_dontunmap 2998c2ecf20Sopenharmony_ciret_val=$? 3008c2ecf20Sopenharmony_ci 3018c2ecf20Sopenharmony_ciif [ $ret_val -eq 0 ]; then 3028c2ecf20Sopenharmony_ci echo "[PASS]" 3038c2ecf20Sopenharmony_cielif [ $ret_val -eq $ksft_skip ]; then 3048c2ecf20Sopenharmony_ci echo "[SKIP]" 3058c2ecf20Sopenharmony_ci exitcode=$ksft_skip 3068c2ecf20Sopenharmony_cielse 3078c2ecf20Sopenharmony_ci echo "[FAIL]" 3088c2ecf20Sopenharmony_ci exitcode=1 3098c2ecf20Sopenharmony_cifi 3108c2ecf20Sopenharmony_ci 3118c2ecf20Sopenharmony_ciecho "running HMM smoke test" 3128c2ecf20Sopenharmony_ciecho "------------------------------------" 3138c2ecf20Sopenharmony_ci./test_hmm.sh smoke 3148c2ecf20Sopenharmony_ciret_val=$? 3158c2ecf20Sopenharmony_ci 3168c2ecf20Sopenharmony_ciif [ $ret_val -eq 0 ]; then 3178c2ecf20Sopenharmony_ci echo "[PASS]" 3188c2ecf20Sopenharmony_cielif [ $ret_val -eq $ksft_skip ]; then 3198c2ecf20Sopenharmony_ci echo "[SKIP]" 3208c2ecf20Sopenharmony_ci exitcode=$ksft_skip 3218c2ecf20Sopenharmony_cielse 3228c2ecf20Sopenharmony_ci echo "[FAIL]" 3238c2ecf20Sopenharmony_ci exitcode=1 3248c2ecf20Sopenharmony_cifi 3258c2ecf20Sopenharmony_ci 3268c2ecf20Sopenharmony_ciexit $exitcode 327