1#!/bin/bash
2#please run as root
3
4#we need 256M, below is the size in kB
5needmem=262144
6mnt=./huge
7exitcode=0
8
9#get pagesize and freepages from /proc/meminfo
10while read name size unit; do
11	if [ "$name" = "HugePages_Free:" ]; then
12		freepgs=$size
13	fi
14	if [ "$name" = "Hugepagesize:" ]; then
15		pgsize=$size
16	fi
17done < /proc/meminfo
18
19#set proper nr_hugepages
20if [ -n "$freepgs" ] && [ -n "$pgsize" ]; then
21	nr_hugepgs=`cat /proc/sys/vm/nr_hugepages`
22	needpgs=`expr $needmem / $pgsize`
23	if [ $freepgs -lt $needpgs ]; then
24		lackpgs=$(( $needpgs - $freepgs ))
25		echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages
26		if [ $? -ne 0 ]; then
27			echo "Please run this test as root"
28			exit 1
29		fi
30	fi
31else
32	echo "no hugetlbfs support in kernel?"
33	exit 1
34fi
35
36mkdir $mnt
37mount -t hugetlbfs none $mnt
38
39echo "--------------------"
40echo "running hugepage-mmap"
41echo "--------------------"
42./hugepage-mmap
43if [ $? -ne 0 ]; then
44	echo "[FAIL]"
45	exitcode=1
46else
47	echo "[PASS]"
48fi
49
50shmmax=`cat /proc/sys/kernel/shmmax`
51shmall=`cat /proc/sys/kernel/shmall`
52echo 268435456 > /proc/sys/kernel/shmmax
53echo 4194304 > /proc/sys/kernel/shmall
54echo "--------------------"
55echo "running hugepage-shm"
56echo "--------------------"
57./hugepage-shm
58if [ $? -ne 0 ]; then
59	echo "[FAIL]"
60	exitcode=1
61else
62	echo "[PASS]"
63fi
64echo $shmmax > /proc/sys/kernel/shmmax
65echo $shmall > /proc/sys/kernel/shmall
66
67echo "--------------------"
68echo "running map_hugetlb"
69echo "--------------------"
70./map_hugetlb
71if [ $? -ne 0 ]; then
72	echo "[FAIL]"
73	exitcode=1
74else
75	echo "[PASS]"
76fi
77
78echo "--------------------"
79echo "running hugetlbfstest"
80echo "--------------------"
81./hugetlbfstest
82if [ $? -ne 0 ]; then
83	echo "[FAIL]"
84	exitcode=1
85else
86	echo "[PASS]"
87fi
88
89#cleanup
90umount $mnt
91rm -rf $mnt
92echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
93exit $exitcode
94