libbarrelfish: fix morecore heap with 1GB pages.
[barrelfish] / lib / barrelfish / morecore.c
index de81db2..e61c489 100644 (file)
@@ -20,7 +20,7 @@
 
 /// Amount of virtual space for malloc
 #ifdef __x86_64__
-#       define HEAP_REGION (2UL * 1024 * 1024 * 1024) /* 2GB */
+#       define HEAP_REGION (3500UL * 1024 * 1024) /* 2GB */
 #else
 #       define HEAP_REGION (512UL * 1024 * 1024) /* 512MB */
 #endif
@@ -115,8 +115,15 @@ errval_t morecore_init(size_t alignment)
 
     thread_mutex_init(&state->mutex);
 
+    // setup flags that match the alignment
+    vregion_flags_t morecore_flags = VREGION_FLAGS_READ_WRITE;
+#if __x86_64__
+    morecore_flags |= (alignment == HUGE_PAGE_SIZE ? VREGION_FLAGS_HUGE : 0);
+#endif
+    morecore_flags |= (alignment == LARGE_PAGE_SIZE ? VREGION_FLAGS_LARGE : 0);
+
     err = vspace_mmu_aware_init_aligned(&state->mmu_state, HEAP_REGION,
-            alignment, VREGION_FLAGS_READ_WRITE | MORECORE_VREGION_FLAGS);
+            alignment, morecore_flags);
     if (err_is_fail(err)) {
         return err_push(err, LIB_ERR_VSPACE_MMU_AWARE_INIT);
     }
@@ -137,6 +144,9 @@ errval_t morecore_reinit(void)
     if (remapsize <= mapoffset) {
         // don't need to do anything if we only recreate the exact same
         // mapping
+        // XXX: do we need/want to recreate existing mappings with a larger
+        // page size here? If so, what is the implication on early boot
+        // domains that don't have access to mem_serv? -SG, 2015-04-30.
         return SYS_ERR_OK;
     }
     struct capref frame;