162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci# Please run as root 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci# Kselftest framework requirement - SKIP code is 4. 662306a36Sopenharmony_ciksft_skip=4 762306a36Sopenharmony_ci 862306a36Sopenharmony_cicount_pass=0 962306a36Sopenharmony_cicount_fail=0 1062306a36Sopenharmony_cicount_skip=0 1162306a36Sopenharmony_ciexitcode=0 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciusage() { 1462306a36Sopenharmony_ci cat <<EOF 1562306a36Sopenharmony_ciusage: ${BASH_SOURCE[0]:-$0} [ options ] 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci -a: run all tests, including extra ones 1862306a36Sopenharmony_ci -t: specify specific categories to tests to run 1962306a36Sopenharmony_ci -h: display this message 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciThe default behavior is to run required tests only. If -a is specified, 2262306a36Sopenharmony_ciwill run all tests. 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ciAlternatively, specific groups tests can be run by passing a string 2562306a36Sopenharmony_cito the -t argument containing one or more of the following categories 2662306a36Sopenharmony_ciseparated by spaces: 2762306a36Sopenharmony_ci- mmap 2862306a36Sopenharmony_ci tests for mmap(2) 2962306a36Sopenharmony_ci- gup_test 3062306a36Sopenharmony_ci tests for gup 3162306a36Sopenharmony_ci- userfaultfd 3262306a36Sopenharmony_ci tests for userfaultfd(2) 3362306a36Sopenharmony_ci- compaction 3462306a36Sopenharmony_ci a test for the patch "Allow compaction of unevictable pages" 3562306a36Sopenharmony_ci- mlock 3662306a36Sopenharmony_ci tests for mlock(2) 3762306a36Sopenharmony_ci- mremap 3862306a36Sopenharmony_ci tests for mremap(2) 3962306a36Sopenharmony_ci- hugevm 4062306a36Sopenharmony_ci tests for very large virtual address space 4162306a36Sopenharmony_ci- vmalloc 4262306a36Sopenharmony_ci vmalloc smoke tests 4362306a36Sopenharmony_ci- hmm 4462306a36Sopenharmony_ci hmm smoke tests 4562306a36Sopenharmony_ci- madv_populate 4662306a36Sopenharmony_ci test memadvise(2) MADV_POPULATE_{READ,WRITE} options 4762306a36Sopenharmony_ci- memfd_secret 4862306a36Sopenharmony_ci test memfd_secret(2) 4962306a36Sopenharmony_ci- process_mrelease 5062306a36Sopenharmony_ci test process_mrelease(2) 5162306a36Sopenharmony_ci- ksm 5262306a36Sopenharmony_ci ksm tests that do not require >=2 NUMA nodes 5362306a36Sopenharmony_ci- ksm_numa 5462306a36Sopenharmony_ci ksm tests that require >=2 NUMA nodes 5562306a36Sopenharmony_ci- pkey 5662306a36Sopenharmony_ci memory protection key tests 5762306a36Sopenharmony_ci- soft_dirty 5862306a36Sopenharmony_ci test soft dirty page bit semantics 5962306a36Sopenharmony_ci- cow 6062306a36Sopenharmony_ci test copy-on-write semantics 6162306a36Sopenharmony_ci- thp 6262306a36Sopenharmony_ci test transparent huge pages 6362306a36Sopenharmony_ci- migration 6462306a36Sopenharmony_ci invoke move_pages(2) to exercise the migration entry code 6562306a36Sopenharmony_ci paths in the kernel 6662306a36Sopenharmony_ci- mkdirty 6762306a36Sopenharmony_ci test handling of code that might set PTE/PMD dirty in 6862306a36Sopenharmony_ci read-only VMAs 6962306a36Sopenharmony_ci- mdwe 7062306a36Sopenharmony_ci test prctl(PR_SET_MDWE, ...) 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ciexample: ./run_vmtests.sh -t "hmm mmap ksm" 7362306a36Sopenharmony_ciEOF 7462306a36Sopenharmony_ci exit 0 7562306a36Sopenharmony_ci} 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ciRUN_ALL=false 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ciwhile getopts "aht:" OPT; do 8062306a36Sopenharmony_ci case ${OPT} in 8162306a36Sopenharmony_ci "a") RUN_ALL=true ;; 8262306a36Sopenharmony_ci "h") usage ;; 8362306a36Sopenharmony_ci "t") VM_SELFTEST_ITEMS=${OPTARG} ;; 8462306a36Sopenharmony_ci esac 8562306a36Sopenharmony_cidone 8662306a36Sopenharmony_cishift $((OPTIND -1)) 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci# default behavior: run all tests 8962306a36Sopenharmony_ciVM_SELFTEST_ITEMS=${VM_SELFTEST_ITEMS:-default} 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_citest_selected() { 9262306a36Sopenharmony_ci if [ "$VM_SELFTEST_ITEMS" == "default" ]; then 9362306a36Sopenharmony_ci # If no VM_SELFTEST_ITEMS are specified, run all tests 9462306a36Sopenharmony_ci return 0 9562306a36Sopenharmony_ci fi 9662306a36Sopenharmony_ci # If test selected argument is one of the test items 9762306a36Sopenharmony_ci if [[ " ${VM_SELFTEST_ITEMS[*]} " =~ " ${1} " ]]; then 9862306a36Sopenharmony_ci return 0 9962306a36Sopenharmony_ci else 10062306a36Sopenharmony_ci return 1 10162306a36Sopenharmony_ci fi 10262306a36Sopenharmony_ci} 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_cirun_gup_matrix() { 10562306a36Sopenharmony_ci # -t: thp=on, -T: thp=off, -H: hugetlb=on 10662306a36Sopenharmony_ci local hugetlb_mb=$(( needmem_KB / 1024 )) 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci for huge in -t -T "-H -m $hugetlb_mb"; do 10962306a36Sopenharmony_ci # -u: gup-fast, -U: gup-basic, -a: pin-fast, -b: pin-basic, -L: pin-longterm 11062306a36Sopenharmony_ci for test_cmd in -u -U -a -b -L; do 11162306a36Sopenharmony_ci # -w: write=1, -W: write=0 11262306a36Sopenharmony_ci for write in -w -W; do 11362306a36Sopenharmony_ci # -S: shared 11462306a36Sopenharmony_ci for share in -S " "; do 11562306a36Sopenharmony_ci # -n: How many pages to fetch together? 512 is special 11662306a36Sopenharmony_ci # because it's default thp size (or 2M on x86), 123 to 11762306a36Sopenharmony_ci # just test partial gup when hit a huge in whatever form 11862306a36Sopenharmony_ci for num in "-n 1" "-n 512" "-n 123"; do 11962306a36Sopenharmony_ci CATEGORY="gup_test" run_test ./gup_test \ 12062306a36Sopenharmony_ci $huge $test_cmd $write $share $num 12162306a36Sopenharmony_ci done 12262306a36Sopenharmony_ci done 12362306a36Sopenharmony_ci done 12462306a36Sopenharmony_ci done 12562306a36Sopenharmony_ci done 12662306a36Sopenharmony_ci} 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci# get huge pagesize and freepages from /proc/meminfo 12962306a36Sopenharmony_ciwhile read -r name size unit; do 13062306a36Sopenharmony_ci if [ "$name" = "HugePages_Free:" ]; then 13162306a36Sopenharmony_ci freepgs="$size" 13262306a36Sopenharmony_ci fi 13362306a36Sopenharmony_ci if [ "$name" = "Hugepagesize:" ]; then 13462306a36Sopenharmony_ci hpgsize_KB="$size" 13562306a36Sopenharmony_ci fi 13662306a36Sopenharmony_cidone < /proc/meminfo 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci# Simple hugetlbfs tests have a hardcoded minimum requirement of 13962306a36Sopenharmony_ci# huge pages totaling 256MB (262144KB) in size. The userfaultfd 14062306a36Sopenharmony_ci# hugetlb test requires a minimum of 2 * nr_cpus huge pages. Take 14162306a36Sopenharmony_ci# both of these requirements into account and attempt to increase 14262306a36Sopenharmony_ci# number of huge pages available. 14362306a36Sopenharmony_cinr_cpus=$(nproc) 14462306a36Sopenharmony_cihpgsize_MB=$((hpgsize_KB / 1024)) 14562306a36Sopenharmony_cihalf_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128)) 14662306a36Sopenharmony_cineedmem_KB=$((half_ufd_size_MB * 2 * 1024)) 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci# set proper nr_hugepages 14962306a36Sopenharmony_ciif [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then 15062306a36Sopenharmony_ci nr_hugepgs=$(cat /proc/sys/vm/nr_hugepages) 15162306a36Sopenharmony_ci needpgs=$((needmem_KB / hpgsize_KB)) 15262306a36Sopenharmony_ci tries=2 15362306a36Sopenharmony_ci while [ "$tries" -gt 0 ] && [ "$freepgs" -lt "$needpgs" ]; do 15462306a36Sopenharmony_ci lackpgs=$((needpgs - freepgs)) 15562306a36Sopenharmony_ci echo 3 > /proc/sys/vm/drop_caches 15662306a36Sopenharmony_ci if ! echo $((lackpgs + nr_hugepgs)) > /proc/sys/vm/nr_hugepages; then 15762306a36Sopenharmony_ci echo "Please run this test as root" 15862306a36Sopenharmony_ci exit $ksft_skip 15962306a36Sopenharmony_ci fi 16062306a36Sopenharmony_ci while read -r name size unit; do 16162306a36Sopenharmony_ci if [ "$name" = "HugePages_Free:" ]; then 16262306a36Sopenharmony_ci freepgs=$size 16362306a36Sopenharmony_ci fi 16462306a36Sopenharmony_ci done < /proc/meminfo 16562306a36Sopenharmony_ci tries=$((tries - 1)) 16662306a36Sopenharmony_ci done 16762306a36Sopenharmony_ci if [ "$freepgs" -lt "$needpgs" ]; then 16862306a36Sopenharmony_ci printf "Not enough huge pages available (%d < %d)\n" \ 16962306a36Sopenharmony_ci "$freepgs" "$needpgs" 17062306a36Sopenharmony_ci exit 1 17162306a36Sopenharmony_ci fi 17262306a36Sopenharmony_cielse 17362306a36Sopenharmony_ci echo "no hugetlbfs support in kernel?" 17462306a36Sopenharmony_ci exit 1 17562306a36Sopenharmony_cifi 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ci# filter 64bit architectures 17862306a36Sopenharmony_ciARCH64STR="arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sparc64 x86_64" 17962306a36Sopenharmony_ciif [ -z "$ARCH" ]; then 18062306a36Sopenharmony_ci ARCH=$(uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/') 18162306a36Sopenharmony_cifi 18262306a36Sopenharmony_ciVADDR64=0 18362306a36Sopenharmony_ciecho "$ARCH64STR" | grep "$ARCH" &>/dev/null && VADDR64=1 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci# Usage: run_test [test binary] [arbitrary test arguments...] 18662306a36Sopenharmony_cirun_test() { 18762306a36Sopenharmony_ci if test_selected ${CATEGORY}; then 18862306a36Sopenharmony_ci local title="running $*" 18962306a36Sopenharmony_ci local sep=$(echo -n "$title" | tr "[:graph:][:space:]" -) 19062306a36Sopenharmony_ci printf "%s\n%s\n%s\n" "$sep" "$title" "$sep" 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci "$@" 19362306a36Sopenharmony_ci local ret=$? 19462306a36Sopenharmony_ci if [ $ret -eq 0 ]; then 19562306a36Sopenharmony_ci count_pass=$(( count_pass + 1 )) 19662306a36Sopenharmony_ci echo "[PASS]" 19762306a36Sopenharmony_ci elif [ $ret -eq $ksft_skip ]; then 19862306a36Sopenharmony_ci count_skip=$(( count_skip + 1 )) 19962306a36Sopenharmony_ci echo "[SKIP]" 20062306a36Sopenharmony_ci exitcode=$ksft_skip 20162306a36Sopenharmony_ci else 20262306a36Sopenharmony_ci count_fail=$(( count_fail + 1 )) 20362306a36Sopenharmony_ci echo "[FAIL]" 20462306a36Sopenharmony_ci exitcode=1 20562306a36Sopenharmony_ci fi 20662306a36Sopenharmony_ci fi # test_selected 20762306a36Sopenharmony_ci} 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ciCATEGORY="hugetlb" run_test ./hugepage-mmap 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_cishmmax=$(cat /proc/sys/kernel/shmmax) 21262306a36Sopenharmony_cishmall=$(cat /proc/sys/kernel/shmall) 21362306a36Sopenharmony_ciecho 268435456 > /proc/sys/kernel/shmmax 21462306a36Sopenharmony_ciecho 4194304 > /proc/sys/kernel/shmall 21562306a36Sopenharmony_ciCATEGORY="hugetlb" run_test ./hugepage-shm 21662306a36Sopenharmony_ciecho "$shmmax" > /proc/sys/kernel/shmmax 21762306a36Sopenharmony_ciecho "$shmall" > /proc/sys/kernel/shmall 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ciCATEGORY="hugetlb" run_test ./map_hugetlb 22062306a36Sopenharmony_ciCATEGORY="hugetlb" run_test ./hugepage-mremap 22162306a36Sopenharmony_ciCATEGORY="hugetlb" run_test ./hugepage-vmemmap 22262306a36Sopenharmony_ciCATEGORY="hugetlb" run_test ./hugetlb-madvise 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ciif test_selected "hugetlb"; then 22562306a36Sopenharmony_ci echo "NOTE: These hugetlb tests provide minimal coverage. Use" 22662306a36Sopenharmony_ci echo " https://github.com/libhugetlbfs/libhugetlbfs.git for" 22762306a36Sopenharmony_ci echo " hugetlb regression testing." 22862306a36Sopenharmony_cifi 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ciCATEGORY="mmap" run_test ./map_fixed_noreplace 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ciif $RUN_ALL; then 23362306a36Sopenharmony_ci run_gup_matrix 23462306a36Sopenharmony_cielse 23562306a36Sopenharmony_ci # get_user_pages_fast() benchmark 23662306a36Sopenharmony_ci CATEGORY="gup_test" run_test ./gup_test -u 23762306a36Sopenharmony_ci # pin_user_pages_fast() benchmark 23862306a36Sopenharmony_ci CATEGORY="gup_test" run_test ./gup_test -a 23962306a36Sopenharmony_cifi 24062306a36Sopenharmony_ci# Dump pages 0, 19, and 4096, using pin_user_pages: 24162306a36Sopenharmony_ciCATEGORY="gup_test" run_test ./gup_test -ct -F 0x1 0 19 0x1000 24262306a36Sopenharmony_ciCATEGORY="gup_test" run_test ./gup_longterm 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ciCATEGORY="userfaultfd" run_test ./uffd-unit-tests 24562306a36Sopenharmony_ciuffd_stress_bin=./uffd-stress 24662306a36Sopenharmony_ciCATEGORY="userfaultfd" run_test ${uffd_stress_bin} anon 20 16 24762306a36Sopenharmony_ci# Hugetlb tests require source and destination huge pages. Pass in half 24862306a36Sopenharmony_ci# the size ($half_ufd_size_MB), which is used for *each*. 24962306a36Sopenharmony_ciCATEGORY="userfaultfd" run_test ${uffd_stress_bin} hugetlb "$half_ufd_size_MB" 32 25062306a36Sopenharmony_ciCATEGORY="userfaultfd" run_test ${uffd_stress_bin} hugetlb-private "$half_ufd_size_MB" 32 25162306a36Sopenharmony_ciCATEGORY="userfaultfd" run_test ${uffd_stress_bin} shmem 20 16 25262306a36Sopenharmony_ciCATEGORY="userfaultfd" run_test ${uffd_stress_bin} shmem-private 20 16 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ci#cleanup 25562306a36Sopenharmony_ciecho "$nr_hugepgs" > /proc/sys/vm/nr_hugepages 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ciCATEGORY="compaction" run_test ./compaction_test 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ciCATEGORY="mlock" run_test sudo -u nobody ./on-fault-limit 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ciCATEGORY="mmap" run_test ./map_populate 26262306a36Sopenharmony_ci 26362306a36Sopenharmony_ciCATEGORY="mlock" run_test ./mlock-random-test 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ciCATEGORY="mlock" run_test ./mlock2-tests 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ciCATEGORY="process_mrelease" run_test ./mrelease_test 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ciCATEGORY="mremap" run_test ./mremap_test 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ciCATEGORY="hugetlb" run_test ./thuge-gen 27262306a36Sopenharmony_ci 27362306a36Sopenharmony_ciif [ $VADDR64 -ne 0 ]; then 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci # set overcommit_policy as OVERCOMMIT_ALWAYS so that kernel 27662306a36Sopenharmony_ci # allows high virtual address allocation requests independent 27762306a36Sopenharmony_ci # of platform's physical memory. 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci prev_policy=$(cat /proc/sys/vm/overcommit_memory) 28062306a36Sopenharmony_ci echo 1 > /proc/sys/vm/overcommit_memory 28162306a36Sopenharmony_ci CATEGORY="hugevm" run_test ./virtual_address_range 28262306a36Sopenharmony_ci echo $prev_policy > /proc/sys/vm/overcommit_memory 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_ci # va high address boundary switch test 28562306a36Sopenharmony_ci ARCH_ARM64="arm64" 28662306a36Sopenharmony_ci prev_nr_hugepages=$(cat /proc/sys/vm/nr_hugepages) 28762306a36Sopenharmony_ci if [ "$ARCH" == "$ARCH_ARM64" ]; then 28862306a36Sopenharmony_ci echo 6 > /proc/sys/vm/nr_hugepages 28962306a36Sopenharmony_ci fi 29062306a36Sopenharmony_ci CATEGORY="hugevm" run_test bash ./va_high_addr_switch.sh 29162306a36Sopenharmony_ci if [ "$ARCH" == "$ARCH_ARM64" ]; then 29262306a36Sopenharmony_ci echo $prev_nr_hugepages > /proc/sys/vm/nr_hugepages 29362306a36Sopenharmony_ci fi 29462306a36Sopenharmony_cifi # VADDR64 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci# vmalloc stability smoke test 29762306a36Sopenharmony_ciCATEGORY="vmalloc" run_test bash ./test_vmalloc.sh smoke 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_ciCATEGORY="mremap" run_test ./mremap_dontunmap 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ciCATEGORY="hmm" run_test bash ./test_hmm.sh smoke 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_ci# MADV_POPULATE_READ and MADV_POPULATE_WRITE tests 30462306a36Sopenharmony_ciCATEGORY="madv_populate" run_test ./madv_populate 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ciCATEGORY="memfd_secret" run_test ./memfd_secret 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci# KSM KSM_MERGE_TIME_HUGE_PAGES test with size of 100 30962306a36Sopenharmony_ciCATEGORY="ksm" run_test ./ksm_tests -H -s 100 31062306a36Sopenharmony_ci# KSM KSM_MERGE_TIME test with size of 100 31162306a36Sopenharmony_ciCATEGORY="ksm" run_test ./ksm_tests -P -s 100 31262306a36Sopenharmony_ci# KSM MADV_MERGEABLE test with 10 identical pages 31362306a36Sopenharmony_ciCATEGORY="ksm" run_test ./ksm_tests -M -p 10 31462306a36Sopenharmony_ci# KSM unmerge test 31562306a36Sopenharmony_ciCATEGORY="ksm" run_test ./ksm_tests -U 31662306a36Sopenharmony_ci# KSM test with 10 zero pages and use_zero_pages = 0 31762306a36Sopenharmony_ciCATEGORY="ksm" run_test ./ksm_tests -Z -p 10 -z 0 31862306a36Sopenharmony_ci# KSM test with 10 zero pages and use_zero_pages = 1 31962306a36Sopenharmony_ciCATEGORY="ksm" run_test ./ksm_tests -Z -p 10 -z 1 32062306a36Sopenharmony_ci# KSM test with 2 NUMA nodes and merge_across_nodes = 1 32162306a36Sopenharmony_ciCATEGORY="ksm_numa" run_test ./ksm_tests -N -m 1 32262306a36Sopenharmony_ci# KSM test with 2 NUMA nodes and merge_across_nodes = 0 32362306a36Sopenharmony_ciCATEGORY="ksm_numa" run_test ./ksm_tests -N -m 0 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_ciCATEGORY="ksm" run_test ./ksm_functional_tests 32662306a36Sopenharmony_ci 32762306a36Sopenharmony_cirun_test ./ksm_functional_tests 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci# protection_keys tests 33062306a36Sopenharmony_ciif [ -x ./protection_keys_32 ] 33162306a36Sopenharmony_cithen 33262306a36Sopenharmony_ci CATEGORY="pkey" run_test ./protection_keys_32 33362306a36Sopenharmony_cifi 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_ciif [ -x ./protection_keys_64 ] 33662306a36Sopenharmony_cithen 33762306a36Sopenharmony_ci CATEGORY="pkey" run_test ./protection_keys_64 33862306a36Sopenharmony_cifi 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_ciif [ -x ./soft-dirty ] 34162306a36Sopenharmony_cithen 34262306a36Sopenharmony_ci CATEGORY="soft_dirty" run_test ./soft-dirty 34362306a36Sopenharmony_cifi 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_ci# COW tests 34662306a36Sopenharmony_ciCATEGORY="cow" run_test ./cow 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ciCATEGORY="thp" run_test ./khugepaged 34962306a36Sopenharmony_ci 35062306a36Sopenharmony_ciCATEGORY="thp" run_test ./transhuge-stress -d 20 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_ciCATEGORY="thp" run_test ./split_huge_page_test 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ciCATEGORY="migration" run_test ./migration 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_ciCATEGORY="mkdirty" run_test ./mkdirty 35762306a36Sopenharmony_ci 35862306a36Sopenharmony_ciCATEGORY="mdwe" run_test ./mdwe_test 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_ciecho "SUMMARY: PASS=${count_pass} SKIP=${count_skip} FAIL=${count_fail}" 36162306a36Sopenharmony_ci 36262306a36Sopenharmony_ciexit $exitcode 363