GNU Linux-libre 4.14.266-gnu1
[releases.git] / tools / testing / selftests / memfd / run_tests.sh
1 #!/bin/bash
2 # please run as root
3
4 # Kselftest framework requirement - SKIP code is 4.
5 ksft_skip=4
6
7 #
8 # Normal tests requiring no special resources
9 #
10 ./run_fuse_test.sh
11 ./memfd_test
12
13 #
14 # To test memfd_create with hugetlbfs, there needs to be hpages_test
15 # huge pages free.  Attempt to allocate enough pages to test.
16 #
17 hpages_test=8
18
19 #
20 # Get count of free huge pages from /proc/meminfo
21 #
22 while read name size unit; do
23         if [ "$name" = "HugePages_Free:" ]; then
24                 freepgs=$size
25         fi
26 done < /proc/meminfo
27
28 #
29 # If not enough free huge pages for test, attempt to increase
30 #
31 if [ -n "$freepgs" ] && [ $freepgs -lt $hpages_test ]; then
32         nr_hugepgs=`cat /proc/sys/vm/nr_hugepages`
33         hpages_needed=`expr $hpages_test - $freepgs`
34
35         if [ $UID != 0 ]; then
36                 echo "Please run memfd with hugetlbfs test as root"
37                 exit $ksft_skip
38         fi
39
40         echo 3 > /proc/sys/vm/drop_caches
41         echo $(( $hpages_needed + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages
42         while read name size unit; do
43                 if [ "$name" = "HugePages_Free:" ]; then
44                         freepgs=$size
45                 fi
46         done < /proc/meminfo
47 fi
48
49 #
50 # If still not enough huge pages available, exit.  But, give back any huge
51 # pages potentially allocated above.
52 #
53 if [ $freepgs -lt $hpages_test ]; then
54         # nr_hugepgs non-zero only if we attempted to increase
55         if [ -n "$nr_hugepgs" ]; then
56                 echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
57         fi
58         printf "Not enough huge pages available (%d < %d)\n" \
59                 $freepgs $needpgs
60         exit $ksft_skip
61 fi
62
63 #
64 # Run the hugetlbfs test
65 #
66 ./memfd_test hugetlbfs
67
68 #
69 # Give back any huge pages allocated for the test
70 #
71 if [ -n "$nr_hugepgs" ]; then
72         echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
73 fi