aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mmzone.h
diff options
context:
space:
mode:
authorChristoph Lameter <clameter@sgi.com>2006-09-26 02:31:14 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-09-26 11:48:46 -0400
commite53ef38d05dd59ed281a35590e4a5b64d8ff4c52 (patch)
tree42e525df84454e89abd6cab8d7983a6a0188b6bb /include/linux/mmzone.h
parentfb0e7942bdcbbd2f90e61cb4cfa4fa892a873f8a (diff)
[PATCH] reduce MAX_NR_ZONES: make ZONE_HIGHMEM optional
Make ZONE_HIGHMEM optional - ifdef out code and definitions related to CONFIG_HIGHMEM - __GFP_HIGHMEM falls back to normal allocations if there is no ZONE_HIGHMEM - GFP_ZONEMASK becomes 0x01 if there is no DMA32 and no HIGHMEM zone. [jdike@addtoit.com: build fix] Signed-off-by: Jeff Dike <jdike@addtoit.com> Signed-off-by: Christoph Lameter <clameter@engr.sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux/mmzone.h')
-rw-r--r--include/linux/mmzone.h36
1 files changed, 33 insertions, 3 deletions
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index adae3c915938..76d33e688593 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -123,6 +123,7 @@ enum zone_type {
123 * transfers to all addressable memory. 123 * transfers to all addressable memory.
124 */ 124 */
125 ZONE_NORMAL, 125 ZONE_NORMAL,
126#ifdef CONFIG_HIGHMEM
126 /* 127 /*
127 * A memory area that is only addressable by the kernel through 128 * A memory area that is only addressable by the kernel through
128 * mapping portions into its own address space. This is for example 129 * mapping portions into its own address space. This is for example
@@ -132,11 +133,10 @@ enum zone_type {
132 * access. 133 * access.
133 */ 134 */
134 ZONE_HIGHMEM, 135 ZONE_HIGHMEM,
135 136#endif
136 MAX_NR_ZONES 137 MAX_NR_ZONES
137}; 138};
138 139
139#define ZONES_SHIFT 2 /* ceil(log2(MAX_NR_ZONES)) */
140 140
141/* 141/*
142 * When a memory allocation must conform to specific limitations (such 142 * When a memory allocation must conform to specific limitations (such
@@ -163,12 +163,34 @@ enum zone_type {
163 * 163 *
164 * NOTE! Make sure this matches the zones in <linux/gfp.h> 164 * NOTE! Make sure this matches the zones in <linux/gfp.h>
165 */ 165 */
166#define GFP_ZONETYPES ((GFP_ZONEMASK + 1) / 2 + 1) /* Loner */
167 166
168#ifdef CONFIG_ZONE_DMA32 167#ifdef CONFIG_ZONE_DMA32
168
169#ifdef CONFIG_HIGHMEM
170#define GFP_ZONETYPES ((GFP_ZONEMASK + 1) / 2 + 1) /* Loner */
169#define GFP_ZONEMASK 0x07 171#define GFP_ZONEMASK 0x07
172#define ZONES_SHIFT 2 /* ceil(log2(MAX_NR_ZONES)) */
170#else 173#else
174#define GFP_ZONETYPES ((0x07 + 1) / 2 + 1) /* Loner */
175/* Mask __GFP_HIGHMEM */
176#define GFP_ZONEMASK 0x05
177#define ZONES_SHIFT 2
178#endif
179
180#else
181#ifdef CONFIG_HIGHMEM
182
171#define GFP_ZONEMASK 0x03 183#define GFP_ZONEMASK 0x03
184#define ZONES_SHIFT 2
185#define GFP_ZONETYPES 3
186
187#else
188
189#define GFP_ZONEMASK 0x01
190#define ZONES_SHIFT 1
191#define GFP_ZONETYPES 2
192
193#endif
172#endif 194#endif
173 195
174struct zone { 196struct zone {
@@ -409,7 +431,11 @@ static inline int populated_zone(struct zone *zone)
409 431
410static inline int is_highmem_idx(enum zone_type idx) 432static inline int is_highmem_idx(enum zone_type idx)
411{ 433{
434#ifdef CONFIG_HIGHMEM
412 return (idx == ZONE_HIGHMEM); 435 return (idx == ZONE_HIGHMEM);
436#else
437 return 0;
438#endif
413} 439}
414 440
415static inline int is_normal_idx(enum zone_type idx) 441static inline int is_normal_idx(enum zone_type idx)
@@ -425,7 +451,11 @@ static inline int is_normal_idx(enum zone_type idx)
425 */ 451 */
426static inline int is_highmem(struct zone *zone) 452static inline int is_highmem(struct zone *zone)
427{ 453{
454#ifdef CONFIG_HIGHMEM
428 return zone == zone->zone_pgdat->node_zones + ZONE_HIGHMEM; 455 return zone == zone->zone_pgdat->node_zones + ZONE_HIGHMEM;
456#else
457 return 0;
458#endif
429} 459}
430 460
431static inline int is_normal(struct zone *zone) 461static inline int is_normal(struct zone *zone)