OSDN Git Service

Add missing page rounding of a page_entry
authorak <ak@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 29 Oct 2011 01:01:34 +0000 (01:01 +0000)
committerak <ak@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 29 Oct 2011 01:01:34 +0000 (01:01 +0000)
This one place in ggc forgot to round page_entry->bytes to the
next page boundary, which lead to all the heuristics in freeing to
check for continuous memory failing. Round here too, like all other
allocators already do. The memory consumed should be the same
for MMAP because the kernel would round anyways. It may slightly
increase memory usage when malloc groups are used.

This will also increase the hitrate on the free page list
slightly.

gcc/:

2011-10-18  Andi Kleen  <ak@linux.intel.com>

* ggc-page.c (alloc_pages): Always round up to entry_size.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180647 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/ggc-page.c

index 6686f7d..65df15b 100644 (file)
@@ -1,3 +1,7 @@
+2011-10-18  Andi Kleen  <ak@linux.intel.com>
+
+       * ggc-page.c (alloc_pages): Always round up entry_size.
+
 2011-10-19  Andi Kleen  <ak@linux.intel.com>
 
        * Makefile.in (MOSTLYCLEANFILES): Add gcc-ar/nm/ranlib.
index 617a493..077bc8e 100644 (file)
@@ -737,6 +737,7 @@ alloc_page (unsigned order)
   entry_size = num_objects * OBJECT_SIZE (order);
   if (entry_size < G.pagesize)
     entry_size = G.pagesize;
+  entry_size = ROUND_UP (entry_size, G.pagesize);
 
   entry = NULL;
   page = NULL;