aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mmzone.h
diff options
context:
space:
mode:
authorMel Gorman <mel@csn.ul.ie>2007-10-16 04:26:01 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-16 12:43:00 -0400
commitd9c2340052278d8eb2ffb16b0484f8f794def4de (patch)
treeaec7e4e11473a4fcdfd389c718544780a042c6df /include/linux/mmzone.h
parentd100313fd615cc30374ff92e0b3facb053838330 (diff)
Do not depend on MAX_ORDER when grouping pages by mobility
Currently mobility grouping works at the MAX_ORDER_NR_PAGES level. This makes sense for the majority of users where this is also the huge page size. However, on platforms like ia64 where the huge page size is runtime configurable it is desirable to group at a lower order. On x86_64 and occasionally on x86, the hugepage size may not always be MAX_ORDER_NR_PAGES. This patch groups pages together based on the value of HUGETLB_PAGE_ORDER. It uses a compile-time constant if possible and a variable where the huge page size is runtime configurable. It is assumed that grouping should be done at the lowest sensible order and that the user would not want to override this. If this is not true, page_block order could be forced to a variable initialised via a boot-time kernel parameter. One potential issue with this patch is that IA64 now parses hugepagesz with early_param() instead of __setup(). __setup() is called after the memory allocator has been initialised and the pageblock bitmaps already setup. In tests on one IA64 there did not seem to be any problem with using early_param() and in fact may be more correct as it guarantees the parameter is handled before the parsing of hugepages=. Signed-off-by: Mel Gorman <mel@csn.ul.ie> Acked-by: Andy Whitcroft <apw@shadowen.org> Acked-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/mmzone.h')
-rw-r--r--include/linux/mmzone.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index fef08c6cf75e..87a4045580f2 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -235,7 +235,7 @@ struct zone {
235 235
236#ifndef CONFIG_SPARSEMEM 236#ifndef CONFIG_SPARSEMEM
237 /* 237 /*
238 * Flags for a MAX_ORDER_NR_PAGES block. See pageblock-flags.h. 238 * Flags for a pageblock_nr_pages block. See pageblock-flags.h.
239 * In SPARSEMEM, this map is stored in struct mem_section 239 * In SPARSEMEM, this map is stored in struct mem_section
240 */ 240 */
241 unsigned long *pageblock_flags; 241 unsigned long *pageblock_flags;
@@ -740,7 +740,7 @@ extern struct zone *next_zone(struct zone *zone);
740#define PAGE_SECTION_MASK (~(PAGES_PER_SECTION-1)) 740#define PAGE_SECTION_MASK (~(PAGES_PER_SECTION-1))
741 741
742#define SECTION_BLOCKFLAGS_BITS \ 742#define SECTION_BLOCKFLAGS_BITS \
743 ((1 << (PFN_SECTION_SHIFT - (MAX_ORDER-1))) * NR_PAGEBLOCK_BITS) 743 ((1UL << (PFN_SECTION_SHIFT - pageblock_order)) * NR_PAGEBLOCK_BITS)
744 744
745#if (MAX_ORDER - 1 + PAGE_SHIFT) > SECTION_SIZE_BITS 745#if (MAX_ORDER - 1 + PAGE_SHIFT) > SECTION_SIZE_BITS
746#error Allocator MAX_ORDER exceeds SECTION_SIZE 746#error Allocator MAX_ORDER exceeds SECTION_SIZE