[CRIU] [PATCH] zdtm: maps02 -- Make sure HugeTLB is present

Cyrill Gorcunov gorcunov at openvz.org
Fri Oct 26 04:52:04 EDT 2012


Reported-by: Pavel Emelyanov <xemul at parallels.com>
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 test/zdtm/live/static/maps02.c |   36 +++++++++++++++++++++++++++++++++---
 1 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/test/zdtm/live/static/maps02.c b/test/zdtm/live/static/maps02.c
index 5394a71..200c9c6 100644
--- a/test/zdtm/live/static/maps02.c
+++ b/test/zdtm/live/static/maps02.c
@@ -116,6 +116,9 @@ static int get_smaps_bits(unsigned long where, unsigned long *flags, unsigned lo
 	FILE *smaps = NULL;
 	char buf[1024];
 
+	if (!where)
+		return 0;
+
 	smaps = fopen("/proc/self/smaps", "r");
 	if (!smaps) {
 		err("Can't open smaps: %m");
@@ -141,6 +144,31 @@ static int get_smaps_bits(unsigned long where, unsigned long *flags, unsigned lo
 	return 0;
 }
 
+static int has_hugetlb(void)
+{
+	FILE *meminfo = NULL;
+	char buf[1024];
+	int ret = -1;
+
+	meminfo = fopen("/proc/meminfo", "r");
+	if (!meminfo) {
+		err("Can't open meminfo: %m");
+		return -1;
+	}
+
+	while (fgets(buf, sizeof(buf), meminfo)) {
+		if (!strncmp(buf, "HugePages_Total:", 16)) {
+			unsigned long size = 0;
+			sscanf(&buf[16], "%lu", &size);
+			ret = size > 0 ? 1 : 0;
+			break;
+		}
+	}
+
+	fclose(meminfo);
+	return ret;
+}
+
 #define MEM_SIZE (8192)
 
 static int alloc_anon_mmap(struct mmap_data *m, int flags, int adv)
@@ -179,9 +207,11 @@ int main(int argc, char **argv)
 	if (alloc_anon_mmap(&m[2], MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, MADV_DONTDUMP))
 		return -1;
 
-	test_msg("Alloc hugetlb/hugepage\n");
-	if (alloc_anon_mmap(&m[3], MAP_PRIVATE | MAP_ANONYMOUS, MADV_HUGEPAGE))
-		return -1;
+	if (has_hugetlb()) {
+		test_msg("Alloc hugetlb/hugepage\n");
+		if (alloc_anon_mmap(&m[3], MAP_PRIVATE | MAP_ANONYMOUS, MADV_HUGEPAGE))
+			return -1;
+	}
 
 	test_msg("Alloc dontfork/random|mergeable\n");
 	if (alloc_anon_mmap(&m[4], MAP_PRIVATE | MAP_ANONYMOUS, MADV_MERGEABLE))
-- 
1.7.7.6



More information about the CRIU mailing list