Lines Matching refs:pfn

318 static int check_pfn_span(unsigned long pfn, unsigned long nr_pages)  in check_pfn_span()  argument
335 if (!IS_ALIGNED(pfn | nr_pages, min_align)) in check_pfn_span()
345 struct page *pfn_to_online_page(unsigned long pfn) in pfn_to_online_page() argument
347 unsigned long nr = pfn_to_section_nr(pfn); in pfn_to_online_page()
362 if (IS_ENABLED(CONFIG_HAVE_ARCH_PFN_VALID) && !pfn_valid(pfn)) in pfn_to_online_page()
365 if (!pfn_section_valid(ms, pfn)) in pfn_to_online_page()
369 return pfn_to_page(pfn); in pfn_to_online_page()
377 pgmap = get_dev_pagemap(pfn, NULL); in pfn_to_online_page()
384 return pfn_to_page(pfn); in pfn_to_online_page()
388 int __add_pages(int nid, unsigned long pfn, unsigned long nr_pages, in __add_pages() argument
391 const unsigned long end_pfn = pfn + nr_pages; in __add_pages()
399 VM_BUG_ON(!mhp_range_allowed(PFN_PHYS(pfn), nr_pages * PAGE_SIZE, false)); in __add_pages()
405 if (altmap->base_pfn != pfn in __add_pages()
413 if (check_pfn_span(pfn, nr_pages)) { in __add_pages()
414 WARN(1, "Misaligned %s start: %#lx end: %#lx\n", __func__, pfn, pfn + nr_pages - 1); in __add_pages()
418 for (; pfn < end_pfn; pfn += cur_nr_pages) { in __add_pages()
420 cur_nr_pages = min(end_pfn - pfn, in __add_pages()
421 SECTION_ALIGN_UP(pfn + 1) - pfn); in __add_pages()
422 err = sparse_add_section(nid, pfn, cur_nr_pages, altmap, in __add_pages()
458 unsigned long pfn; in find_biggest_section_pfn() local
461 pfn = end_pfn - 1; in find_biggest_section_pfn()
462 for (; pfn >= start_pfn; pfn -= PAGES_PER_SUBSECTION) { in find_biggest_section_pfn()
463 if (unlikely(!pfn_to_online_page(pfn))) in find_biggest_section_pfn()
466 if (unlikely(pfn_to_nid(pfn) != nid)) in find_biggest_section_pfn()
469 if (zone != page_zone(pfn_to_page(pfn))) in find_biggest_section_pfn()
472 return pfn; in find_biggest_section_pfn()
481 unsigned long pfn; in shrink_zone_span() local
491 pfn = find_smallest_section_pfn(nid, zone, end_pfn, in shrink_zone_span()
493 if (pfn) { in shrink_zone_span()
494 zone->spanned_pages = zone_end_pfn(zone) - pfn; in shrink_zone_span()
495 zone->zone_start_pfn = pfn; in shrink_zone_span()
507 pfn = find_biggest_section_pfn(nid, zone, zone->zone_start_pfn, in shrink_zone_span()
509 if (pfn) in shrink_zone_span()
510 zone->spanned_pages = pfn - zone->zone_start_pfn + 1; in shrink_zone_span()
552 unsigned long pfn, cur_nr_pages; in remove_pfn_range_from_zone() local
555 for (pfn = start_pfn; pfn < end_pfn; pfn += cur_nr_pages) { in remove_pfn_range_from_zone()
560 min(end_pfn - pfn, SECTION_ALIGN_UP(pfn + 1) - pfn); in remove_pfn_range_from_zone()
561 page_init_poison(pfn_to_page(pfn), in remove_pfn_range_from_zone()
592 void __remove_pages(unsigned long pfn, unsigned long nr_pages, in __remove_pages() argument
595 const unsigned long end_pfn = pfn + nr_pages; in __remove_pages()
598 if (check_pfn_span(pfn, nr_pages)) { in __remove_pages()
599 WARN(1, "Misaligned %s start: %#lx end: %#lx\n", __func__, pfn, pfn + nr_pages - 1); in __remove_pages()
603 for (; pfn < end_pfn; pfn += cur_nr_pages) { in __remove_pages()
606 cur_nr_pages = min(end_pfn - pfn, in __remove_pages()
607 SECTION_ALIGN_UP(pfn + 1) - pfn); in __remove_pages()
608 sparse_remove_section(pfn, cur_nr_pages, altmap); in __remove_pages()
660 unsigned long pfn; in online_pages_range() local
671 for (pfn = start_pfn; pfn < end_pfn;) { in online_pages_range()
672 struct page *page = pfn_to_page(pfn); in online_pages_range()
682 if (pfn) in online_pages_range()
683 order = min_t(int, MAX_PAGE_ORDER, __ffs(pfn)); in online_pages_range()
695 pfn += (1UL << order); in online_pages_range()
750 static void section_taint_zone_device(unsigned long pfn) in section_taint_zone_device() argument
752 struct mem_section *ms = __pfn_to_section(pfn); in section_taint_zone_device()
757 static inline void section_taint_zone_device(unsigned long pfn) in section_taint_zone_device() argument
987 unsigned long pfn, in auto_movable_zone_for_pfn() argument
1013 pfn = ALIGN_DOWN(pfn, group->d.unit_pages); in auto_movable_zone_for_pfn()
1014 end_pfn = pfn + group->d.unit_pages; in auto_movable_zone_for_pfn()
1015 for (; pfn < end_pfn; pfn += PAGES_PER_SECTION) { in auto_movable_zone_for_pfn()
1016 page = pfn_to_online_page(pfn); in auto_movable_zone_for_pfn()
1043 return default_kernel_zone_for_pfn(nid, pfn, nr_pages); in auto_movable_zone_for_pfn()
1111 int mhp_init_memmap_on_memory(unsigned long pfn, unsigned long nr_pages, in mhp_init_memmap_on_memory() argument
1114 unsigned long end_pfn = pfn + nr_pages; in mhp_init_memmap_on_memory()
1117 ret = kasan_add_zero_shadow(__va(PFN_PHYS(pfn)), PFN_PHYS(nr_pages)); in mhp_init_memmap_on_memory()
1128 page_init_poison(pfn_to_page(pfn), sizeof(struct page) * nr_pages); in mhp_init_memmap_on_memory()
1130 move_pfn_range_to_zone(zone, pfn, nr_pages, NULL, MIGRATE_UNMOVABLE); in mhp_init_memmap_on_memory()
1133 struct page *page = pfn_to_page(pfn + i); in mhp_init_memmap_on_memory()
1145 online_mem_sections(pfn, ALIGN_DOWN(end_pfn, PAGES_PER_SECTION)); in mhp_init_memmap_on_memory()
1150 void mhp_deinit_memmap_on_memory(unsigned long pfn, unsigned long nr_pages) in mhp_deinit_memmap_on_memory() argument
1152 unsigned long end_pfn = pfn + nr_pages; in mhp_deinit_memmap_on_memory()
1160 offline_mem_sections(pfn, ALIGN_DOWN(end_pfn, PAGES_PER_SECTION)); in mhp_deinit_memmap_on_memory()
1166 remove_pfn_range_from_zone(page_zone(pfn_to_page(pfn)), pfn, nr_pages); in mhp_deinit_memmap_on_memory()
1167 kasan_remove_zero_shadow(__va(PFN_PHYS(pfn)), PFN_PHYS(nr_pages)); in mhp_deinit_memmap_on_memory()
1173 int online_pages(unsigned long pfn, unsigned long nr_pages, in online_pages() argument
1189 if (WARN_ON_ONCE(!nr_pages || !pageblock_aligned(pfn) || in online_pages()
1190 !IS_ALIGNED(pfn + nr_pages, PAGES_PER_SECTION))) in online_pages()
1195 move_pfn_range_to_zone(zone, pfn, nr_pages, NULL, MIGRATE_ISOLATE); in online_pages()
1197 arg.start_pfn = pfn; in online_pages()
1224 online_pages_range(pfn, nr_pages); in online_pages()
1225 adjust_present_page_count(pfn_to_page(pfn), group, nr_pages); in online_pages()
1232 undo_isolate_page_range(pfn, pfn + nr_pages, MIGRATE_MOVABLE); in online_pages()
1255 (unsigned long long) pfn << PAGE_SHIFT, in online_pages()
1256 (((unsigned long long) pfn + nr_pages) << PAGE_SHIFT) - 1); in online_pages()
1258 remove_pfn_range_from_zone(zone, pfn, nr_pages); in online_pages()
1757 unsigned long pfn; in scan_movable_pages() local
1759 for (pfn = start; pfn < end; pfn++) { in scan_movable_pages()
1763 if (!pfn_valid(pfn)) in scan_movable_pages()
1765 page = pfn_to_page(pfn); in scan_movable_pages()
1792 pfn |= folio_nr_pages(folio) - 1; in scan_movable_pages()
1796 *movable_pfn = pfn; in scan_movable_pages()
1803 unsigned long pfn; in do_migrate_range() local
1808 for (pfn = start_pfn; pfn < end_pfn; pfn++) { in do_migrate_range()
1811 if (!pfn_valid(pfn)) in do_migrate_range()
1813 page = pfn_to_page(pfn); in do_migrate_range()
1823 pfn = folio_pfn(folio) + folio_nr_pages(folio) - 1; in do_migrate_range()
1830 unmap_poisoned_folio(folio, pfn, false); in do_migrate_range()
1957 unsigned long pfn, managed_pages, system_ram_pages = 0; in offline_pages() local
2031 pfn = start_pfn; in offline_pages()
2046 ret = scan_movable_pages(pfn, end_pfn, &pfn); in offline_pages()
2052 do_migrate_range(pfn, end_pfn); in offline_pages()