From 8e0eefda3bb46713ac6daca5e728ad6e53c62c8c Mon Sep 17 00:00:00 2001 From: Wenbo Wang Date: Thu, 27 Jul 2023 10:28:45 +0800 Subject: [PATCH] Fix incorrect MAP_HUGE_1GB check MAP_HUGE_1GB and MAP_HUGE_2MB are not single bit flags. MAP_HUGE_1GB = 30 << 26. MAP_HUGE_2MB = 21 << 26. MAP_HUGE_1GB & MAP_HUGE_2MB != 0. --- src/prim/unix/prim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/prim/unix/prim.c b/src/prim/unix/prim.c index 314281fe..0444040a 100644 --- a/src/prim/unix/prim.c +++ b/src/prim/unix/prim.c @@ -276,7 +276,7 @@ static void* unix_mmap(void* addr, size_t size, size_t try_alignment, int protec *is_large = true; p = unix_mmap_prim(addr, size, try_alignment, protect_flags, lflags, lfd); #ifdef MAP_HUGE_1GB - if (p == NULL && (lflags & MAP_HUGE_1GB) != 0) { + if (p == NULL && (lflags & MAP_HUGE_1GB) == MAP_HUGE_1GB) { mi_huge_pages_available = false; // don't try huge 1GiB pages again _mi_warning_message("unable to allocate huge (1GiB) page, trying large (2MiB) pages instead (errno: %i)\n", errno); lflags = ((lflags & ~MAP_HUGE_1GB) | MAP_HUGE_2MB);