< prev index next >

share/gc/g1/g1PageBasedVirtualSpace.cpp

Print this page
rev 1 : G1GC+POGC+NVDIMM Patch with latest comments incorporated from all.
rev 2 : Removed fcntl and fixed hotspot else violation

@@ -132,10 +132,24 @@
            start, start + num_pages, _committed.size());
 
   char* start_addr = page_start(start);
   size_t size = num_pages * _page_size;
 
+  if (((address)start_addr == (address)os::nvdimm_heapbase())) {
+    // first remove my dummy mapping.
+    if (os::unmap_memory(start_addr, size)) {
+        char* nvdimm_addr = os::attempt_reserve_memory_at(size, start_addr, os::nvdimm_fd());
+        if (nvdimm_addr != start_addr)  {
+          vm_exit_during_initialization(
+            err_msg("Could not map memory at %p for NVDIMM %s Fd %d", nvdimm_addr, AllocateOldGenAt, os::nvdimm_fd()));
+        } else {
+          log_info(gc, heap)("NVDIMM Memory successfully mapped at %p, Size %lu", start_addr, size);
+          os::close(os::nvdimm_fd());
+        }
+    }
+    return;
+  }
   os::commit_memory_or_exit(start_addr, size, _page_size, _executable,
                             err_msg("Failed to commit area from " PTR_FORMAT " to " PTR_FORMAT " of length " SIZE_FORMAT ".",
                             p2i(start_addr), p2i(start_addr + size), size));
 }
 
< prev index next >