Lines Matching refs:zone
347 static unsigned long find_smallest_section_pfn(int nid, struct zone *zone, in find_smallest_section_pfn() argument
358 if (zone != page_zone(pfn_to_page(start_pfn))) in find_smallest_section_pfn()
368 static unsigned long find_biggest_section_pfn(int nid, struct zone *zone, in find_biggest_section_pfn() argument
383 if (zone != page_zone(pfn_to_page(pfn))) in find_biggest_section_pfn()
392 static void shrink_zone_span(struct zone *zone, unsigned long start_pfn, in shrink_zone_span() argument
396 int nid = zone_to_nid(zone); in shrink_zone_span()
398 if (zone->zone_start_pfn == start_pfn) { in shrink_zone_span()
405 pfn = find_smallest_section_pfn(nid, zone, end_pfn, in shrink_zone_span()
406 zone_end_pfn(zone)); in shrink_zone_span()
408 zone->spanned_pages = zone_end_pfn(zone) - pfn; in shrink_zone_span()
409 zone->zone_start_pfn = pfn; in shrink_zone_span()
411 zone->zone_start_pfn = 0; in shrink_zone_span()
412 zone->spanned_pages = 0; in shrink_zone_span()
414 } else if (zone_end_pfn(zone) == end_pfn) { in shrink_zone_span()
421 pfn = find_biggest_section_pfn(nid, zone, zone->zone_start_pfn, in shrink_zone_span()
424 zone->spanned_pages = pfn - zone->zone_start_pfn + 1; in shrink_zone_span()
426 zone->zone_start_pfn = 0; in shrink_zone_span()
427 zone->spanned_pages = 0; in shrink_zone_span()
435 struct zone *zone; in update_pgdat_span() local
437 for (zone = pgdat->node_zones; in update_pgdat_span()
438 zone < pgdat->node_zones + MAX_NR_ZONES; zone++) { in update_pgdat_span()
439 unsigned long end_pfn = zone_end_pfn(zone); in update_pgdat_span()
442 if (!zone->spanned_pages) in update_pgdat_span()
445 node_start_pfn = zone->zone_start_pfn; in update_pgdat_span()
452 if (zone->zone_start_pfn < node_start_pfn) in update_pgdat_span()
453 node_start_pfn = zone->zone_start_pfn; in update_pgdat_span()
460 void __ref remove_pfn_range_from_zone(struct zone *zone, in remove_pfn_range_from_zone() argument
465 struct pglist_data *pgdat = zone->zone_pgdat; in remove_pfn_range_from_zone()
484 if (zone_is_zone_device(zone)) in remove_pfn_range_from_zone()
487 clear_zone_contiguous(zone); in remove_pfn_range_from_zone()
489 shrink_zone_span(zone, start_pfn, start_pfn + nr_pages); in remove_pfn_range_from_zone()
492 set_zone_contiguous(zone); in remove_pfn_range_from_zone()
618 struct zone *zone, struct memory_notify *arg) in node_states_check_changes_online() argument
620 int nid = zone_to_nid(zone); in node_states_check_changes_online()
627 if (zone_idx(zone) <= ZONE_NORMAL && !node_state(nid, N_NORMAL_MEMORY)) in node_states_check_changes_online()
640 static void __meminit resize_zone_range(struct zone *zone, unsigned long start_pfn, in resize_zone_range() argument
643 unsigned long old_end_pfn = zone_end_pfn(zone); in resize_zone_range()
645 if (zone_is_empty(zone) || start_pfn < zone->zone_start_pfn) in resize_zone_range()
646 zone->zone_start_pfn = start_pfn; in resize_zone_range()
648 zone->spanned_pages = max(start_pfn + nr_pages, old_end_pfn) - zone->zone_start_pfn; in resize_zone_range()
679 void __ref move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, in move_pfn_range_to_zone() argument
683 struct pglist_data *pgdat = zone->zone_pgdat; in move_pfn_range_to_zone()
686 clear_zone_contiguous(zone); in move_pfn_range_to_zone()
688 if (zone_is_empty(zone)) in move_pfn_range_to_zone()
689 init_currently_empty_zone(zone, start_pfn, nr_pages); in move_pfn_range_to_zone()
690 resize_zone_range(zone, start_pfn, nr_pages); in move_pfn_range_to_zone()
699 if (zone_is_zone_device(zone)) { in move_pfn_range_to_zone()
712 memmap_init_range(nr_pages, nid, zone_idx(zone), start_pfn, 0, in move_pfn_range_to_zone()
715 set_zone_contiguous(zone); in move_pfn_range_to_zone()
724 struct zone *zone) in auto_movable_stats_account_zone() argument
726 if (zone_idx(zone) == ZONE_MOVABLE) { in auto_movable_stats_account_zone()
727 stats->movable_pages += zone->present_pages; in auto_movable_stats_account_zone()
729 stats->kernel_early_pages += zone->present_early_pages; in auto_movable_stats_account_zone()
735 stats->movable_pages += zone->cma_pages; in auto_movable_stats_account_zone()
736 stats->kernel_early_pages -= zone->cma_pages; in auto_movable_stats_account_zone()
779 struct zone *zone; in auto_movable_can_online_movable() local
785 for_each_populated_zone(zone) in auto_movable_can_online_movable()
786 auto_movable_stats_account_zone(&stats, zone); in auto_movable_can_online_movable()
789 zone = pgdat->node_zones + i; in auto_movable_can_online_movable()
790 if (populated_zone(zone)) in auto_movable_can_online_movable()
791 auto_movable_stats_account_zone(&stats, zone); in auto_movable_can_online_movable()
826 static struct zone *default_kernel_zone_for_pfn(int nid, unsigned long start_pfn, in default_kernel_zone_for_pfn()
833 struct zone *zone = &pgdat->node_zones[zid]; in default_kernel_zone_for_pfn() local
835 if (zone_intersects(zone, start_pfn, nr_pages)) in default_kernel_zone_for_pfn()
836 return zone; in default_kernel_zone_for_pfn()
892 static struct zone *auto_movable_zone_for_pfn(int nid, in auto_movable_zone_for_pfn()
953 static inline struct zone *default_zone_for_pfn(int nid, unsigned long start_pfn, in default_zone_for_pfn()
956 struct zone *kernel_zone = default_kernel_zone_for_pfn(nid, start_pfn, in default_zone_for_pfn()
958 struct zone *movable_zone = &NODE_DATA(nid)->node_zones[ZONE_MOVABLE]; in default_zone_for_pfn()
977 struct zone *zone_for_pfn_range(int online_type, int nid, in zone_for_pfn_range()
1000 struct zone *zone = page_zone(page); in adjust_present_page_count() local
1001 const bool movable = zone_idx(zone) == ZONE_MOVABLE; in adjust_present_page_count()
1008 zone->present_early_pages += nr_pages; in adjust_present_page_count()
1009 zone->present_pages += nr_pages; in adjust_present_page_count()
1010 zone->zone_pgdat->node_present_pages += nr_pages; in adjust_present_page_count()
1019 struct zone *zone) in mhp_init_memmap_on_memory() argument
1028 move_pfn_range_to_zone(zone, pfn, nr_pages, NULL, MIGRATE_UNMOVABLE); in mhp_init_memmap_on_memory()
1062 struct zone *zone, struct memory_group *group) in online_pages() argument
1066 const int nid = zone_to_nid(zone); in online_pages()
1085 move_pfn_range_to_zone(zone, pfn, nr_pages, NULL, MIGRATE_ISOLATE); in online_pages()
1089 node_states_check_changes_online(nr_pages, zone, &arg); in online_pages()
1100 spin_lock_irqsave(&zone->lock, flags); in online_pages()
1101 zone->nr_isolate_pageblock += nr_pages / pageblock_nr_pages; in online_pages()
1102 spin_unlock_irqrestore(&zone->lock, flags); in online_pages()
1109 if (!populated_zone(zone)) { in online_pages()
1111 setup_zone_pageset(zone); in online_pages()
1130 shuffle_zone(zone); in online_pages()
1149 remove_pfn_range_from_zone(zone, pfn, nr_pages); in online_pages()
1156 struct zone *z; in reset_node_present_pages()
1596 struct zone *test_pages_in_a_zone(unsigned long start_pfn, in test_pages_in_a_zone()
1600 struct zone *zone = NULL; in test_pages_in_a_zone() local
1612 if (zone && !zone_spans_pfn(zone, pfn)) in test_pages_in_a_zone()
1615 if (zone && page_zone(page) != zone) in test_pages_in_a_zone()
1617 zone = page_zone(page); in test_pages_in_a_zone()
1621 return zone; in test_pages_in_a_zone()
1791 struct zone *zone, struct memory_notify *arg) in node_states_check_changes_offline() argument
1793 struct pglist_data *pgdat = zone->zone_pgdat; in node_states_check_changes_offline()
1810 if (zone_idx(zone) <= ZONE_NORMAL && nr_pages >= present_pages) in node_states_check_changes_offline()
1811 arg->status_change_nid_normal = zone_to_nid(zone); in node_states_check_changes_offline()
1825 arg->status_change_nid = zone_to_nid(zone); in node_states_check_changes_offline()
1852 struct zone *zone; in offline_pages() local
1889 zone = test_pages_in_a_zone(start_pfn, end_pfn); in offline_pages()
1890 if (!zone) { in offline_pages()
1895 node = zone_to_nid(zone); in offline_pages()
1901 zone_pcp_disable(zone); in offline_pages()
1915 node_states_check_changes_offline(nr_pages, zone, &arg); in offline_pages()
1974 spin_lock_irqsave(&zone->lock, flags); in offline_pages()
1975 zone->nr_isolate_pageblock -= nr_pages / pageblock_nr_pages; in offline_pages()
1976 spin_unlock_irqrestore(&zone->lock, flags); in offline_pages()
1979 zone_pcp_enable(zone); in offline_pages()
1988 if (!populated_zone(zone)) { in offline_pages()
1989 zone_pcp_reset(zone); in offline_pages()
2002 remove_pfn_range_from_zone(zone, start_pfn, nr_pages); in offline_pages()
2011 zone_pcp_enable(zone); in offline_pages()