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