• Home
  • Raw
  • Download

Lines Matching full: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 in migrate_prep()
714 * Common logic to directly migrate a single LRU page suitable for
1007 * cannot try to migrate this page. in move_to_new_page()
1173 * Obtain the lock on page, remove all ptes and migrate the page
1219 * Compaction can migrate also non-LRU pages which are in unmap_and_move()
1274 * This means that when we try to migrate hugepage whose subpages are
1403 * migrate_pages - migrate the pages specified in a list, to the free pages
1706 * pages to migrate. Since we are going to in move_pages_and_store_status()
1720 * Migrate an array of page address onto an array of nodes and fill
2076 * Attempt to migrate a misplaced page to the specified destination
2089 * Don't migrate file pages that are mapped in multiple processes in migrate_misplaced_page()
2097 * Also do not migrate dirty pages as not all filesystems can move in migrate_misplaced_page()
2272 struct migrate_vma *migrate = walk->private; in migrate_vma_collect_hole() local
2278 migrate->src[migrate->npages] = 0; in migrate_vma_collect_hole()
2279 migrate->dst[migrate->npages] = 0; in migrate_vma_collect_hole()
2280 migrate->npages++; in migrate_vma_collect_hole()
2286 migrate->src[migrate->npages] = MIGRATE_PFN_MIGRATE; in migrate_vma_collect_hole()
2287 migrate->dst[migrate->npages] = 0; in migrate_vma_collect_hole()
2288 migrate->npages++; in migrate_vma_collect_hole()
2289 migrate->cpages++; in migrate_vma_collect_hole()
2299 struct migrate_vma *migrate = walk->private; in migrate_vma_collect_skip() local
2303 migrate->dst[migrate->npages] = 0; in migrate_vma_collect_skip()
2304 migrate->src[migrate->npages++] = 0; in migrate_vma_collect_skip()
2315 struct migrate_vma *migrate = walk->private; in migrate_vma_collect_pmd() local
2379 migrate->cpages++; in migrate_vma_collect_pmd()
2395 if (!(migrate->flags & in migrate_vma_collect_pmd()
2397 page->pgmap->owner != migrate->pgmap_owner) in migrate_vma_collect_pmd()
2405 if (!(migrate->flags & MIGRATE_VMA_SELECT_SYSTEM)) in migrate_vma_collect_pmd()
2410 migrate->cpages++; in migrate_vma_collect_pmd()
2413 page = vm_normal_page(migrate->vma, addr, pte); in migrate_vma_collect_pmd()
2434 migrate->cpages++; in migrate_vma_collect_pmd()
2477 migrate->dst[migrate->npages] = 0; in migrate_vma_collect_pmd()
2478 migrate->src[migrate->npages++] = mpfn; in migrate_vma_collect_pmd()
2497 * @migrate: migrate struct containing all migration information
2503 static void migrate_vma_collect(struct migrate_vma *migrate) in migrate_vma_collect() argument
2512 mmu_notifier_range_init_migrate(&range, 0, migrate->vma, in migrate_vma_collect()
2513 migrate->vma->vm_mm, migrate->start, migrate->end, in migrate_vma_collect()
2514 migrate->pgmap_owner); in migrate_vma_collect()
2517 walk_page_range(migrate->vma->vm_mm, migrate->start, migrate->end, in migrate_vma_collect()
2518 &migrate_vma_walk_ops, migrate); in migrate_vma_collect()
2521 migrate->end = migrate->start + (migrate->npages << PAGE_SHIFT); in migrate_vma_collect()
2557 * avoid 2 racing thread trying to migrate back to CPU to enter in migrate_vma_check_page()
2579 * @migrate: migrate struct containing all migration information
2586 static void migrate_vma_prepare(struct migrate_vma *migrate) in migrate_vma_prepare() argument
2588 const unsigned long npages = migrate->npages; in migrate_vma_prepare()
2589 const unsigned long start = migrate->start; in migrate_vma_prepare()
2595 for (i = 0; (i < npages) && migrate->cpages; i++) { in migrate_vma_prepare()
2596 struct page *page = migrate_pfn_to_page(migrate->src[i]); in migrate_vma_prepare()
2602 if (!(migrate->src[i] & MIGRATE_PFN_LOCKED)) { in migrate_vma_prepare()
2612 migrate->src[i] = 0; in migrate_vma_prepare()
2613 migrate->cpages--; in migrate_vma_prepare()
2618 migrate->src[i] |= MIGRATE_PFN_LOCKED; in migrate_vma_prepare()
2631 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE; in migrate_vma_prepare()
2632 migrate->cpages--; in migrate_vma_prepare()
2635 migrate->src[i] = 0; in migrate_vma_prepare()
2637 migrate->cpages--; in migrate_vma_prepare()
2647 if (!migrate_vma_check_page(page, migrate->fault_page)) { in migrate_vma_prepare()
2649 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE; in migrate_vma_prepare()
2650 migrate->cpages--; in migrate_vma_prepare()
2658 migrate->src[i] = 0; in migrate_vma_prepare()
2660 migrate->cpages--; in migrate_vma_prepare()
2671 struct page *page = migrate_pfn_to_page(migrate->src[i]); in migrate_vma_prepare()
2673 if (!page || (migrate->src[i] & MIGRATE_PFN_MIGRATE)) in migrate_vma_prepare()
2676 remove_migration_pte(page, migrate->vma, addr, page); in migrate_vma_prepare()
2678 migrate->src[i] = 0; in migrate_vma_prepare()
2687 * @migrate: migrate struct containing all migration information
2691 * cannot migrate them.
2696 static void migrate_vma_unmap(struct migrate_vma *migrate) in migrate_vma_unmap() argument
2699 const unsigned long npages = migrate->npages; in migrate_vma_unmap()
2700 const unsigned long start = migrate->start; in migrate_vma_unmap()
2704 struct page *page = migrate_pfn_to_page(migrate->src[i]); in migrate_vma_unmap()
2706 if (!page || !(migrate->src[i] & MIGRATE_PFN_MIGRATE)) in migrate_vma_unmap()
2715 if (migrate_vma_check_page(page, migrate->fault_page)) in migrate_vma_unmap()
2719 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE; in migrate_vma_unmap()
2720 migrate->cpages--; in migrate_vma_unmap()
2725 struct page *page = migrate_pfn_to_page(migrate->src[i]); in migrate_vma_unmap()
2727 if (!page || (migrate->src[i] & MIGRATE_PFN_MIGRATE)) in migrate_vma_unmap()
2732 migrate->src[i] = 0; in migrate_vma_unmap()
2744 * migrate_vma_setup() - prepare to migrate a range of memory
2750 * Prepare to migrate a range of memory virtual address range by collecting all
2765 * Note that the caller does not have to migrate all the pages that are marked
2767 * device memory to system memory. If the caller cannot migrate a device page
2784 * then migrate_vma_pages() to migrate struct page information from the source
2785 * struct page to the destination struct page. If it fails to migrate the
2857 static void migrate_vma_insert_page(struct migrate_vma *migrate, in migrate_vma_insert_page() argument
2863 struct vm_area_struct *vma = migrate->vma; in migrate_vma_insert_page()
2990 * migrate_vma_pages() - migrate meta-data from src page to dst page
2991 * @migrate: migrate struct containing all migration information
2997 void migrate_vma_pages(struct migrate_vma *migrate) in migrate_vma_pages() argument
2999 const unsigned long npages = migrate->npages; in migrate_vma_pages()
3000 const unsigned long start = migrate->start; in migrate_vma_pages()
3006 struct page *newpage = migrate_pfn_to_page(migrate->dst[i]); in migrate_vma_pages()
3007 struct page *page = migrate_pfn_to_page(migrate->src[i]); in migrate_vma_pages()
3012 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE; in migrate_vma_pages()
3017 if (!(migrate->src[i] & MIGRATE_PFN_MIGRATE)) in migrate_vma_pages()
3025 migrate->vma->vm_mm, in migrate_vma_pages()
3026 addr, migrate->end); in migrate_vma_pages()
3029 migrate_vma_insert_page(migrate, addr, newpage, in migrate_vma_pages()
3030 &migrate->src[i], in migrate_vma_pages()
3031 &migrate->dst[i]); in migrate_vma_pages()
3044 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE; in migrate_vma_pages()
3052 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE; in migrate_vma_pages()
3057 if (migrate->fault_page == page) in migrate_vma_pages()
3064 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE; in migrate_vma_pages()
3079 * @migrate: migrate struct containing all migration information
3088 void migrate_vma_finalize(struct migrate_vma *migrate) in migrate_vma_finalize() argument
3090 const unsigned long npages = migrate->npages; in migrate_vma_finalize()
3094 struct page *newpage = migrate_pfn_to_page(migrate->dst[i]); in migrate_vma_finalize()
3095 struct page *page = migrate_pfn_to_page(migrate->src[i]); in migrate_vma_finalize()
3105 if (!(migrate->src[i] & MIGRATE_PFN_MIGRATE) || !newpage) { in migrate_vma_finalize()