Lines Matching defs:migrate
3 * Memory Migration functionality - linux/mm/migrate.c
16 #include <linux/migrate.h>
56 #include <trace/events/migrate.h>
70 * drained them. Those pages will fail to migrate like other
721 * Common logic to directly migrate a single LRU page suitable for
1014 * cannot try to migrate this page.
1183 * Obtain the lock on page, remove all ptes and migrate the page
1229 * Compaction can migrate also non-LRU pages which are
1284 * This means that when we try to migrate hugepage whose subpages are
1413 * migrate_pages - migrate the pages specified in a list, to the free pages
1717 * pages to migrate. Since we are going to
2087 * Attempt to migrate a misplaced page to the specified destination
2100 * Don't migrate file pages that are mapped in multiple processes
2108 * Also do not migrate dirty pages as not all filesystems can move
2283 struct migrate_vma *migrate = walk->private;
2289 migrate->src[migrate->npages] = 0;
2290 migrate->dst[migrate->npages] = 0;
2291 migrate->npages++;
2297 migrate->src[migrate->npages] = MIGRATE_PFN_MIGRATE;
2298 migrate->dst[migrate->npages] = 0;
2299 migrate->npages++;
2300 migrate->cpages++;
2310 struct migrate_vma *migrate = walk->private;
2314 migrate->dst[migrate->npages] = 0;
2315 migrate->src[migrate->npages++] = 0;
2326 struct migrate_vma *migrate = walk->private;
2390 migrate->cpages++;
2406 if (!(migrate->flags &
2408 page->pgmap->owner != migrate->pgmap_owner)
2416 if (!(migrate->flags & MIGRATE_VMA_SELECT_SYSTEM))
2421 migrate->cpages++;
2424 page = vm_normal_page(migrate->vma, addr, pte);
2445 migrate->cpages++;
2488 migrate->dst[migrate->npages] = 0;
2489 migrate->src[migrate->npages++] = mpfn;
2509 * @migrate: migrate struct containing all migration information
2515 static void migrate_vma_collect(struct migrate_vma *migrate)
2524 mmu_notifier_range_init_migrate(&range, 0, migrate->vma,
2525 migrate->vma->vm_mm, migrate->start, migrate->end,
2526 migrate->pgmap_owner);
2529 walk_page_range(migrate->vma->vm_mm, migrate->start, migrate->end,
2530 &migrate_vma_walk_ops, migrate);
2533 migrate->end = migrate->start + (migrate->npages << PAGE_SHIFT);
2569 * avoid 2 racing thread trying to migrate back to CPU to enter
2591 * @migrate: migrate struct containing all migration information
2598 static void migrate_vma_prepare(struct migrate_vma *migrate)
2600 const unsigned long npages = migrate->npages;
2601 const unsigned long start = migrate->start;
2607 for (i = 0; (i < npages) && migrate->cpages; i++) {
2608 struct page *page = migrate_pfn_to_page(migrate->src[i]);
2614 if (!(migrate->src[i] & MIGRATE_PFN_LOCKED)) {
2624 migrate->src[i] = 0;
2625 migrate->cpages--;
2630 migrate->src[i] |= MIGRATE_PFN_LOCKED;
2643 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
2644 migrate->cpages--;
2647 migrate->src[i] = 0;
2649 migrate->cpages--;
2659 if (!migrate_vma_check_page(page, migrate->fault_page)) {
2661 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
2662 migrate->cpages--;
2670 migrate->src[i] = 0;
2672 migrate->cpages--;
2683 struct page *page = migrate_pfn_to_page(migrate->src[i]);
2685 if (!page || (migrate->src[i] & MIGRATE_PFN_MIGRATE))
2688 remove_migration_pte(page, migrate->vma, addr, page);
2690 migrate->src[i] = 0;
2699 * @migrate: migrate struct containing all migration information
2703 * cannot migrate them.
2708 static void migrate_vma_unmap(struct migrate_vma *migrate)
2711 const unsigned long npages = migrate->npages;
2712 const unsigned long start = migrate->start;
2716 struct page *page = migrate_pfn_to_page(migrate->src[i]);
2718 if (!page || !(migrate->src[i] & MIGRATE_PFN_MIGRATE))
2727 if (migrate_vma_check_page(page, migrate->fault_page))
2731 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
2732 migrate->cpages--;
2737 struct page *page = migrate_pfn_to_page(migrate->src[i]);
2739 if (!page || (migrate->src[i] & MIGRATE_PFN_MIGRATE))
2744 migrate->src[i] = 0;
2756 * migrate_vma_setup() - prepare to migrate a range of memory
2762 * Prepare to migrate a range of memory virtual address range by collecting all
2777 * Note that the caller does not have to migrate all the pages that are marked
2779 * device memory to system memory. If the caller cannot migrate a device page
2796 * then migrate_vma_pages() to migrate struct page information from the source
2797 * struct page to the destination struct page. If it fails to migrate the
2869 static void migrate_vma_insert_page(struct migrate_vma *migrate,
2875 struct vm_area_struct *vma = migrate->vma;
3002 * migrate_vma_pages() - migrate meta-data from src page to dst page
3003 * @migrate: migrate struct containing all migration information
3009 void migrate_vma_pages(struct migrate_vma *migrate)
3011 const unsigned long npages = migrate->npages;
3012 const unsigned long start = migrate->start;
3018 struct page *newpage = migrate_pfn_to_page(migrate->dst[i]);
3019 struct page *page = migrate_pfn_to_page(migrate->src[i]);
3024 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
3029 if (!(migrate->src[i] & MIGRATE_PFN_MIGRATE))
3037 migrate->vma->vm_mm,
3038 addr, migrate->end);
3041 migrate_vma_insert_page(migrate, addr, newpage,
3042 &migrate->src[i],
3043 &migrate->dst[i]);
3056 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
3064 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
3069 if (migrate->fault_page == page)
3076 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
3091 * @migrate: migrate struct containing all migration information
3100 void migrate_vma_finalize(struct migrate_vma *migrate)
3102 const unsigned long npages = migrate->npages;
3106 struct page *newpage = migrate_pfn_to_page(migrate->dst[i]);
3107 struct page *page = migrate_pfn_to_page(migrate->src[i]);
3117 if (!(migrate->src[i] & MIGRATE_PFN_MIGRATE) || !newpage) {