diff options
Diffstat (limited to 'include/linux/mmzone.h')
-rw-r--r-- | include/linux/mmzone.h | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 04b1636a970b..d71ff763c9df 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
@@ -146,6 +146,7 @@ enum zone_type { | |||
146 | */ | 146 | */ |
147 | ZONE_HIGHMEM, | 147 | ZONE_HIGHMEM, |
148 | #endif | 148 | #endif |
149 | ZONE_MOVABLE, | ||
149 | MAX_NR_ZONES | 150 | MAX_NR_ZONES |
150 | }; | 151 | }; |
151 | 152 | ||
@@ -167,6 +168,7 @@ enum zone_type { | |||
167 | + defined(CONFIG_ZONE_DMA32) \ | 168 | + defined(CONFIG_ZONE_DMA32) \ |
168 | + 1 \ | 169 | + 1 \ |
169 | + defined(CONFIG_HIGHMEM) \ | 170 | + defined(CONFIG_HIGHMEM) \ |
171 | + 1 \ | ||
170 | ) | 172 | ) |
171 | #if __ZONE_COUNT < 2 | 173 | #if __ZONE_COUNT < 2 |
172 | #define ZONES_SHIFT 0 | 174 | #define ZONES_SHIFT 0 |
@@ -499,10 +501,22 @@ static inline int populated_zone(struct zone *zone) | |||
499 | return (!!zone->present_pages); | 501 | return (!!zone->present_pages); |
500 | } | 502 | } |
501 | 503 | ||
504 | extern int movable_zone; | ||
505 | |||
506 | static inline int zone_movable_is_highmem(void) | ||
507 | { | ||
508 | #if defined(CONFIG_HIGHMEM) && defined(CONFIG_ARCH_POPULATES_NODE_MAP) | ||
509 | return movable_zone == ZONE_HIGHMEM; | ||
510 | #else | ||
511 | return 0; | ||
512 | #endif | ||
513 | } | ||
514 | |||
502 | static inline int is_highmem_idx(enum zone_type idx) | 515 | static inline int is_highmem_idx(enum zone_type idx) |
503 | { | 516 | { |
504 | #ifdef CONFIG_HIGHMEM | 517 | #ifdef CONFIG_HIGHMEM |
505 | return (idx == ZONE_HIGHMEM); | 518 | return (idx == ZONE_HIGHMEM || |
519 | (idx == ZONE_MOVABLE && zone_movable_is_highmem())); | ||
506 | #else | 520 | #else |
507 | return 0; | 521 | return 0; |
508 | #endif | 522 | #endif |
@@ -522,7 +536,9 @@ static inline int is_normal_idx(enum zone_type idx) | |||
522 | static inline int is_highmem(struct zone *zone) | 536 | static inline int is_highmem(struct zone *zone) |
523 | { | 537 | { |
524 | #ifdef CONFIG_HIGHMEM | 538 | #ifdef CONFIG_HIGHMEM |
525 | return zone == zone->zone_pgdat->node_zones + ZONE_HIGHMEM; | 539 | int zone_idx = zone - zone->zone_pgdat->node_zones; |
540 | return zone_idx == ZONE_HIGHMEM || | ||
541 | (zone_idx == ZONE_MOVABLE && zone_movable_is_highmem()); | ||
526 | #else | 542 | #else |
527 | return 0; | 543 | return 0; |
528 | #endif | 544 | #endif |