Merge tag 'selinux-pr-20180530' of git://git.kernel.org/pub/scm/linux/kernel/git...
[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 mnt=./huge
6 exitcode=0
7
8 #get huge pagesize and freepages from /proc/meminfo
9 while read name size unit; do
10         if [ "$name" = "HugePages_Free:" ]; then
11                 freepgs=$size
12         fi
13         if [ "$name" = "Hugepagesize:" ]; then
14                 hpgsize_KB=$size
15         fi
16 done < /proc/meminfo
17
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.
23 nr_cpus=$(nproc)
24 hpgsize_MB=$((hpgsize_KB / 1024))
25 half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128))
26 needmem_KB=$((half_ufd_size_MB * 2 * 1024))
27
28 #set proper nr_hugepages
29 if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then
30         nr_hugepgs=`cat /proc/sys/vm/nr_hugepages`
31         needpgs=$((needmem_KB / hpgsize_KB))
32         tries=2
33         while [ $tries -gt 0 ] && [ $freepgs -lt $needpgs ]; do
34                 lackpgs=$(( $needpgs - $freepgs ))
35                 echo 3 > /proc/sys/vm/drop_caches
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
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
52         fi
53 else
54         echo "no hugetlbfs support in kernel?"
55         exit 1
56 fi
57
58 mkdir $mnt
59 mount -t hugetlbfs none $mnt
60
61 echo "---------------------"
62 echo "running hugepage-mmap"
63 echo "---------------------"
64 ./hugepage-mmap
65 if [ $? -ne 0 ]; then
66         echo "[FAIL]"
67         exitcode=1
68 else
69         echo "[PASS]"
70 fi
71
72 shmmax=`cat /proc/sys/kernel/shmmax`
73 shmall=`cat /proc/sys/kernel/shmall`
74 echo 268435456 > /proc/sys/kernel/shmmax
75 echo 4194304 > /proc/sys/kernel/shmall
76 echo "--------------------"
77 echo "running hugepage-shm"
78 echo "--------------------"
79 ./hugepage-shm
80 if [ $? -ne 0 ]; then
81         echo "[FAIL]"
82         exitcode=1
83 else
84         echo "[PASS]"
85 fi
86 echo $shmmax > /proc/sys/kernel/shmmax
87 echo $shmall > /proc/sys/kernel/shmall
88
89 echo "-------------------"
90 echo "running map_hugetlb"
91 echo "-------------------"
92 ./map_hugetlb
93 if [ $? -ne 0 ]; then
94         echo "[FAIL]"
95         exitcode=1
96 else
97         echo "[PASS]"
98 fi
99
100 echo "NOTE: The above hugetlb tests provide minimal coverage.  Use"
101 echo "      https://github.com/libhugetlbfs/libhugetlbfs.git for"
102 echo "      hugetlb regression testing."
103
104 echo "-------------------"
105 echo "running userfaultfd"
106 echo "-------------------"
107 ./userfaultfd anon 128 32
108 if [ $? -ne 0 ]; then
109         echo "[FAIL]"
110         exitcode=1
111 else
112         echo "[PASS]"
113 fi
114
115 echo "---------------------------"
116 echo "running userfaultfd_hugetlb"
117 echo "---------------------------"
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
121 if [ $? -ne 0 ]; then
122         echo "[FAIL]"
123         exitcode=1
124 else
125         echo "[PASS]"
126 fi
127 rm -f $mnt/ufd_test_file
128
129 echo "-------------------------"
130 echo "running userfaultfd_shmem"
131 echo "-------------------------"
132 ./userfaultfd shmem 128 32
133 if [ $? -ne 0 ]; then
134         echo "[FAIL]"
135         exitcode=1
136 else
137         echo "[PASS]"
138 fi
139
140 #cleanup
141 umount $mnt
142 rm -rf $mnt
143 echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
144
145 echo "-----------------------"
146 echo "running compaction_test"
147 echo "-----------------------"
148 ./compaction_test
149 if [ $? -ne 0 ]; then
150         echo "[FAIL]"
151         exitcode=1
152 else
153         echo "[PASS]"
154 fi
155
156 echo "----------------------"
157 echo "running on-fault-limit"
158 echo "----------------------"
159 sudo -u nobody ./on-fault-limit
160 if [ $? -ne 0 ]; then
161         echo "[FAIL]"
162         exitcode=1
163 else
164         echo "[PASS]"
165 fi
166
167 echo "--------------------"
168 echo "running mlock2-tests"
169 echo "--------------------"
170 ./mlock2-tests
171 if [ $? -ne 0 ]; then
172         echo "[FAIL]"
173         exitcode=1
174 else
175         echo "[PASS]"
176 fi
177
178 echo "-----------------------------"
179 echo "running virtual_address_range"
180 echo "-----------------------------"
181 ./virtual_address_range
182 if [ $? -ne 0 ]; then
183         echo "[FAIL]"
184         exitcode=1
185 else
186         echo "[PASS]"
187 fi
188
189 echo "-----------------------------"
190 echo "running virtual address 128TB switch test"
191 echo "-----------------------------"
192 ./va_128TBswitch
193 if [ $? -ne 0 ]; then
194     echo "[FAIL]"
195     exitcode=1
196 else
197     echo "[PASS]"
198 fi
199
200 exit $exitcode