aboutsummaryrefslogtreecommitdiffstats
path: root/include
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
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')
-rw-r--r--include/linux/gfp.h18
-rw-r--r--include/linux/mmzone.h36
2 files changed, 43 insertions, 11 deletions
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 14610b56c132..2a2153ebfe0b 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -9,17 +9,19 @@ struct vm_area_struct;
9 9
10/* 10/*
11 * GFP bitmasks.. 11 * GFP bitmasks..
12 *
13 * Zone modifiers (see linux/mmzone.h - low three bits)
14 *
15 * These may be masked by GFP_ZONEMASK to make allocations with this bit
16 * set fall back to ZONE_NORMAL.
17 *
18 * Do not put any conditional on these. If necessary modify the definitions
19 * without the underscores and use the consistently. The definitions here may
20 * be used in bit comparisons.
12 */ 21 */
13/* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low three bits) */
14#define __GFP_DMA ((__force gfp_t)0x01u) 22#define __GFP_DMA ((__force gfp_t)0x01u)
15#define __GFP_HIGHMEM ((__force gfp_t)0x02u) 23#define __GFP_HIGHMEM ((__force gfp_t)0x02u)
16#ifndef CONFIG_ZONE_DMA32 24#define __GFP_DMA32 ((__force gfp_t)0x04u)
17#define __GFP_DMA32 ((__force gfp_t)0x01) /* ZONE_DMA is ZONE_DMA32 */
18#elif BITS_PER_LONG < 64
19#define __GFP_DMA32 ((__force gfp_t)0x00) /* ZONE_NORMAL is ZONE_DMA32 */
20#else
21#define __GFP_DMA32 ((__force gfp_t)0x04) /* Has own ZONE_DMA32 */
22#endif
23 25
24/* 26/*
25 * Action modifiers - doesn't change the zoning 27 * Action modifiers - doesn't change the zoning
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)