diff options
author | Christoph Lameter <clameter@sgi.com> | 2006-09-26 02:31:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-26 11:48:46 -0400 |
commit | fb0e7942bdcbbd2f90e61cb4cfa4fa892a873f8a (patch) | |
tree | 71344e9afafbd631f4ac010bc8c48e0b16737299 /include/linux | |
parent | 2f1b6248682f8b39ca3c7e549dfc216d26c4109b (diff) |
[PATCH] reduce MAX_NR_ZONES: make ZONE_DMA32 optional
Make ZONE_DMA32 optional
- Add #ifdefs around ZONE_DMA32 specific code and definitions.
- Add CONFIG_ZONE_DMA32 config option and use that for x86_64
that alone needs this zone.
- Remove the use of CONFIG_DMA_IS_DMA32 and CONFIG_DMA_IS_NORMAL
for ia64 and fix up the way per node ZVCs are calculated.
- Fall back to prior GFP_ZONEMASK of 0x03 if there is no
DMA32 zone.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/gfp.h | 2 | ||||
-rw-r--r-- | include/linux/mmzone.h | 16 | ||||
-rw-r--r-- | include/linux/vmstat.h | 4 |
3 files changed, 15 insertions, 7 deletions
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index cc9e60844484..14610b56c132 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
@@ -13,7 +13,7 @@ struct vm_area_struct; | |||
13 | /* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low three bits) */ | 13 | /* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low three bits) */ |
14 | #define __GFP_DMA ((__force gfp_t)0x01u) | 14 | #define __GFP_DMA ((__force gfp_t)0x01u) |
15 | #define __GFP_HIGHMEM ((__force gfp_t)0x02u) | 15 | #define __GFP_HIGHMEM ((__force gfp_t)0x02u) |
16 | #ifdef CONFIG_DMA_IS_DMA32 | 16 | #ifndef CONFIG_ZONE_DMA32 |
17 | #define __GFP_DMA32 ((__force gfp_t)0x01) /* ZONE_DMA is ZONE_DMA32 */ | 17 | #define __GFP_DMA32 ((__force gfp_t)0x01) /* ZONE_DMA is ZONE_DMA32 */ |
18 | #elif BITS_PER_LONG < 64 | 18 | #elif BITS_PER_LONG < 64 |
19 | #define __GFP_DMA32 ((__force gfp_t)0x00) /* ZONE_NORMAL is ZONE_DMA32 */ | 19 | #define __GFP_DMA32 ((__force gfp_t)0x00) /* ZONE_NORMAL is ZONE_DMA32 */ |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 03a5a6eb0ffa..adae3c915938 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
@@ -109,12 +109,14 @@ enum zone_type { | |||
109 | * <16M. | 109 | * <16M. |
110 | */ | 110 | */ |
111 | ZONE_DMA, | 111 | ZONE_DMA, |
112 | #ifdef CONFIG_ZONE_DMA32 | ||
112 | /* | 113 | /* |
113 | * x86_64 needs two ZONE_DMAs because it supports devices that are | 114 | * x86_64 needs two ZONE_DMAs because it supports devices that are |
114 | * only able to do DMA to the lower 16M but also 32 bit devices that | 115 | * only able to do DMA to the lower 16M but also 32 bit devices that |
115 | * can only do DMA areas below 4G. | 116 | * can only do DMA areas below 4G. |
116 | */ | 117 | */ |
117 | ZONE_DMA32, | 118 | ZONE_DMA32, |
119 | #endif | ||
118 | /* | 120 | /* |
119 | * Normal addressable memory is in ZONE_NORMAL. DMA operations can be | 121 | * Normal addressable memory is in ZONE_NORMAL. DMA operations can be |
120 | * performed on pages in ZONE_NORMAL if the DMA devices support | 122 | * performed on pages in ZONE_NORMAL if the DMA devices support |
@@ -161,9 +163,13 @@ enum zone_type { | |||
161 | * | 163 | * |
162 | * NOTE! Make sure this matches the zones in <linux/gfp.h> | 164 | * NOTE! Make sure this matches the zones in <linux/gfp.h> |
163 | */ | 165 | */ |
164 | #define GFP_ZONEMASK 0x07 | 166 | #define GFP_ZONETYPES ((GFP_ZONEMASK + 1) / 2 + 1) /* Loner */ |
165 | /* #define GFP_ZONETYPES (GFP_ZONEMASK + 1) */ /* Non-loner */ | 167 | |
166 | #define GFP_ZONETYPES ((GFP_ZONEMASK + 1) / 2 + 1) /* Loner */ | 168 | #ifdef CONFIG_ZONE_DMA32 |
169 | #define GFP_ZONEMASK 0x07 | ||
170 | #else | ||
171 | #define GFP_ZONEMASK 0x03 | ||
172 | #endif | ||
167 | 173 | ||
168 | struct zone { | 174 | struct zone { |
169 | /* Fields commonly accessed by the page allocator */ | 175 | /* Fields commonly accessed by the page allocator */ |
@@ -429,7 +435,11 @@ static inline int is_normal(struct zone *zone) | |||
429 | 435 | ||
430 | static inline int is_dma32(struct zone *zone) | 436 | static inline int is_dma32(struct zone *zone) |
431 | { | 437 | { |
438 | #ifdef CONFIG_ZONE_DMA32 | ||
432 | return zone == zone->zone_pgdat->node_zones + ZONE_DMA32; | 439 | return zone == zone->zone_pgdat->node_zones + ZONE_DMA32; |
440 | #else | ||
441 | return 0; | ||
442 | #endif | ||
433 | } | 443 | } |
434 | 444 | ||
435 | static inline int is_dma(struct zone *zone) | 445 | static inline int is_dma(struct zone *zone) |
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h index 2d9b1b60798a..9c6e62c56ec2 100644 --- a/include/linux/vmstat.h +++ b/include/linux/vmstat.h | |||
@@ -124,12 +124,10 @@ static inline unsigned long node_page_state(int node, | |||
124 | struct zone *zones = NODE_DATA(node)->node_zones; | 124 | struct zone *zones = NODE_DATA(node)->node_zones; |
125 | 125 | ||
126 | return | 126 | return |
127 | #ifndef CONFIG_DMA_IS_NORMAL | 127 | #ifdef CONFIG_ZONE_DMA32 |
128 | #if !defined(CONFIG_DMA_IS_DMA32) && BITS_PER_LONG >= 64 | ||
129 | zone_page_state(&zones[ZONE_DMA32], item) + | 128 | zone_page_state(&zones[ZONE_DMA32], item) + |
130 | #endif | 129 | #endif |
131 | zone_page_state(&zones[ZONE_NORMAL], item) + | 130 | zone_page_state(&zones[ZONE_NORMAL], item) + |
132 | #endif | ||
133 | #ifdef CONFIG_HIGHMEM | 131 | #ifdef CONFIG_HIGHMEM |
134 | zone_page_state(&zones[ZONE_HIGHMEM], item) + | 132 | zone_page_state(&zones[ZONE_HIGHMEM], item) + |
135 | #endif | 133 | #endif |