From c8d6c63d95e140826a09836b7d4ddec32f478a50 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Sun, 30 Oct 2016 16:54:39 -0400 Subject: [PATCH] bug fix: handle failed allocation of huge pages correctly (returns MAP_FAILED instead of NULL) --- include/villas/memory.h | 5 +++++ lib/memory.c | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/villas/memory.h b/include/villas/memory.h index d66955727..1261f3efa 100644 --- a/include/villas/memory.h +++ b/include/villas/memory.h @@ -41,6 +41,11 @@ struct memzone { size_t len; }; +/** Allocate \p len bytes memory of type \p m. + * + * @retval NULL If allocation failed. + * @retval <>0 If allocation was successful. + */ void * memory_alloc(const struct memtype *m, size_t len); void * memory_alloc_aligned(const struct memtype *m, size_t len, size_t alignment); diff --git a/lib/memory.c b/lib/memory.c index df4eccd7e..dd0cb3511 100644 --- a/lib/memory.c +++ b/lib/memory.c @@ -60,7 +60,14 @@ static void * memory_hugepage_alloc(size_t len) flags |= MAP_HUGETLB | MAP_LOCKED; #endif - return mmap(NULL, len, prot, flags, -1, 0); + void *ret = mmap(NULL, len, prot, flags, -1, 0); + + if (ret == MAP_FAILED) { + info("Failed to allocate huge pages: Check https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt"); + return NULL; + } + + return ret; } static int memory_hugepage_free(void *ptr, size_t len)