1/*
2 * linux/mm/mmzone.c
3 *
4 * management codes for pgdats and zones.
5 */
6
7
8#include <linux/stddef.h>
9#include <linux/mmzone.h>
10#include <linux/module.h>
11
12struct pglist_data *first_online_pgdat(void)
13{
14	return NODE_DATA(first_online_node);
15}
16
17struct pglist_data *next_online_pgdat(struct pglist_data *pgdat)
18{
19	int nid = next_online_node(pgdat->node_id);
20
21	if (nid == MAX_NUMNODES)
22		return NULL;
23	return NODE_DATA(nid);
24}
25
26/*
27 * next_zone - helper magic for for_each_zone()
28 */
29struct zone *next_zone(struct zone *zone)
30{
31	pg_data_t *pgdat = zone->zone_pgdat;
32
33	if (zone < pgdat->node_zones + MAX_NR_ZONES - 1)
34		zone++;
35	else {
36		pgdat = next_online_pgdat(pgdat);
37		if (pgdat)
38			zone = pgdat->node_zones;
39		else
40			zone = NULL;
41	}
42	return zone;
43}
44