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