diff options
Diffstat (limited to 'mm/migrate.c')
-rw-r--r-- | mm/migrate.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index c9c73a35aca7..9f4ed4e985c1 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -2320,6 +2320,11 @@ next: | |||
2320 | return 0; | 2320 | return 0; |
2321 | } | 2321 | } |
2322 | 2322 | ||
2323 | static const struct mm_walk_ops migrate_vma_walk_ops = { | ||
2324 | .pmd_entry = migrate_vma_collect_pmd, | ||
2325 | .pte_hole = migrate_vma_collect_hole, | ||
2326 | }; | ||
2327 | |||
2323 | /* | 2328 | /* |
2324 | * migrate_vma_collect() - collect pages over a range of virtual addresses | 2329 | * migrate_vma_collect() - collect pages over a range of virtual addresses |
2325 | * @migrate: migrate struct containing all migration information | 2330 | * @migrate: migrate struct containing all migration information |
@@ -2331,21 +2336,15 @@ next: | |||
2331 | static void migrate_vma_collect(struct migrate_vma *migrate) | 2336 | static void migrate_vma_collect(struct migrate_vma *migrate) |
2332 | { | 2337 | { |
2333 | struct mmu_notifier_range range; | 2338 | struct mmu_notifier_range range; |
2334 | struct mm_walk mm_walk = { | ||
2335 | .pmd_entry = migrate_vma_collect_pmd, | ||
2336 | .pte_hole = migrate_vma_collect_hole, | ||
2337 | .vma = migrate->vma, | ||
2338 | .mm = migrate->vma->vm_mm, | ||
2339 | .private = migrate, | ||
2340 | }; | ||
2341 | 2339 | ||
2342 | mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, NULL, mm_walk.mm, | 2340 | mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, NULL, |
2343 | migrate->start, | 2341 | migrate->vma->vm_mm, migrate->start, migrate->end); |
2344 | migrate->end); | ||
2345 | mmu_notifier_invalidate_range_start(&range); | 2342 | mmu_notifier_invalidate_range_start(&range); |
2346 | walk_page_range(migrate->start, migrate->end, &mm_walk); | ||
2347 | mmu_notifier_invalidate_range_end(&range); | ||
2348 | 2343 | ||
2344 | walk_page_range(migrate->vma->vm_mm, migrate->start, migrate->end, | ||
2345 | &migrate_vma_walk_ops, migrate); | ||
2346 | |||
2347 | mmu_notifier_invalidate_range_end(&range); | ||
2349 | migrate->end = migrate->start + (migrate->npages << PAGE_SHIFT); | 2348 | migrate->end = migrate->start + (migrate->npages << PAGE_SHIFT); |
2350 | } | 2349 | } |
2351 | 2350 | ||