* [PATCH] count defined zones to size ZONE_SHIFT
@ 2006-09-20 13:54 Andy Whitcroft
0 siblings, 0 replies; only message in thread
From: Andy Whitcroft @ 2006-09-20 13:54 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
With the recent changes allowing ZONE_DMA etc to all be optional,
the ZONE_SHIFT calculation is very hard to follow. Playing with
the compiler, it seems that the following is portable and IMO
much easier to read and understand.
-apw
=== 8< ===
count defined zones to size ZONE_SHIFT
Simplify calculation of the number of bits we need for ZONES_SHIFT
by adding up the definitions of the defined zones. We make use of
the property of defined(X) that its value is one when X is defined
and zero otherwise. From the GCC manuals:
"defined name and defined (name) are both expressions whose
value is 1 if name is defined as a macro at the current point
in the program, and 0 otherwise."
Signed-off-by: Andy Whitcroft <apw@shadowen.org>
---
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index b7836c5..9e339da 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -149,15 +149,27 @@ #endif
* match the requested limits. See gfp_zone() in include/linux/gfp.h
*/
-#if !defined(CONFIG_ZONE_DMA32) && !defined(CONFIG_HIGHMEM)
-#if !defined(CONFIG_ZONE_DMA)
+/*
+ * Count the active zones. Note that the use of defined(X) outside
+ * #if and family is not necessarily defined so ensure we cannot use
+ * it later. Use __ZONE_COUNT to work out how many shift bits we need.
+ */
+#define __ZONE_COUNT ( \
+ defined(CONFIG_ZONE_DMA) \
+ + defined(CONFIG_ZONE_DMA32) \
+ + 1 \
+ + defined(CONFIG_HIGHMEM) \
+)
+#if __ZONE_COUNT < 2
#define ZONES_SHIFT 0
-#else
+#elif __ZONE_COUNT <= 2
#define ZONES_SHIFT 1
-#endif
-#else
+#elif __ZONE_COUNT <= 4
#define ZONES_SHIFT 2
+#else
+#error ZONES_SHIFT -- too many zones configured adjust calculation
#endif
+#undef __ZONE_COUNT
struct zone {
/* Fields commonly accessed by the page allocator */
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2006-09-20 13:55 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-20 13:54 [PATCH] count defined zones to size ZONE_SHIFT Andy Whitcroft
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox