X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Flinux%2Fmmzone.h;h=f4bfe824834f995dd533c538f377bfaf39331aea;hb=a5d76b54a3f3a40385d7f76069a2feac9f1bad63;hp=a8140a9a65e8231df40bb8707ee73b972981921b;hpb=e010487dbe09d63cf916fd1b119d17abd0f48207;p=linux-2.6 diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index a8140a9a65..f4bfe82483 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -33,24 +33,27 @@ */ #define PAGE_ALLOC_COSTLY_ORDER 3 -#ifdef CONFIG_PAGE_GROUP_BY_MOBILITY #define MIGRATE_UNMOVABLE 0 #define MIGRATE_RECLAIMABLE 1 #define MIGRATE_MOVABLE 2 -#define MIGRATE_HIGHATOMIC 3 -#define MIGRATE_TYPES 4 -#else -#define MIGRATE_UNMOVABLE 0 -#define MIGRATE_UNRECLAIMABLE 0 -#define MIGRATE_MOVABLE 0 -#define MIGRATE_HIGHATOMIC 0 -#define MIGRATE_TYPES 1 -#endif +#define MIGRATE_RESERVE 3 +#define MIGRATE_ISOLATE 4 /* can't allocate from here */ +#define MIGRATE_TYPES 5 #define for_each_migratetype_order(order, type) \ for (order = 0; order < MAX_ORDER; order++) \ for (type = 0; type < MIGRATE_TYPES; type++) +extern int page_group_by_mobility_disabled; + +static inline int get_pageblock_migratetype(struct page *page) +{ + if (unlikely(page_group_by_mobility_disabled)) + return MIGRATE_UNMOVABLE; + + return get_pageblock_flags_group(page, PB_migrate, PB_migrate_end); +} + struct free_area { struct list_head free_list[MIGRATE_TYPES]; unsigned long nr_free; @@ -243,7 +246,7 @@ struct zone { #ifndef CONFIG_SPARSEMEM /* - * Flags for a MAX_ORDER_NR_PAGES block. See pageblock-flags.h. + * Flags for a pageblock_nr_pages block. See pageblock-flags.h. * In SPARSEMEM, this map is stored in struct mem_section */ unsigned long *pageblock_flags; @@ -748,7 +751,7 @@ extern struct zone *next_zone(struct zone *zone); #define PAGE_SECTION_MASK (~(PAGES_PER_SECTION-1)) #define SECTION_BLOCKFLAGS_BITS \ - ((SECTION_SIZE_BITS - (MAX_ORDER-1)) * NR_PAGEBLOCK_BITS) + ((1UL << (PFN_SECTION_SHIFT - pageblock_order)) * NR_PAGEBLOCK_BITS) #if (MAX_ORDER - 1 + PAGE_SHIFT) > SECTION_SIZE_BITS #error Allocator MAX_ORDER exceeds SECTION_SIZE @@ -769,7 +772,9 @@ struct mem_section { * before using it wrong. */ unsigned long section_mem_map; - DECLARE_BITMAP(pageblock_flags, SECTION_BLOCKFLAGS_BITS); + + /* See declaration of similar field in struct zone */ + unsigned long *pageblock_flags; }; #ifdef CONFIG_SPARSEMEM_EXTREME