Lines Matching refs:pfn

224 static int check_pfn_span(unsigned long pfn, unsigned long nr_pages,  in check_pfn_span()  argument
242 if (!IS_ALIGNED(pfn, min_align) in check_pfn_span()
245 reason, pfn, pfn + nr_pages - 1); in check_pfn_span()
256 struct page *pfn_to_online_page(unsigned long pfn) in pfn_to_online_page() argument
258 unsigned long nr = pfn_to_section_nr(pfn); in pfn_to_online_page()
273 if (IS_ENABLED(CONFIG_HAVE_ARCH_PFN_VALID) && !pfn_valid(pfn)) in pfn_to_online_page()
276 if (!pfn_section_valid(ms, pfn)) in pfn_to_online_page()
280 return pfn_to_page(pfn); in pfn_to_online_page()
288 pgmap = get_dev_pagemap(pfn, NULL); in pfn_to_online_page()
295 return pfn_to_page(pfn); in pfn_to_online_page()
305 int __ref __add_pages(int nid, unsigned long pfn, unsigned long nr_pages, in __add_pages() argument
308 const unsigned long end_pfn = pfn + nr_pages; in __add_pages()
316 VM_BUG_ON(!mhp_range_allowed(PFN_PHYS(pfn), nr_pages * PAGE_SIZE, false)); in __add_pages()
322 if (altmap->base_pfn != pfn in __add_pages()
330 err = check_pfn_span(pfn, nr_pages, "add"); in __add_pages()
334 for (; pfn < end_pfn; pfn += cur_nr_pages) { in __add_pages()
336 cur_nr_pages = min(end_pfn - pfn, in __add_pages()
337 SECTION_ALIGN_UP(pfn + 1) - pfn); in __add_pages()
338 err = sparse_add_section(nid, pfn, cur_nr_pages, altmap); in __add_pages()
373 unsigned long pfn; in find_biggest_section_pfn() local
376 pfn = end_pfn - 1; in find_biggest_section_pfn()
377 for (; pfn >= start_pfn; pfn -= PAGES_PER_SUBSECTION) { in find_biggest_section_pfn()
378 if (unlikely(!pfn_to_online_page(pfn))) in find_biggest_section_pfn()
381 if (unlikely(pfn_to_nid(pfn) != nid)) in find_biggest_section_pfn()
384 if (zone != page_zone(pfn_to_page(pfn))) in find_biggest_section_pfn()
387 return pfn; in find_biggest_section_pfn()
396 unsigned long pfn; in shrink_zone_span() local
406 pfn = find_smallest_section_pfn(nid, zone, end_pfn, in shrink_zone_span()
408 if (pfn) { in shrink_zone_span()
409 zone->spanned_pages = zone_end_pfn(zone) - pfn; in shrink_zone_span()
410 zone->zone_start_pfn = pfn; in shrink_zone_span()
422 pfn = find_biggest_section_pfn(nid, zone, zone->zone_start_pfn, in shrink_zone_span()
424 if (pfn) in shrink_zone_span()
425 zone->spanned_pages = pfn - zone->zone_start_pfn + 1; in shrink_zone_span()
467 unsigned long pfn, cur_nr_pages; in remove_pfn_range_from_zone() local
470 for (pfn = start_pfn; pfn < end_pfn; pfn += cur_nr_pages) { in remove_pfn_range_from_zone()
475 min(end_pfn - pfn, SECTION_ALIGN_UP(pfn + 1) - pfn); in remove_pfn_range_from_zone()
476 page_init_poison(pfn_to_page(pfn), in remove_pfn_range_from_zone()
496 static void __remove_section(unsigned long pfn, unsigned long nr_pages, in __remove_section() argument
500 struct mem_section *ms = __pfn_to_section(pfn); in __remove_section()
505 sparse_remove_section(ms, pfn, nr_pages, map_offset, altmap); in __remove_section()
519 void __remove_pages(unsigned long pfn, unsigned long nr_pages, in __remove_pages() argument
522 const unsigned long end_pfn = pfn + nr_pages; in __remove_pages()
528 if (check_pfn_span(pfn, nr_pages, "remove")) in __remove_pages()
531 for (; pfn < end_pfn; pfn += cur_nr_pages) { in __remove_pages()
534 cur_nr_pages = min(end_pfn - pfn, in __remove_pages()
535 SECTION_ALIGN_UP(pfn + 1) - pfn); in __remove_pages()
536 __remove_section(pfn, cur_nr_pages, map_offset, altmap); in __remove_pages()
599 unsigned long pfn; in online_pages_range() local
610 for (pfn = start_pfn; pfn < end_pfn;) { in online_pages_range()
611 int order = min(MAX_ORDER - 1UL, __ffs(pfn)); in online_pages_range()
613 (*online_page_callback)(pfn_to_page(pfn), order); in online_pages_range()
614 pfn += (1UL << order); in online_pages_range()
676 static void section_taint_zone_device(unsigned long pfn) in section_taint_zone_device() argument
678 struct mem_section *ms = __pfn_to_section(pfn); in section_taint_zone_device()
907 unsigned long pfn, in auto_movable_zone_for_pfn() argument
933 pfn = ALIGN_DOWN(pfn, group->d.unit_pages); in auto_movable_zone_for_pfn()
934 end_pfn = pfn + group->d.unit_pages; in auto_movable_zone_for_pfn()
935 for (; pfn < end_pfn; pfn += PAGES_PER_SECTION) { in auto_movable_zone_for_pfn()
936 page = pfn_to_online_page(pfn); in auto_movable_zone_for_pfn()
963 return default_kernel_zone_for_pfn(nid, pfn, nr_pages); in auto_movable_zone_for_pfn()
1031 int mhp_init_memmap_on_memory(unsigned long pfn, unsigned long nr_pages, in mhp_init_memmap_on_memory() argument
1034 unsigned long end_pfn = pfn + nr_pages; in mhp_init_memmap_on_memory()
1037 ret = kasan_add_zero_shadow(__va(PFN_PHYS(pfn)), PFN_PHYS(nr_pages)); in mhp_init_memmap_on_memory()
1041 move_pfn_range_to_zone(zone, pfn, nr_pages, NULL, MIGRATE_UNMOVABLE); in mhp_init_memmap_on_memory()
1049 online_mem_sections(pfn, ALIGN_DOWN(end_pfn, PAGES_PER_SECTION)); in mhp_init_memmap_on_memory()
1054 void mhp_deinit_memmap_on_memory(unsigned long pfn, unsigned long nr_pages) in mhp_deinit_memmap_on_memory() argument
1056 unsigned long end_pfn = pfn + nr_pages; in mhp_deinit_memmap_on_memory()
1064 offline_mem_sections(pfn, ALIGN_DOWN(end_pfn, PAGES_PER_SECTION)); in mhp_deinit_memmap_on_memory()
1070 remove_pfn_range_from_zone(page_zone(pfn_to_page(pfn)), pfn, nr_pages); in mhp_deinit_memmap_on_memory()
1071 kasan_remove_zero_shadow(__va(PFN_PHYS(pfn)), PFN_PHYS(nr_pages)); in mhp_deinit_memmap_on_memory()
1074 int __ref online_pages(unsigned long pfn, unsigned long nr_pages, in online_pages() argument
1091 !IS_ALIGNED(pfn, pageblock_nr_pages) || in online_pages()
1092 !IS_ALIGNED(pfn + nr_pages, PAGES_PER_SECTION))) in online_pages()
1098 move_pfn_range_to_zone(zone, pfn, nr_pages, NULL, MIGRATE_ISOLATE); in online_pages()
1100 arg.start_pfn = pfn; in online_pages()
1127 online_pages_range(pfn, nr_pages); in online_pages()
1128 adjust_present_page_count(pfn_to_page(pfn), group, nr_pages); in online_pages()
1135 undo_isolate_page_range(pfn, pfn + nr_pages, MIGRATE_MOVABLE); in online_pages()
1159 (unsigned long long) pfn << PAGE_SHIFT, in online_pages()
1160 (((unsigned long long) pfn + nr_pages) << PAGE_SHIFT) - 1); in online_pages()
1162 remove_pfn_range_from_zone(zone, pfn, nr_pages); in online_pages()
1606 unsigned long pfn, sec_end_pfn; in test_pages_in_a_zone() local
1610 for (pfn = start_pfn, sec_end_pfn = SECTION_ALIGN_UP(start_pfn + 1); in test_pages_in_a_zone()
1611 pfn < end_pfn; in test_pages_in_a_zone()
1612 pfn = sec_end_pfn, sec_end_pfn += PAGES_PER_SECTION) { in test_pages_in_a_zone()
1614 if (!present_section_nr(pfn_to_section_nr(pfn))) in test_pages_in_a_zone()
1616 for (; pfn < sec_end_pfn && pfn < end_pfn; in test_pages_in_a_zone()
1617 pfn += MAX_ORDER_NR_PAGES) { in test_pages_in_a_zone()
1619 if (zone && !zone_spans_pfn(zone, pfn)) in test_pages_in_a_zone()
1621 page = pfn_to_page(pfn); in test_pages_in_a_zone()
1645 unsigned long pfn; in scan_movable_pages() local
1647 for (pfn = start; pfn < end; pfn++) { in scan_movable_pages()
1651 if (!pfn_valid(pfn)) in scan_movable_pages()
1653 page = pfn_to_page(pfn); in scan_movable_pages()
1681 pfn += skip - 1; in scan_movable_pages()
1685 *movable_pfn = pfn; in scan_movable_pages()
1692 unsigned long pfn; in do_migrate_range() local
1699 for (pfn = start_pfn; pfn < end_pfn; pfn++) { in do_migrate_range()
1700 if (!pfn_valid(pfn)) in do_migrate_range()
1702 page = pfn_to_page(pfn); in do_migrate_range()
1706 pfn = page_to_pfn(head) + compound_nr(head) - 1; in do_migrate_range()
1710 pfn = page_to_pfn(head) + thp_nr_pages(page) - 1; in do_migrate_range()
1745 pr_warn("failed to isolate pfn %lx\n", pfn); in do_migrate_range()
1876 unsigned long pfn, system_ram_pages = 0; in offline_pages() local
1951 pfn = start_pfn; in offline_pages()
1961 ret = scan_movable_pages(pfn, end_pfn, &pfn); in offline_pages()
1967 do_migrate_range(pfn, end_pfn); in offline_pages()