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