lkdtm/heap: Hide allocation size from -Warray-bounds
[linux-2.6-microblaze.git] / tools / testing / selftests / vm / run_vmtests.sh
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 #filter 64bit architectures
62 ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64"
63 if [ -z $ARCH ]; then
64   ARCH=`uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/'`
65 fi
66 VADDR64=0
67 echo "$ARCH64STR" | grep $ARCH && VADDR64=1
68
69 mkdir $mnt
70 mount -t hugetlbfs none $mnt
71
72 echo "---------------------"
73 echo "running hugepage-mmap"
74 echo "---------------------"
75 ./hugepage-mmap
76 if [ $? -ne 0 ]; then
77         echo "[FAIL]"
78         exitcode=1
79 else
80         echo "[PASS]"
81 fi
82
83 shmmax=`cat /proc/sys/kernel/shmmax`
84 shmall=`cat /proc/sys/kernel/shmall`
85 echo 268435456 > /proc/sys/kernel/shmmax
86 echo 4194304 > /proc/sys/kernel/shmall
87 echo "--------------------"
88 echo "running hugepage-shm"
89 echo "--------------------"
90 ./hugepage-shm
91 if [ $? -ne 0 ]; then
92         echo "[FAIL]"
93         exitcode=1
94 else
95         echo "[PASS]"
96 fi
97 echo $shmmax > /proc/sys/kernel/shmmax
98 echo $shmall > /proc/sys/kernel/shmall
99
100 echo "-------------------"
101 echo "running map_hugetlb"
102 echo "-------------------"
103 ./map_hugetlb
104 if [ $? -ne 0 ]; then
105         echo "[FAIL]"
106         exitcode=1
107 else
108         echo "[PASS]"
109 fi
110
111 echo "-----------------------"
112 echo "running hugepage-mremap"
113 echo "-----------------------"
114 ./hugepage-mremap $mnt/huge_mremap
115 if [ $? -ne 0 ]; then
116         echo "[FAIL]"
117         exitcode=1
118 else
119         echo "[PASS]"
120 fi
121 rm -f $mnt/huge_mremap
122
123 echo "------------------------"
124 echo "running hugepage-vmemmap"
125 echo "------------------------"
126 ./hugepage-vmemmap
127 if [ $? -ne 0 ]; then
128         echo "[FAIL]"
129         exitcode=1
130 else
131         echo "[PASS]"
132 fi
133
134 echo "-----------------------"
135 echo "running hugetlb-madvise"
136 echo "-----------------------"
137 ./hugetlb-madvise $mnt/madvise-test
138 if [ $? -ne 0 ]; then
139         echo "[FAIL]"
140         exitcode=1
141 else
142         echo "[PASS]"
143 fi
144 rm -f $mnt/madvise-test
145
146 echo "NOTE: The above hugetlb tests provide minimal coverage.  Use"
147 echo "      https://github.com/libhugetlbfs/libhugetlbfs.git for"
148 echo "      hugetlb regression testing."
149
150 echo "---------------------------"
151 echo "running map_fixed_noreplace"
152 echo "---------------------------"
153 ./map_fixed_noreplace
154 if [ $? -ne 0 ]; then
155         echo "[FAIL]"
156         exitcode=1
157 else
158         echo "[PASS]"
159 fi
160
161 echo "------------------------------------------------------"
162 echo "running: gup_test -u # get_user_pages_fast() benchmark"
163 echo "------------------------------------------------------"
164 ./gup_test -u
165 if [ $? -ne 0 ]; then
166         echo "[FAIL]"
167         exitcode=1
168 else
169         echo "[PASS]"
170 fi
171
172 echo "------------------------------------------------------"
173 echo "running: gup_test -a # pin_user_pages_fast() benchmark"
174 echo "------------------------------------------------------"
175 ./gup_test -a
176 if [ $? -ne 0 ]; then
177         echo "[FAIL]"
178         exitcode=1
179 else
180         echo "[PASS]"
181 fi
182
183 echo "------------------------------------------------------------"
184 echo "# Dump pages 0, 19, and 4096, using pin_user_pages:"
185 echo "running: gup_test -ct -F 0x1 0 19 0x1000 # dump_page() test"
186 echo "------------------------------------------------------------"
187 ./gup_test -ct -F 0x1 0 19 0x1000
188 if [ $? -ne 0 ]; then
189         echo "[FAIL]"
190         exitcode=1
191 else
192         echo "[PASS]"
193 fi
194
195 echo "-------------------"
196 echo "running userfaultfd"
197 echo "-------------------"
198 ./userfaultfd anon 20 16
199 if [ $? -ne 0 ]; then
200         echo "[FAIL]"
201         exitcode=1
202 else
203         echo "[PASS]"
204 fi
205
206 echo "---------------------------"
207 echo "running userfaultfd_hugetlb"
208 echo "---------------------------"
209 # Test requires source and destination huge pages.  Size of source
210 # (half_ufd_size_MB) is passed as argument to test.
211 ./userfaultfd hugetlb $half_ufd_size_MB 32
212 if [ $? -ne 0 ]; then
213         echo "[FAIL]"
214         exitcode=1
215 else
216         echo "[PASS]"
217 fi
218
219 echo "-------------------------"
220 echo "running userfaultfd_shmem"
221 echo "-------------------------"
222 ./userfaultfd shmem 20 16
223 if [ $? -ne 0 ]; then
224         echo "[FAIL]"
225         exitcode=1
226 else
227         echo "[PASS]"
228 fi
229
230 #cleanup
231 umount $mnt
232 rm -rf $mnt
233 echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
234
235 echo "-----------------------"
236 echo "running compaction_test"
237 echo "-----------------------"
238 ./compaction_test
239 if [ $? -ne 0 ]; then
240         echo "[FAIL]"
241         exitcode=1
242 else
243         echo "[PASS]"
244 fi
245
246 echo "----------------------"
247 echo "running on-fault-limit"
248 echo "----------------------"
249 sudo -u nobody ./on-fault-limit
250 if [ $? -ne 0 ]; then
251         echo "[FAIL]"
252         exitcode=1
253 else
254         echo "[PASS]"
255 fi
256
257 echo "--------------------"
258 echo "running map_populate"
259 echo "--------------------"
260 ./map_populate
261 if [ $? -ne 0 ]; then
262         echo "[FAIL]"
263         exitcode=1
264 else
265         echo "[PASS]"
266 fi
267
268 echo "-------------------------"
269 echo "running mlock-random-test"
270 echo "-------------------------"
271 ./mlock-random-test
272 if [ $? -ne 0 ]; then
273         echo "[FAIL]"
274         exitcode=1
275 else
276         echo "[PASS]"
277 fi
278
279 echo "--------------------"
280 echo "running mlock2-tests"
281 echo "--------------------"
282 ./mlock2-tests
283 if [ $? -ne 0 ]; then
284         echo "[FAIL]"
285         exitcode=1
286 else
287         echo "[PASS]"
288 fi
289
290 echo "-------------------"
291 echo "running mremap_test"
292 echo "-------------------"
293 ./mremap_test
294 if [ $? -ne 0 ]; then
295         echo "[FAIL]"
296         exitcode=1
297 else
298         echo "[PASS]"
299 fi
300
301 echo "-----------------"
302 echo "running thuge-gen"
303 echo "-----------------"
304 ./thuge-gen
305 if [ $? -ne 0 ]; then
306         echo "[FAIL]"
307         exitcode=1
308 else
309         echo "[PASS]"
310 fi
311
312 if [ $VADDR64 -ne 0 ]; then
313 echo "-----------------------------"
314 echo "running virtual_address_range"
315 echo "-----------------------------"
316 ./virtual_address_range
317 if [ $? -ne 0 ]; then
318         echo "[FAIL]"
319         exitcode=1
320 else
321         echo "[PASS]"
322 fi
323
324 echo "-----------------------------"
325 echo "running virtual address 128TB switch test"
326 echo "-----------------------------"
327 ./va_128TBswitch
328 if [ $? -ne 0 ]; then
329     echo "[FAIL]"
330     exitcode=1
331 else
332     echo "[PASS]"
333 fi
334 fi # VADDR64
335
336 echo "------------------------------------"
337 echo "running vmalloc stability smoke test"
338 echo "------------------------------------"
339 ./test_vmalloc.sh smoke
340 ret_val=$?
341
342 if [ $ret_val -eq 0 ]; then
343         echo "[PASS]"
344 elif [ $ret_val -eq $ksft_skip ]; then
345          echo "[SKIP]"
346          exitcode=$ksft_skip
347 else
348         echo "[FAIL]"
349         exitcode=1
350 fi
351
352 echo "------------------------------------"
353 echo "running MREMAP_DONTUNMAP smoke test"
354 echo "------------------------------------"
355 ./mremap_dontunmap
356 ret_val=$?
357
358 if [ $ret_val -eq 0 ]; then
359         echo "[PASS]"
360 elif [ $ret_val -eq $ksft_skip ]; then
361          echo "[SKIP]"
362          exitcode=$ksft_skip
363 else
364         echo "[FAIL]"
365         exitcode=1
366 fi
367
368 echo "running HMM smoke test"
369 echo "------------------------------------"
370 ./test_hmm.sh smoke
371 ret_val=$?
372
373 if [ $ret_val -eq 0 ]; then
374         echo "[PASS]"
375 elif [ $ret_val -eq $ksft_skip ]; then
376         echo "[SKIP]"
377         exitcode=$ksft_skip
378 else
379         echo "[FAIL]"
380         exitcode=1
381 fi
382
383 echo "--------------------------------------------------------"
384 echo "running MADV_POPULATE_READ and MADV_POPULATE_WRITE tests"
385 echo "--------------------------------------------------------"
386 ./madv_populate
387 ret_val=$?
388
389 if [ $ret_val -eq 0 ]; then
390         echo "[PASS]"
391 elif [ $ret_val -eq $ksft_skip ]; then
392         echo "[SKIP]"
393         exitcode=$ksft_skip
394 else
395         echo "[FAIL]"
396         exitcode=1
397 fi
398
399 echo "running memfd_secret test"
400 echo "------------------------------------"
401 ./memfd_secret
402 ret_val=$?
403
404 if [ $ret_val -eq 0 ]; then
405         echo "[PASS]"
406 elif [ $ret_val -eq $ksft_skip ]; then
407         echo "[SKIP]"
408         exitcode=$ksft_skip
409 else
410         echo "[FAIL]"
411         exitcode=1
412 fi
413
414 echo "-------------------------------------------------------"
415 echo "running KSM MADV_MERGEABLE test with 10 identical pages"
416 echo "-------------------------------------------------------"
417 ./ksm_tests -M -p 10
418 ret_val=$?
419
420 if [ $ret_val -eq 0 ]; then
421         echo "[PASS]"
422 elif [ $ret_val -eq $ksft_skip ]; then
423          echo "[SKIP]"
424          exitcode=$ksft_skip
425 else
426         echo "[FAIL]"
427         exitcode=1
428 fi
429
430 echo "------------------------"
431 echo "running KSM unmerge test"
432 echo "------------------------"
433 ./ksm_tests -U
434 ret_val=$?
435
436 if [ $ret_val -eq 0 ]; then
437         echo "[PASS]"
438 elif [ $ret_val -eq $ksft_skip ]; then
439          echo "[SKIP]"
440          exitcode=$ksft_skip
441 else
442         echo "[FAIL]"
443         exitcode=1
444 fi
445
446 echo "----------------------------------------------------------"
447 echo "running KSM test with 10 zero pages and use_zero_pages = 0"
448 echo "----------------------------------------------------------"
449 ./ksm_tests -Z -p 10 -z 0
450 ret_val=$?
451
452 if [ $ret_val -eq 0 ]; then
453         echo "[PASS]"
454 elif [ $ret_val -eq $ksft_skip ]; then
455          echo "[SKIP]"
456          exitcode=$ksft_skip
457 else
458         echo "[FAIL]"
459         exitcode=1
460 fi
461
462 echo "----------------------------------------------------------"
463 echo "running KSM test with 10 zero pages and use_zero_pages = 1"
464 echo "----------------------------------------------------------"
465 ./ksm_tests -Z -p 10 -z 1
466 ret_val=$?
467
468 if [ $ret_val -eq 0 ]; then
469         echo "[PASS]"
470 elif [ $ret_val -eq $ksft_skip ]; then
471          echo "[SKIP]"
472          exitcode=$ksft_skip
473 else
474         echo "[FAIL]"
475         exitcode=1
476 fi
477
478 echo "-------------------------------------------------------------"
479 echo "running KSM test with 2 NUMA nodes and merge_across_nodes = 1"
480 echo "-------------------------------------------------------------"
481 ./ksm_tests -N -m 1
482 ret_val=$?
483
484 if [ $ret_val -eq 0 ]; then
485         echo "[PASS]"
486 elif [ $ret_val -eq $ksft_skip ]; then
487          echo "[SKIP]"
488          exitcode=$ksft_skip
489 else
490         echo "[FAIL]"
491         exitcode=1
492 fi
493
494 echo "-------------------------------------------------------------"
495 echo "running KSM test with 2 NUMA nodes and merge_across_nodes = 0"
496 echo "-------------------------------------------------------------"
497 ./ksm_tests -N -m 0
498 ret_val=$?
499
500 if [ $ret_val -eq 0 ]; then
501         echo "[PASS]"
502 elif [ $ret_val -eq $ksft_skip ]; then
503          echo "[SKIP]"
504          exitcode=$ksft_skip
505 else
506         echo "[FAIL]"
507         exitcode=1
508 fi
509
510 exit $exitcode
511
512 exit $exitcode