]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - mm/mmzone.c
[PATCH] uninline zone helpers
[mv-sheeva.git] / mm / mmzone.c
diff --git a/mm/mmzone.c b/mm/mmzone.c
new file mode 100644 (file)
index 0000000..b022370
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * linux/mm/mmzone.c
+ *
+ * management codes for pgdats and zones.
+ */
+
+
+#include <linux/config.h>
+#include <linux/stddef.h>
+#include <linux/mmzone.h>
+#include <linux/module.h>
+
+struct pglist_data *first_online_pgdat(void)
+{
+       return NODE_DATA(first_online_node);
+}
+
+EXPORT_SYMBOL(first_online_pgdat);
+
+struct pglist_data *next_online_pgdat(struct pglist_data *pgdat)
+{
+       int nid = next_online_node(pgdat->node_id);
+
+       if (nid == MAX_NUMNODES)
+               return NULL;
+       return NODE_DATA(nid);
+}
+EXPORT_SYMBOL(next_online_pgdat);
+
+
+/*
+ * next_zone - helper magic for for_each_zone()
+ */
+struct zone *next_zone(struct zone *zone)
+{
+       pg_data_t *pgdat = zone->zone_pgdat;
+
+       if (zone < pgdat->node_zones + MAX_NR_ZONES - 1)
+               zone++;
+       else {
+               pgdat = next_online_pgdat(pgdat);
+               if (pgdat)
+                       zone = pgdat->node_zones;
+               else
+                       zone = NULL;
+       }
+       return zone;
+}
+EXPORT_SYMBOL(next_zone);
+