aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mmzone.h
diff options
context:
space:
mode:
authorDave Hansen <haveblue@us.ibm.com>2005-06-23 03:07:40 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-23 12:45:01 -0400
commit348f8b6c4837a07304d2f72b11ce8d96588065e0 (patch)
treef4c6c332b2c327630b284598325dff2f44e6c9cf /include/linux/mmzone.h
parent6f167ec721108c9282d54424516a12c805e3c306 (diff)
[PATCH] sparsemem base: reorganize page->flags bit operations
Generify the value fields in the page_flags. The aim is to allow the location and size of these fields to be varied. Additionally we want to move away from fixed allocations per field whilst still enforcing the overall bit utilisation limits. We rely on the compiler to spot and optimise the accessor functions. Signed-off-by: Andy Whitcroft <apw@shadowen.org> Signed-off-by: Dave Hansen <haveblue@us.ibm.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.h19
1 files changed, 7 insertions, 12 deletions
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index b79633d3a97b..39e912708e2a 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -414,30 +414,25 @@ extern struct pglist_data contig_page_data;
414 414
415#include <asm/mmzone.h> 415#include <asm/mmzone.h>
416 416
417#endif /* !CONFIG_DISCONTIGMEM */
418
417#if BITS_PER_LONG == 32 || defined(ARCH_HAS_ATOMIC_UNSIGNED) 419#if BITS_PER_LONG == 32 || defined(ARCH_HAS_ATOMIC_UNSIGNED)
418/* 420/*
419 * with 32 bit page->flags field, we reserve 8 bits for node/zone info. 421 * with 32 bit page->flags field, we reserve 8 bits for node/zone info.
420 * there are 3 zones (2 bits) and this leaves 8-2=6 bits for nodes. 422 * there are 3 zones (2 bits) and this leaves 8-2=6 bits for nodes.
421 */ 423 */
422#define MAX_NODES_SHIFT 6 424#define FLAGS_RESERVED 8
425
423#elif BITS_PER_LONG == 64 426#elif BITS_PER_LONG == 64
424/* 427/*
425 * with 64 bit flags field, there's plenty of room. 428 * with 64 bit flags field, there's plenty of room.
426 */ 429 */
427#define MAX_NODES_SHIFT 10 430#define FLAGS_RESERVED 32
428#endif
429 431
430#endif /* !CONFIG_DISCONTIGMEM */ 432#else
431
432#if NODES_SHIFT > MAX_NODES_SHIFT
433#error NODES_SHIFT > MAX_NODES_SHIFT
434#endif
435 433
436/* There are currently 3 zones: DMA, Normal & Highmem, thus we need 2 bits */ 434#error BITS_PER_LONG not defined
437#define MAX_ZONES_SHIFT 2
438 435
439#if ZONES_SHIFT > MAX_ZONES_SHIFT
440#error ZONES_SHIFT > MAX_ZONES_SHIFT
441#endif 436#endif
442 437
443#endif /* !__ASSEMBLY__ */ 438#endif /* !__ASSEMBLY__ */