# HG changeset patch # User iveresov # Date 1331583127 25200 # Node ID 3f0dff7a9cf590ef3e5d7f2dcf6c8247b65c9d10 # Parent 3442eb7ef2d216d6bf655d537929a2d31a76a321 7151089: PS NUMA: NUMA allocator should not attempt to free pages when using SHM large pages Summary: Don't attempt to uncommit SHM-based large pages Reviewed-by: kvn diff -r 3442eb7ef2d2 -r 3f0dff7a9cf5 src/os/linux/vm/os_linux.cpp --- a/src/os/linux/vm/os_linux.cpp Tue Jan 14 20:24:44 2014 -0500 +++ b/src/os/linux/vm/os_linux.cpp Mon Mar 12 13:12:07 2012 -0700 @@ -2568,7 +2568,14 @@ } void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { - commit_memory(addr, bytes, alignment_hint, false); + // This method works by doing an mmap over an existing mmaping and effectively discarding + // the existing pages. However it won't work for SHM-based large pages that cannot be + // uncommitted at all. We don't do anything in this case to avoid creating a segment with + // small pages on top of the SHM segment. This method always works for small pages, so we + // allow that in any case. + if (alignment_hint <= (size_t)os::vm_page_size() || !UseSHM) { + commit_memory(addr, bytes, alignment_hint, false); + } } void os::numa_make_global(char *addr, size_t bytes) {