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