1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <linux/migrate.h>
17#include <linux/export.h>
18#include <linux/swap.h>
19#include <linux/swapops.h>
20#include <linux/pagemap.h>
21#include <linux/buffer_head.h>
22#include <linux/mm_inline.h>
23#include <linux/nsproxy.h>
24#include <linux/pagevec.h>
25#include <linux/ksm.h>
26#include <linux/rmap.h>
27#include <linux/topology.h>
28#include <linux/cpu.h>
29#include <linux/cpuset.h>
30#include <linux/writeback.h>
31#include <linux/mempolicy.h>
32#include <linux/vmalloc.h>
33#include <linux/security.h>
34#include <linux/backing-dev.h>
35#include <linux/compaction.h>
36#include <linux/syscalls.h>
37#include <linux/compat.h>
38#include <linux/hugetlb.h>
39#include <linux/hugetlb_cgroup.h>
40#include <linux/gfp.h>
41#include <linux/pagewalk.h>
42#include <linux/pfn_t.h>
43#include <linux/memremap.h>
44#include <linux/userfaultfd_k.h>
45#include <linux/balloon_compaction.h>
46#include <linux/mmu_notifier.h>
47#include <linux/page_idle.h>
48#include <linux/page_owner.h>
49#include <linux/sched/mm.h>
50#include <linux/ptrace.h>
51#include <linux/oom.h>
52
53#include <asm/tlbflush.h>
54
55#define CREATE_TRACE_POINTS
56#include <trace/events/migrate.h>
57
58#include "internal.h"
59
60
61
62
63
64
65int migrate_prep(void)
66{
67
68
69
70
71
72
73 lru_add_drain_all();
74
75 return 0;
76}
77
78
79int migrate_prep_local(void)
80{
81 lru_add_drain();
82
83 return 0;
84}
85
86int isolate_movable_page(struct page *page, isolate_mode_t mode)
87{
88 struct address_space *mapping;
89
90
91
92
93
94
95
96
97
98
99 if (unlikely(!get_page_unless_zero(page)))
100 goto out;
101
102
103
104
105
106
107 if (unlikely(!__PageMovable(page)))
108 goto out_putpage;
109
110
111
112
113
114
115
116
117
118
119
120 if (unlikely(!trylock_page(page)))
121 goto out_putpage;
122
123 if (!PageMovable(page) || PageIsolated(page))
124 goto out_no_isolated;
125
126 mapping = page_mapping(page);
127 VM_BUG_ON_PAGE(!mapping, page);
128
129 if (!mapping->a_ops->isolate_page(page, mode))
130 goto out_no_isolated;
131
132
133 WARN_ON_ONCE(PageIsolated(page));
134 __SetPageIsolated(page);
135 unlock_page(page);
136
137 return 0;
138
139out_no_isolated:
140 unlock_page(page);
141out_putpage:
142 put_page(page);
143out:
144 return -EBUSY;
145}
146
147
148void putback_movable_page(struct page *page)
149{
150 struct address_space *mapping;
151
152 VM_BUG_ON_PAGE(!PageLocked(page), page);
153 VM_BUG_ON_PAGE(!PageMovable(page), page);
154 VM_BUG_ON_PAGE(!PageIsolated(page), page);
155
156 mapping = page_mapping(page);
157 mapping->a_ops->putback_page(page);
158 __ClearPageIsolated(page);
159}
160
161
162
163
164
165
166
167
168
169void putback_movable_pages(struct list_head *l)
170{
171 struct page *page;
172 struct page *page2;
173
174 list_for_each_entry_safe(page, page2, l, lru) {
175 if (unlikely(PageHuge(page))) {
176 putback_active_hugepage(page);
177 continue;
178 }
179 list_del(&page->lru);
180
181
182
183
184
185 if (unlikely(__PageMovable(page))) {
186 VM_BUG_ON_PAGE(!PageIsolated(page), page);
187 lock_page(page);
188 if (PageMovable(page))
189 putback_movable_page(page);
190 else
191 __ClearPageIsolated(page);
192 unlock_page(page);
193 put_page(page);
194 } else {
195 mod_node_page_state(page_pgdat(page), NR_ISOLATED_ANON +
196 page_is_file_lru(page), -hpage_nr_pages(page));
197 putback_lru_page(page);
198 }
199 }
200}
201
202
203
204
205static bool remove_migration_pte(struct page *page, struct vm_area_struct *vma,
206 unsigned long addr, void *old)
207{
208 struct page_vma_mapped_walk pvmw = {
209 .page = old,
210 .vma = vma,
211 .address = addr,
212 .flags = PVMW_SYNC | PVMW_MIGRATION,
213 };
214 struct page *new;
215 pte_t pte;
216 swp_entry_t entry;
217
218 VM_BUG_ON_PAGE(PageTail(page), page);
219 while (page_vma_mapped_walk(&pvmw)) {
220 if (PageKsm(page))
221 new = page;
222 else
223 new = page - pvmw.page->index +
224 linear_page_index(vma, pvmw.address);
225
226#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
227
228 if (!pvmw.pte) {
229 VM_BUG_ON_PAGE(PageHuge(page) || !PageTransCompound(page), page);
230 remove_migration_pmd(&pvmw, new);
231 continue;
232 }
233#endif
234
235 get_page(new);
236 pte = pte_mkold(mk_pte(new, READ_ONCE(vma->vm_page_prot)));
237 if (pte_swp_soft_dirty(*pvmw.pte))
238 pte = pte_mksoft_dirty(pte);
239
240
241
242
243 entry = pte_to_swp_entry(*pvmw.pte);
244 if (is_write_migration_entry(entry))
245 pte = maybe_mkwrite(pte, vma);
246 else if (pte_swp_uffd_wp(*pvmw.pte))
247 pte = pte_mkuffd_wp(pte);
248
249 if (unlikely(is_zone_device_page(new))) {
250 if (is_device_private_page(new)) {
251 entry = make_device_private_entry(new, pte_write(pte));
252 pte = swp_entry_to_pte(entry);
253 if (pte_swp_uffd_wp(*pvmw.pte))
254 pte = pte_mkuffd_wp(pte);
255 }
256 }
257
258#ifdef CONFIG_HUGETLB_PAGE
259 if (PageHuge(new)) {
260 pte = pte_mkhuge(pte);
261 pte = arch_make_huge_pte(pte, vma, new, 0);
262 set_huge_pte_at(vma->vm_mm, pvmw.address, pvmw.pte, pte);
263 if (PageAnon(new))
264 hugepage_add_anon_rmap(new, vma, pvmw.address);
265 else
266 page_dup_rmap(new, true);
267 } else
268#endif
269 {
270 set_pte_at(vma->vm_mm, pvmw.address, pvmw.pte, pte);
271
272 if (PageAnon(new))
273 page_add_anon_rmap(new, vma, pvmw.address, false);
274 else
275 page_add_file_rmap(new, false);
276 }
277 if (vma->vm_flags & VM_LOCKED && !PageTransCompound(new))
278 mlock_vma_page(new);
279
280 if (PageTransHuge(page) && PageMlocked(page))
281 clear_page_mlock(page);
282
283
284 update_mmu_cache(vma, pvmw.address, pvmw.pte);
285 }
286
287 return true;
288}
289
290
291
292
293
294void remove_migration_ptes(struct page *old, struct page *new, bool locked)
295{
296 struct rmap_walk_control rwc = {
297 .rmap_one = remove_migration_pte,
298 .arg = old,
299 };
300
301 if (locked)
302 rmap_walk_locked(new, &rwc);
303 else
304 rmap_walk(new, &rwc);
305}
306
307
308
309
310
311
312void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
313 spinlock_t *ptl)
314{
315 pte_t pte;
316 swp_entry_t entry;
317 struct page *page;
318
319 spin_lock(ptl);
320 pte = *ptep;
321 if (!is_swap_pte(pte))
322 goto out;
323
324 entry = pte_to_swp_entry(pte);
325 if (!is_migration_entry(entry))
326 goto out;
327
328 page = migration_entry_to_page(entry);
329
330
331
332
333
334
335 if (!get_page_unless_zero(page))
336 goto out;
337 pte_unmap_unlock(ptep, ptl);
338 put_and_wait_on_page_locked(page);
339 return;
340out:
341 pte_unmap_unlock(ptep, ptl);
342}
343
344void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
345 unsigned long address)
346{
347 spinlock_t *ptl = pte_lockptr(mm, pmd);
348 pte_t *ptep = pte_offset_map(pmd, address);
349 __migration_entry_wait(mm, ptep, ptl);
350}
351
352void migration_entry_wait_huge(struct vm_area_struct *vma,
353 struct mm_struct *mm, pte_t *pte)
354{
355 spinlock_t *ptl = huge_pte_lockptr(hstate_vma(vma), mm, pte);
356 __migration_entry_wait(mm, pte, ptl);
357}
358
359#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
360void pmd_migration_entry_wait(struct mm_struct *mm, pmd_t *pmd)
361{
362 spinlock_t *ptl;
363 struct page *page;
364
365 ptl = pmd_lock(mm, pmd);
366 if (!is_pmd_migration_entry(*pmd))
367 goto unlock;
368 page = migration_entry_to_page(pmd_to_swp_entry(*pmd));
369 if (!get_page_unless_zero(page))
370 goto unlock;
371 spin_unlock(ptl);
372 put_and_wait_on_page_locked(page);
373 return;
374unlock:
375 spin_unlock(ptl);
376}
377#endif
378
379static int expected_page_refs(struct address_space *mapping, struct page *page)
380{
381 int expected_count = 1;
382
383
384
385
386
387 expected_count += is_device_private_page(page);
388 if (mapping)
389 expected_count += hpage_nr_pages(page) + page_has_private(page);
390
391 return expected_count;
392}
393
394
395
396
397
398
399
400
401
402int migrate_page_move_mapping(struct address_space *mapping,
403 struct page *newpage, struct page *page, int extra_count)
404{
405 XA_STATE(xas, &mapping->i_pages, page_index(page));
406 struct zone *oldzone, *newzone;
407 int dirty;
408 int expected_count = expected_page_refs(mapping, page) + extra_count;
409
410 if (!mapping) {
411
412 if (page_count(page) != expected_count)
413 return -EAGAIN;
414
415
416 newpage->index = page->index;
417 newpage->mapping = page->mapping;
418 if (PageSwapBacked(page))
419 __SetPageSwapBacked(newpage);
420
421 return MIGRATEPAGE_SUCCESS;
422 }
423
424 oldzone = page_zone(page);
425 newzone = page_zone(newpage);
426
427 xas_lock_irq(&xas);
428 if (page_count(page) != expected_count || xas_load(&xas) != page) {
429 xas_unlock_irq(&xas);
430 return -EAGAIN;
431 }
432
433 if (!page_ref_freeze(page, expected_count)) {
434 xas_unlock_irq(&xas);
435 return -EAGAIN;
436 }
437
438
439
440
441
442 newpage->index = page->index;
443 newpage->mapping = page->mapping;
444 page_ref_add(newpage, hpage_nr_pages(page));
445 if (PageSwapBacked(page)) {
446 __SetPageSwapBacked(newpage);
447 if (PageSwapCache(page)) {
448 SetPageSwapCache(newpage);
449 set_page_private(newpage, page_private(page));
450 }
451 } else {
452 VM_BUG_ON_PAGE(PageSwapCache(page), page);
453 }
454
455
456 dirty = PageDirty(page);
457 if (dirty) {
458 ClearPageDirty(page);
459 SetPageDirty(newpage);
460 }
461
462 xas_store(&xas, newpage);
463 if (PageTransHuge(page)) {
464 int i;
465
466 for (i = 1; i < HPAGE_PMD_NR; i++) {
467 xas_next(&xas);
468 xas_store(&xas, newpage);
469 }
470 }
471
472
473
474
475
476
477 page_ref_unfreeze(page, expected_count - hpage_nr_pages(page));
478
479 xas_unlock(&xas);
480
481
482
483
484
485
486
487
488
489
490
491
492 if (newzone != oldzone) {
493 __dec_node_state(oldzone->zone_pgdat, NR_FILE_PAGES);
494 __inc_node_state(newzone->zone_pgdat, NR_FILE_PAGES);
495 if (PageSwapBacked(page) && !PageSwapCache(page)) {
496 __dec_node_state(oldzone->zone_pgdat, NR_SHMEM);
497 __inc_node_state(newzone->zone_pgdat, NR_SHMEM);
498 }
499 if (dirty && mapping_cap_account_dirty(mapping)) {
500 __dec_node_state(oldzone->zone_pgdat, NR_FILE_DIRTY);
501 __dec_zone_state(oldzone, NR_ZONE_WRITE_PENDING);
502 __inc_node_state(newzone->zone_pgdat, NR_FILE_DIRTY);
503 __inc_zone_state(newzone, NR_ZONE_WRITE_PENDING);
504 }
505 }
506 local_irq_enable();
507
508 return MIGRATEPAGE_SUCCESS;
509}
510EXPORT_SYMBOL(migrate_page_move_mapping);
511
512
513
514
515
516int migrate_huge_page_move_mapping(struct address_space *mapping,
517 struct page *newpage, struct page *page)
518{
519 XA_STATE(xas, &mapping->i_pages, page_index(page));
520 int expected_count;
521
522 xas_lock_irq(&xas);
523 expected_count = 2 + page_has_private(page);
524 if (page_count(page) != expected_count || xas_load(&xas) != page) {
525 xas_unlock_irq(&xas);
526 return -EAGAIN;
527 }
528
529 if (!page_ref_freeze(page, expected_count)) {
530 xas_unlock_irq(&xas);
531 return -EAGAIN;
532 }
533
534 newpage->index = page->index;
535 newpage->mapping = page->mapping;
536
537 get_page(newpage);
538
539 xas_store(&xas, newpage);
540
541 page_ref_unfreeze(page, expected_count - 1);
542
543 xas_unlock_irq(&xas);
544
545 return MIGRATEPAGE_SUCCESS;
546}
547
548
549
550
551
552
553static void __copy_gigantic_page(struct page *dst, struct page *src,
554 int nr_pages)
555{
556 int i;
557 struct page *dst_base = dst;
558 struct page *src_base = src;
559
560 for (i = 0; i < nr_pages; ) {
561 cond_resched();
562 copy_highpage(dst, src);
563
564 i++;
565 dst = mem_map_next(dst, dst_base, i);
566 src = mem_map_next(src, src_base, i);
567 }
568}
569
570static void copy_huge_page(struct page *dst, struct page *src)
571{
572 int i;
573 int nr_pages;
574
575 if (PageHuge(src)) {
576
577 struct hstate *h = page_hstate(src);
578 nr_pages = pages_per_huge_page(h);
579
580 if (unlikely(nr_pages > MAX_ORDER_NR_PAGES)) {
581 __copy_gigantic_page(dst, src, nr_pages);
582 return;
583 }
584 } else {
585
586 BUG_ON(!PageTransHuge(src));
587 nr_pages = hpage_nr_pages(src);
588 }
589
590 for (i = 0; i < nr_pages; i++) {
591 cond_resched();
592 copy_highpage(dst + i, src + i);
593 }
594}
595
596
597
598
599void migrate_page_states(struct page *newpage, struct page *page)
600{
601 int cpupid;
602
603 if (PageError(page))
604 SetPageError(newpage);
605 if (PageReferenced(page))
606 SetPageReferenced(newpage);
607 if (PageUptodate(page))
608 SetPageUptodate(newpage);
609 if (TestClearPageActive(page)) {
610 VM_BUG_ON_PAGE(PageUnevictable(page), page);
611 SetPageActive(newpage);
612 } else if (TestClearPageUnevictable(page))
613 SetPageUnevictable(newpage);
614 if (PageWorkingset(page))
615 SetPageWorkingset(newpage);
616 if (PageChecked(page))
617 SetPageChecked(newpage);
618 if (PageMappedToDisk(page))
619 SetPageMappedToDisk(newpage);
620
621
622 if (PageDirty(page))
623 SetPageDirty(newpage);
624
625 if (page_is_young(page))
626 set_page_young(newpage);
627 if (page_is_idle(page))
628 set_page_idle(newpage);
629
630
631
632
633
634 cpupid = page_cpupid_xchg_last(page, -1);
635 page_cpupid_xchg_last(newpage, cpupid);
636
637 ksm_migrate_page(newpage, page);
638
639
640
641
642 if (PageSwapCache(page))
643 ClearPageSwapCache(page);
644 ClearPagePrivate(page);
645 set_page_private(page, 0);
646
647
648
649
650
651 if (PageWriteback(newpage))
652 end_page_writeback(newpage);
653
654
655
656
657
658
659 if (PageReadahead(page))
660 SetPageReadahead(newpage);
661
662 copy_page_owner(page, newpage);
663
664 mem_cgroup_migrate(page, newpage);
665}
666EXPORT_SYMBOL(migrate_page_states);
667
668void migrate_page_copy(struct page *newpage, struct page *page)
669{
670 if (PageHuge(page) || PageTransHuge(page))
671 copy_huge_page(newpage, page);
672 else
673 copy_highpage(newpage, page);
674
675 migrate_page_states(newpage, page);
676}
677EXPORT_SYMBOL(migrate_page_copy);
678
679
680
681
682
683
684
685
686
687
688
689int migrate_page(struct address_space *mapping,
690 struct page *newpage, struct page *page,
691 enum migrate_mode mode)
692{
693 int rc;
694
695 BUG_ON(PageWriteback(page));
696
697 rc = migrate_page_move_mapping(mapping, newpage, page, 0);
698
699 if (rc != MIGRATEPAGE_SUCCESS)
700 return rc;
701
702 if (mode != MIGRATE_SYNC_NO_COPY)
703 migrate_page_copy(newpage, page);
704 else
705 migrate_page_states(newpage, page);
706 return MIGRATEPAGE_SUCCESS;
707}
708EXPORT_SYMBOL(migrate_page);
709
710#ifdef CONFIG_BLOCK
711
712static bool buffer_migrate_lock_buffers(struct buffer_head *head,
713 enum migrate_mode mode)
714{
715 struct buffer_head *bh = head;
716
717
718 if (mode != MIGRATE_ASYNC) {
719 do {
720 lock_buffer(bh);
721 bh = bh->b_this_page;
722
723 } while (bh != head);
724
725 return true;
726 }
727
728
729 do {
730 if (!trylock_buffer(bh)) {
731
732
733
734
735 struct buffer_head *failed_bh = bh;
736 bh = head;
737 while (bh != failed_bh) {
738 unlock_buffer(bh);
739 bh = bh->b_this_page;
740 }
741 return false;
742 }
743
744 bh = bh->b_this_page;
745 } while (bh != head);
746 return true;
747}
748
749static int __buffer_migrate_page(struct address_space *mapping,
750 struct page *newpage, struct page *page, enum migrate_mode mode,
751 bool check_refs)
752{
753 struct buffer_head *bh, *head;
754 int rc;
755 int expected_count;
756
757 if (!page_has_buffers(page))
758 return migrate_page(mapping, newpage, page, mode);
759
760
761 expected_count = expected_page_refs(mapping, page);
762 if (page_count(page) != expected_count)
763 return -EAGAIN;
764
765 head = page_buffers(page);
766 if (!buffer_migrate_lock_buffers(head, mode))
767 return -EAGAIN;
768
769 if (check_refs) {
770 bool busy;
771 bool invalidated = false;
772
773recheck_buffers:
774 busy = false;
775 spin_lock(&mapping->private_lock);
776 bh = head;
777 do {
778 if (atomic_read(&bh->b_count)) {
779 busy = true;
780 break;
781 }
782 bh = bh->b_this_page;
783 } while (bh != head);
784 if (busy) {
785 if (invalidated) {
786 rc = -EAGAIN;
787 goto unlock_buffers;
788 }
789 spin_unlock(&mapping->private_lock);
790 invalidate_bh_lrus();
791 invalidated = true;
792 goto recheck_buffers;
793 }
794 }
795
796 rc = migrate_page_move_mapping(mapping, newpage, page, 0);
797 if (rc != MIGRATEPAGE_SUCCESS)
798 goto unlock_buffers;
799
800 ClearPagePrivate(page);
801 set_page_private(newpage, page_private(page));
802 set_page_private(page, 0);
803 put_page(page);
804 get_page(newpage);
805
806 bh = head;
807 do {
808 set_bh_page(bh, newpage, bh_offset(bh));
809 bh = bh->b_this_page;
810
811 } while (bh != head);
812
813 SetPagePrivate(newpage);
814
815 if (mode != MIGRATE_SYNC_NO_COPY)
816 migrate_page_copy(newpage, page);
817 else
818 migrate_page_states(newpage, page);
819
820 rc = MIGRATEPAGE_SUCCESS;
821unlock_buffers:
822 if (check_refs)
823 spin_unlock(&mapping->private_lock);
824 bh = head;
825 do {
826 unlock_buffer(bh);
827 bh = bh->b_this_page;
828
829 } while (bh != head);
830
831 return rc;
832}
833
834
835
836
837
838
839int buffer_migrate_page(struct address_space *mapping,
840 struct page *newpage, struct page *page, enum migrate_mode mode)
841{
842 return __buffer_migrate_page(mapping, newpage, page, mode, false);
843}
844EXPORT_SYMBOL(buffer_migrate_page);
845
846
847
848
849
850
851
852int buffer_migrate_page_norefs(struct address_space *mapping,
853 struct page *newpage, struct page *page, enum migrate_mode mode)
854{
855 return __buffer_migrate_page(mapping, newpage, page, mode, true);
856}
857#endif
858
859
860
861
862static int writeout(struct address_space *mapping, struct page *page)
863{
864 struct writeback_control wbc = {
865 .sync_mode = WB_SYNC_NONE,
866 .nr_to_write = 1,
867 .range_start = 0,
868 .range_end = LLONG_MAX,
869 .for_reclaim = 1
870 };
871 int rc;
872
873 if (!mapping->a_ops->writepage)
874
875 return -EINVAL;
876
877 if (!clear_page_dirty_for_io(page))
878
879 return -EAGAIN;
880
881
882
883
884
885
886
887
888
889 remove_migration_ptes(page, page, false);
890
891 rc = mapping->a_ops->writepage(page, &wbc);
892
893 if (rc != AOP_WRITEPAGE_ACTIVATE)
894
895 lock_page(page);
896
897 return (rc < 0) ? -EIO : -EAGAIN;
898}
899
900
901
902
903static int fallback_migrate_page(struct address_space *mapping,
904 struct page *newpage, struct page *page, enum migrate_mode mode)
905{
906 if (PageDirty(page)) {
907
908 switch (mode) {
909 case MIGRATE_SYNC:
910 case MIGRATE_SYNC_NO_COPY:
911 break;
912 default:
913 return -EBUSY;
914 }
915 return writeout(mapping, page);
916 }
917
918
919
920
921
922 if (page_has_private(page) &&
923 !try_to_release_page(page, GFP_KERNEL))
924 return mode == MIGRATE_SYNC ? -EAGAIN : -EBUSY;
925
926 return migrate_page(mapping, newpage, page, mode);
927}
928
929
930
931
932
933
934
935
936
937
938
939
940static int move_to_new_page(struct page *newpage, struct page *page,
941 enum migrate_mode mode)
942{
943 struct address_space *mapping;
944 int rc = -EAGAIN;
945 bool is_lru = !__PageMovable(page);
946
947 VM_BUG_ON_PAGE(!PageLocked(page), page);
948 VM_BUG_ON_PAGE(!PageLocked(newpage), newpage);
949
950 mapping = page_mapping(page);
951
952 if (likely(is_lru)) {
953 if (!mapping)
954 rc = migrate_page(mapping, newpage, page, mode);
955 else if (mapping->a_ops->migratepage)
956
957
958
959
960
961
962
963 rc = mapping->a_ops->migratepage(mapping, newpage,
964 page, mode);
965 else
966 rc = fallback_migrate_page(mapping, newpage,
967 page, mode);
968 } else {
969
970
971
972
973 VM_BUG_ON_PAGE(!PageIsolated(page), page);
974 if (!PageMovable(page)) {
975 rc = MIGRATEPAGE_SUCCESS;
976 __ClearPageIsolated(page);
977 goto out;
978 }
979
980 rc = mapping->a_ops->migratepage(mapping, newpage,
981 page, mode);
982 WARN_ON_ONCE(rc == MIGRATEPAGE_SUCCESS &&
983 !PageIsolated(page));
984 }
985
986
987
988
989
990 if (rc == MIGRATEPAGE_SUCCESS) {
991 if (__PageMovable(page)) {
992 VM_BUG_ON_PAGE(!PageIsolated(page), page);
993
994
995
996
997
998 __ClearPageIsolated(page);
999 }
1000
1001
1002
1003
1004
1005
1006 if (!PageMappingFlags(page))
1007 page->mapping = NULL;
1008
1009 if (likely(!is_zone_device_page(newpage)))
1010 flush_dcache_page(newpage);
1011
1012 }
1013out:
1014 return rc;
1015}
1016
1017static int __unmap_and_move(struct page *page, struct page *newpage,
1018 int force, enum migrate_mode mode)
1019{
1020 int rc = -EAGAIN;
1021 int page_was_mapped = 0;
1022 struct anon_vma *anon_vma = NULL;
1023 bool is_lru = !__PageMovable(page);
1024
1025 if (!trylock_page(page)) {
1026 if (!force || mode == MIGRATE_ASYNC)
1027 goto out;
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042 if (current->flags & PF_MEMALLOC)
1043 goto out;
1044
1045 lock_page(page);
1046 }
1047
1048 if (PageWriteback(page)) {
1049
1050
1051
1052
1053
1054
1055 switch (mode) {
1056 case MIGRATE_SYNC:
1057 case MIGRATE_SYNC_NO_COPY:
1058 break;
1059 default:
1060 rc = -EBUSY;
1061 goto out_unlock;
1062 }
1063 if (!force)
1064 goto out_unlock;
1065 wait_on_page_writeback(page);
1066 }
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082 if (PageAnon(page) && !PageKsm(page))
1083 anon_vma = page_get_anon_vma(page);
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093 if (unlikely(!trylock_page(newpage)))
1094 goto out_unlock;
1095
1096 if (unlikely(!is_lru)) {
1097 rc = move_to_new_page(newpage, page, mode);
1098 goto out_unlock_both;
1099 }
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113 if (!page->mapping) {
1114 VM_BUG_ON_PAGE(PageAnon(page), page);
1115 if (page_has_private(page)) {
1116 try_to_free_buffers(page);
1117 goto out_unlock_both;
1118 }
1119 } else if (page_mapped(page)) {
1120
1121 VM_BUG_ON_PAGE(PageAnon(page) && !PageKsm(page) && !anon_vma,
1122 page);
1123 try_to_unmap(page,
1124 TTU_MIGRATION|TTU_IGNORE_MLOCK|TTU_IGNORE_ACCESS);
1125 page_was_mapped = 1;
1126 }
1127
1128 if (!page_mapped(page))
1129 rc = move_to_new_page(newpage, page, mode);
1130
1131 if (page_was_mapped)
1132 remove_migration_ptes(page,
1133 rc == MIGRATEPAGE_SUCCESS ? newpage : page, false);
1134
1135out_unlock_both:
1136 unlock_page(newpage);
1137out_unlock:
1138
1139 if (anon_vma)
1140 put_anon_vma(anon_vma);
1141 unlock_page(page);
1142out:
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152 if (rc == MIGRATEPAGE_SUCCESS) {
1153 if (unlikely(!is_lru))
1154 put_page(newpage);
1155 else
1156 putback_lru_page(newpage);
1157 }
1158
1159 return rc;
1160}
1161
1162
1163
1164
1165
1166#if defined(CONFIG_ARM) && \
1167 defined(GCC_VERSION) && GCC_VERSION < 40900 && GCC_VERSION >= 40700
1168#define ICE_noinline noinline
1169#else
1170#define ICE_noinline
1171#endif
1172
1173
1174
1175
1176
1177static ICE_noinline int unmap_and_move(new_page_t get_new_page,
1178 free_page_t put_new_page,
1179 unsigned long private, struct page *page,
1180 int force, enum migrate_mode mode,
1181 enum migrate_reason reason)
1182{
1183 int rc = MIGRATEPAGE_SUCCESS;
1184 struct page *newpage = NULL;
1185
1186 if (!thp_migration_supported() && PageTransHuge(page))
1187 return -ENOMEM;
1188
1189 if (page_count(page) == 1) {
1190
1191 ClearPageActive(page);
1192 ClearPageUnevictable(page);
1193 if (unlikely(__PageMovable(page))) {
1194 lock_page(page);
1195 if (!PageMovable(page))
1196 __ClearPageIsolated(page);
1197 unlock_page(page);
1198 }
1199 goto out;
1200 }
1201
1202 newpage = get_new_page(page, private);
1203 if (!newpage)
1204 return -ENOMEM;
1205
1206 rc = __unmap_and_move(page, newpage, force, mode);
1207 if (rc == MIGRATEPAGE_SUCCESS)
1208 set_page_owner_migrate_reason(newpage, reason);
1209
1210out:
1211 if (rc != -EAGAIN) {
1212
1213
1214
1215
1216
1217 list_del(&page->lru);
1218
1219
1220
1221
1222
1223
1224 if (likely(!__PageMovable(page)))
1225 mod_node_page_state(page_pgdat(page), NR_ISOLATED_ANON +
1226 page_is_file_lru(page), -hpage_nr_pages(page));
1227 }
1228
1229
1230
1231
1232
1233
1234 if (rc == MIGRATEPAGE_SUCCESS) {
1235 put_page(page);
1236 if (reason == MR_MEMORY_FAILURE) {
1237
1238
1239
1240
1241
1242 if (set_hwpoison_free_buddy_page(page))
1243 num_poisoned_pages_inc();
1244 }
1245 } else {
1246 if (rc != -EAGAIN) {
1247 if (likely(!__PageMovable(page))) {
1248 putback_lru_page(page);
1249 goto put_new;
1250 }
1251
1252 lock_page(page);
1253 if (PageMovable(page))
1254 putback_movable_page(page);
1255 else
1256 __ClearPageIsolated(page);
1257 unlock_page(page);
1258 put_page(page);
1259 }
1260put_new:
1261 if (put_new_page)
1262 put_new_page(newpage, private);
1263 else
1264 put_page(newpage);
1265 }
1266
1267 return rc;
1268}
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288static int unmap_and_move_huge_page(new_page_t get_new_page,
1289 free_page_t put_new_page, unsigned long private,
1290 struct page *hpage, int force,
1291 enum migrate_mode mode, int reason)
1292{
1293 int rc = -EAGAIN;
1294 int page_was_mapped = 0;
1295 struct page *new_hpage;
1296 struct anon_vma *anon_vma = NULL;
1297 struct address_space *mapping = NULL;
1298
1299
1300
1301
1302
1303
1304
1305
1306 if (!hugepage_migration_supported(page_hstate(hpage))) {
1307 putback_active_hugepage(hpage);
1308 return -ENOSYS;
1309 }
1310
1311 new_hpage = get_new_page(hpage, private);
1312 if (!new_hpage)
1313 return -ENOMEM;
1314
1315 if (!trylock_page(hpage)) {
1316 if (!force)
1317 goto out;
1318 switch (mode) {
1319 case MIGRATE_SYNC:
1320 case MIGRATE_SYNC_NO_COPY:
1321 break;
1322 default:
1323 goto out;
1324 }
1325 lock_page(hpage);
1326 }
1327
1328
1329
1330
1331
1332
1333 if (page_private(hpage) && !page_mapping(hpage)) {
1334 rc = -EBUSY;
1335 goto out_unlock;
1336 }
1337
1338 if (PageAnon(hpage))
1339 anon_vma = page_get_anon_vma(hpage);
1340
1341 if (unlikely(!trylock_page(new_hpage)))
1342 goto put_anon;
1343
1344 if (page_mapped(hpage)) {
1345
1346
1347
1348
1349
1350
1351 mapping = hugetlb_page_mapping_lock_write(hpage);
1352 if (unlikely(!mapping))
1353 goto unlock_put_anon;
1354
1355 try_to_unmap(hpage,
1356 TTU_MIGRATION|TTU_IGNORE_MLOCK|TTU_IGNORE_ACCESS|
1357 TTU_RMAP_LOCKED);
1358 page_was_mapped = 1;
1359
1360
1361
1362
1363 }
1364
1365 if (!page_mapped(hpage))
1366 rc = move_to_new_page(new_hpage, hpage, mode);
1367
1368 if (page_was_mapped) {
1369 remove_migration_ptes(hpage,
1370 rc == MIGRATEPAGE_SUCCESS ? new_hpage : hpage, true);
1371 i_mmap_unlock_write(mapping);
1372 }
1373
1374unlock_put_anon:
1375 unlock_page(new_hpage);
1376
1377put_anon:
1378 if (anon_vma)
1379 put_anon_vma(anon_vma);
1380
1381 if (rc == MIGRATEPAGE_SUCCESS) {
1382 move_hugetlb_state(hpage, new_hpage, reason);
1383 put_new_page = NULL;
1384 }
1385
1386out_unlock:
1387 unlock_page(hpage);
1388out:
1389 if (rc != -EAGAIN)
1390 putback_active_hugepage(hpage);
1391
1392
1393
1394
1395
1396
1397 if (put_new_page)
1398 put_new_page(new_hpage, private);
1399 else
1400 putback_active_hugepage(new_hpage);
1401
1402 return rc;
1403}
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426int migrate_pages(struct list_head *from, new_page_t get_new_page,
1427 free_page_t put_new_page, unsigned long private,
1428 enum migrate_mode mode, int reason)
1429{
1430 int retry = 1;
1431 int nr_failed = 0;
1432 int nr_succeeded = 0;
1433 int pass = 0;
1434 struct page *page;
1435 struct page *page2;
1436 int swapwrite = current->flags & PF_SWAPWRITE;
1437 int rc;
1438
1439 if (!swapwrite)
1440 current->flags |= PF_SWAPWRITE;
1441
1442 for(pass = 0; pass < 10 && retry; pass++) {
1443 retry = 0;
1444
1445 list_for_each_entry_safe(page, page2, from, lru) {
1446retry:
1447 cond_resched();
1448
1449 if (PageHuge(page))
1450 rc = unmap_and_move_huge_page(get_new_page,
1451 put_new_page, private, page,
1452 pass > 2, mode, reason);
1453 else
1454 rc = unmap_and_move(get_new_page, put_new_page,
1455 private, page, pass > 2, mode,
1456 reason);
1457
1458 switch(rc) {
1459 case -ENOMEM:
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471 if (PageTransHuge(page) && !PageHuge(page)) {
1472 lock_page(page);
1473 rc = split_huge_page_to_list(page, from);
1474 unlock_page(page);
1475 if (!rc) {
1476 list_safe_reset_next(page, page2, lru);
1477 goto retry;
1478 }
1479 }
1480 nr_failed++;
1481 goto out;
1482 case -EAGAIN:
1483 retry++;
1484 break;
1485 case MIGRATEPAGE_SUCCESS:
1486 nr_succeeded++;
1487 break;
1488 default:
1489
1490
1491
1492
1493
1494
1495 nr_failed++;
1496 break;
1497 }
1498 }
1499 }
1500 nr_failed += retry;
1501 rc = nr_failed;
1502out:
1503 if (nr_succeeded)
1504 count_vm_events(PGMIGRATE_SUCCESS, nr_succeeded);
1505 if (nr_failed)
1506 count_vm_events(PGMIGRATE_FAIL, nr_failed);
1507 trace_mm_migrate_pages(nr_succeeded, nr_failed, mode, reason);
1508
1509 if (!swapwrite)
1510 current->flags &= ~PF_SWAPWRITE;
1511
1512 return rc;
1513}
1514
1515#ifdef CONFIG_NUMA
1516
1517static int store_status(int __user *status, int start, int value, int nr)
1518{
1519 while (nr-- > 0) {
1520 if (put_user(value, status + start))
1521 return -EFAULT;
1522 start++;
1523 }
1524
1525 return 0;
1526}
1527
1528static int do_move_pages_to_node(struct mm_struct *mm,
1529 struct list_head *pagelist, int node)
1530{
1531 int err;
1532
1533 err = migrate_pages(pagelist, alloc_new_node_page, NULL, node,
1534 MIGRATE_SYNC, MR_SYSCALL);
1535 if (err)
1536 putback_movable_pages(pagelist);
1537 return err;
1538}
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549static int add_page_for_migration(struct mm_struct *mm, unsigned long addr,
1550 int node, struct list_head *pagelist, bool migrate_all)
1551{
1552 struct vm_area_struct *vma;
1553 struct page *page;
1554 unsigned int follflags;
1555 int err;
1556
1557 down_read(&mm->mmap_sem);
1558 err = -EFAULT;
1559 vma = find_vma(mm, addr);
1560 if (!vma || addr < vma->vm_start || !vma_migratable(vma))
1561 goto out;
1562
1563
1564 follflags = FOLL_GET | FOLL_DUMP;
1565 page = follow_page(vma, addr, follflags);
1566
1567 err = PTR_ERR(page);
1568 if (IS_ERR(page))
1569 goto out;
1570
1571 err = -ENOENT;
1572 if (!page)
1573 goto out;
1574
1575 err = 0;
1576 if (page_to_nid(page) == node)
1577 goto out_putpage;
1578
1579 err = -EACCES;
1580 if (page_mapcount(page) > 1 && !migrate_all)
1581 goto out_putpage;
1582
1583 if (PageHuge(page)) {
1584 if (PageHead(page)) {
1585 isolate_huge_page(page, pagelist);
1586 err = 1;
1587 }
1588 } else {
1589 struct page *head;
1590
1591 head = compound_head(page);
1592 err = isolate_lru_page(head);
1593 if (err)
1594 goto out_putpage;
1595
1596 err = 1;
1597 list_add_tail(&head->lru, pagelist);
1598 mod_node_page_state(page_pgdat(head),
1599 NR_ISOLATED_ANON + page_is_file_lru(head),
1600 hpage_nr_pages(head));
1601 }
1602out_putpage:
1603
1604
1605
1606
1607
1608 put_page(page);
1609out:
1610 up_read(&mm->mmap_sem);
1611 return err;
1612}
1613
1614static int move_pages_and_store_status(struct mm_struct *mm, int node,
1615 struct list_head *pagelist, int __user *status,
1616 int start, int i, unsigned long nr_pages)
1617{
1618 int err;
1619
1620 if (list_empty(pagelist))
1621 return 0;
1622
1623 err = do_move_pages_to_node(mm, pagelist, node);
1624 if (err) {
1625
1626
1627
1628
1629
1630
1631
1632
1633 if (err > 0)
1634 err += nr_pages - i - 1;
1635 return err;
1636 }
1637 return store_status(status, start, node, i - start);
1638}
1639
1640
1641
1642
1643
1644static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes,
1645 unsigned long nr_pages,
1646 const void __user * __user *pages,
1647 const int __user *nodes,
1648 int __user *status, int flags)
1649{
1650 int current_node = NUMA_NO_NODE;
1651 LIST_HEAD(pagelist);
1652 int start, i;
1653 int err = 0, err1;
1654
1655 migrate_prep();
1656
1657 for (i = start = 0; i < nr_pages; i++) {
1658 const void __user *p;
1659 unsigned long addr;
1660 int node;
1661
1662 err = -EFAULT;
1663 if (get_user(p, pages + i))
1664 goto out_flush;
1665 if (get_user(node, nodes + i))
1666 goto out_flush;
1667 addr = (unsigned long)untagged_addr(p);
1668
1669 err = -ENODEV;
1670 if (node < 0 || node >= MAX_NUMNODES)
1671 goto out_flush;
1672 if (!node_state(node, N_MEMORY))
1673 goto out_flush;
1674
1675 err = -EACCES;
1676 if (!node_isset(node, task_nodes))
1677 goto out_flush;
1678
1679 if (current_node == NUMA_NO_NODE) {
1680 current_node = node;
1681 start = i;
1682 } else if (node != current_node) {
1683 err = move_pages_and_store_status(mm, current_node,
1684 &pagelist, status, start, i, nr_pages);
1685 if (err)
1686 goto out;
1687 start = i;
1688 current_node = node;
1689 }
1690
1691
1692
1693
1694
1695 err = add_page_for_migration(mm, addr, current_node,
1696 &pagelist, flags & MPOL_MF_MOVE_ALL);
1697
1698 if (err > 0) {
1699
1700 continue;
1701 }
1702
1703
1704
1705
1706
1707 err = store_status(status, i, err ? : current_node, 1);
1708 if (err)
1709 goto out_flush;
1710
1711 err = move_pages_and_store_status(mm, current_node, &pagelist,
1712 status, start, i, nr_pages);
1713 if (err)
1714 goto out;
1715 current_node = NUMA_NO_NODE;
1716 }
1717out_flush:
1718
1719 err1 = move_pages_and_store_status(mm, current_node, &pagelist,
1720 status, start, i, nr_pages);
1721 if (err >= 0)
1722 err = err1;
1723out:
1724 return err;
1725}
1726
1727
1728
1729
1730static void do_pages_stat_array(struct mm_struct *mm, unsigned long nr_pages,
1731 const void __user **pages, int *status)
1732{
1733 unsigned long i;
1734
1735 down_read(&mm->mmap_sem);
1736
1737 for (i = 0; i < nr_pages; i++) {
1738 unsigned long addr = (unsigned long)(*pages);
1739 struct vm_area_struct *vma;
1740 struct page *page;
1741 int err = -EFAULT;
1742
1743 vma = find_vma(mm, addr);
1744 if (!vma || addr < vma->vm_start)
1745 goto set_status;
1746
1747
1748 page = follow_page(vma, addr, FOLL_DUMP);
1749
1750 err = PTR_ERR(page);
1751 if (IS_ERR(page))
1752 goto set_status;
1753
1754 err = page ? page_to_nid(page) : -ENOENT;
1755set_status:
1756 *status = err;
1757
1758 pages++;
1759 status++;
1760 }
1761
1762 up_read(&mm->mmap_sem);
1763}
1764
1765
1766
1767
1768
1769static int do_pages_stat(struct mm_struct *mm, unsigned long nr_pages,
1770 const void __user * __user *pages,
1771 int __user *status)
1772{
1773#define DO_PAGES_STAT_CHUNK_NR 16
1774 const void __user *chunk_pages[DO_PAGES_STAT_CHUNK_NR];
1775 int chunk_status[DO_PAGES_STAT_CHUNK_NR];
1776
1777 while (nr_pages) {
1778 unsigned long chunk_nr;
1779
1780 chunk_nr = nr_pages;
1781 if (chunk_nr > DO_PAGES_STAT_CHUNK_NR)
1782 chunk_nr = DO_PAGES_STAT_CHUNK_NR;
1783
1784 if (copy_from_user(chunk_pages, pages, chunk_nr * sizeof(*chunk_pages)))
1785 break;
1786
1787 do_pages_stat_array(mm, chunk_nr, chunk_pages, chunk_status);
1788
1789 if (copy_to_user(status, chunk_status, chunk_nr * sizeof(*status)))
1790 break;
1791
1792 pages += chunk_nr;
1793 status += chunk_nr;
1794 nr_pages -= chunk_nr;
1795 }
1796 return nr_pages ? -EFAULT : 0;
1797}
1798
1799
1800
1801
1802
1803static int kernel_move_pages(pid_t pid, unsigned long nr_pages,
1804 const void __user * __user *pages,
1805 const int __user *nodes,
1806 int __user *status, int flags)
1807{
1808 struct task_struct *task;
1809 struct mm_struct *mm;
1810 int err;
1811 nodemask_t task_nodes;
1812
1813
1814 if (flags & ~(MPOL_MF_MOVE|MPOL_MF_MOVE_ALL))
1815 return -EINVAL;
1816
1817 if ((flags & MPOL_MF_MOVE_ALL) && !capable(CAP_SYS_NICE))
1818 return -EPERM;
1819
1820
1821 rcu_read_lock();
1822 task = pid ? find_task_by_vpid(pid) : current;
1823 if (!task) {
1824 rcu_read_unlock();
1825 return -ESRCH;
1826 }
1827 get_task_struct(task);
1828
1829
1830
1831
1832
1833 if (!ptrace_may_access(task, PTRACE_MODE_READ_REALCREDS)) {
1834 rcu_read_unlock();
1835 err = -EPERM;
1836 goto out;
1837 }
1838 rcu_read_unlock();
1839
1840 err = security_task_movememory(task);
1841 if (err)
1842 goto out;
1843
1844 task_nodes = cpuset_mems_allowed(task);
1845 mm = get_task_mm(task);
1846 put_task_struct(task);
1847
1848 if (!mm)
1849 return -EINVAL;
1850
1851 if (nodes)
1852 err = do_pages_move(mm, task_nodes, nr_pages, pages,
1853 nodes, status, flags);
1854 else
1855 err = do_pages_stat(mm, nr_pages, pages, status);
1856
1857 mmput(mm);
1858 return err;
1859
1860out:
1861 put_task_struct(task);
1862 return err;
1863}
1864
1865SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages,
1866 const void __user * __user *, pages,
1867 const int __user *, nodes,
1868 int __user *, status, int, flags)
1869{
1870 return kernel_move_pages(pid, nr_pages, pages, nodes, status, flags);
1871}
1872
1873#ifdef CONFIG_COMPAT
1874COMPAT_SYSCALL_DEFINE6(move_pages, pid_t, pid, compat_ulong_t, nr_pages,
1875 compat_uptr_t __user *, pages32,
1876 const int __user *, nodes,
1877 int __user *, status,
1878 int, flags)
1879{
1880 const void __user * __user *pages;
1881 int i;
1882
1883 pages = compat_alloc_user_space(nr_pages * sizeof(void *));
1884 for (i = 0; i < nr_pages; i++) {
1885 compat_uptr_t p;
1886
1887 if (get_user(p, pages32 + i) ||
1888 put_user(compat_ptr(p), pages + i))
1889 return -EFAULT;
1890 }
1891 return kernel_move_pages(pid, nr_pages, pages, nodes, status, flags);
1892}
1893#endif
1894
1895#ifdef CONFIG_NUMA_BALANCING
1896
1897
1898
1899
1900static bool migrate_balanced_pgdat(struct pglist_data *pgdat,
1901 unsigned long nr_migrate_pages)
1902{
1903 int z;
1904
1905 for (z = pgdat->nr_zones - 1; z >= 0; z--) {
1906 struct zone *zone = pgdat->node_zones + z;
1907
1908 if (!populated_zone(zone))
1909 continue;
1910
1911
1912 if (!zone_watermark_ok(zone, 0,
1913 high_wmark_pages(zone) +
1914 nr_migrate_pages,
1915 ZONE_MOVABLE, 0))
1916 continue;
1917 return true;
1918 }
1919 return false;
1920}
1921
1922static struct page *alloc_misplaced_dst_page(struct page *page,
1923 unsigned long data)
1924{
1925 int nid = (int) data;
1926 struct page *newpage;
1927
1928 newpage = __alloc_pages_node(nid,
1929 (GFP_HIGHUSER_MOVABLE |
1930 __GFP_THISNODE | __GFP_NOMEMALLOC |
1931 __GFP_NORETRY | __GFP_NOWARN) &
1932 ~__GFP_RECLAIM, 0);
1933
1934 return newpage;
1935}
1936
1937static int numamigrate_isolate_page(pg_data_t *pgdat, struct page *page)
1938{
1939 int page_lru;
1940
1941 VM_BUG_ON_PAGE(compound_order(page) && !PageTransHuge(page), page);
1942
1943
1944 if (!migrate_balanced_pgdat(pgdat, compound_nr(page)))
1945 return 0;
1946
1947 if (isolate_lru_page(page))
1948 return 0;
1949
1950
1951
1952
1953
1954
1955
1956
1957 if (PageTransHuge(page) && page_count(page) != 3) {
1958 putback_lru_page(page);
1959 return 0;
1960 }
1961
1962 page_lru = page_is_file_lru(page);
1963 mod_node_page_state(page_pgdat(page), NR_ISOLATED_ANON + page_lru,
1964 hpage_nr_pages(page));
1965
1966
1967
1968
1969
1970
1971 put_page(page);
1972 return 1;
1973}
1974
1975bool pmd_trans_migrating(pmd_t pmd)
1976{
1977 struct page *page = pmd_page(pmd);
1978 return PageLocked(page);
1979}
1980
1981
1982
1983
1984
1985
1986int migrate_misplaced_page(struct page *page, struct vm_area_struct *vma,
1987 int node)
1988{
1989 pg_data_t *pgdat = NODE_DATA(node);
1990 int isolated;
1991 int nr_remaining;
1992 LIST_HEAD(migratepages);
1993
1994
1995
1996
1997
1998 if (page_mapcount(page) != 1 && page_is_file_lru(page) &&
1999 (vma->vm_flags & VM_EXEC))
2000 goto out;
2001
2002
2003
2004
2005
2006 if (page_is_file_lru(page) && PageDirty(page))
2007 goto out;
2008
2009 isolated = numamigrate_isolate_page(pgdat, page);
2010 if (!isolated)
2011 goto out;
2012
2013 list_add(&page->lru, &migratepages);
2014 nr_remaining = migrate_pages(&migratepages, alloc_misplaced_dst_page,
2015 NULL, node, MIGRATE_ASYNC,
2016 MR_NUMA_MISPLACED);
2017 if (nr_remaining) {
2018 if (!list_empty(&migratepages)) {
2019 list_del(&page->lru);
2020 dec_node_page_state(page, NR_ISOLATED_ANON +
2021 page_is_file_lru(page));
2022 putback_lru_page(page);
2023 }
2024 isolated = 0;
2025 } else
2026 count_vm_numa_event(NUMA_PAGE_MIGRATE);
2027 BUG_ON(!list_empty(&migratepages));
2028 return isolated;
2029
2030out:
2031 put_page(page);
2032 return 0;
2033}
2034#endif
2035
2036#if defined(CONFIG_NUMA_BALANCING) && defined(CONFIG_TRANSPARENT_HUGEPAGE)
2037
2038
2039
2040
2041int migrate_misplaced_transhuge_page(struct mm_struct *mm,
2042 struct vm_area_struct *vma,
2043 pmd_t *pmd, pmd_t entry,
2044 unsigned long address,
2045 struct page *page, int node)
2046{
2047 spinlock_t *ptl;
2048 pg_data_t *pgdat = NODE_DATA(node);
2049 int isolated = 0;
2050 struct page *new_page = NULL;
2051 int page_lru = page_is_file_lru(page);
2052 unsigned long start = address & HPAGE_PMD_MASK;
2053
2054 new_page = alloc_pages_node(node,
2055 (GFP_TRANSHUGE_LIGHT | __GFP_THISNODE),
2056 HPAGE_PMD_ORDER);
2057 if (!new_page)
2058 goto out_fail;
2059 prep_transhuge_page(new_page);
2060
2061 isolated = numamigrate_isolate_page(pgdat, page);
2062 if (!isolated) {
2063 put_page(new_page);
2064 goto out_fail;
2065 }
2066
2067
2068 __SetPageLocked(new_page);
2069 if (PageSwapBacked(page))
2070 __SetPageSwapBacked(new_page);
2071
2072
2073 new_page->mapping = page->mapping;
2074 new_page->index = page->index;
2075
2076 flush_cache_range(vma, start, start + HPAGE_PMD_SIZE);
2077 migrate_page_copy(new_page, page);
2078 WARN_ON(PageLRU(new_page));
2079
2080
2081 ptl = pmd_lock(mm, pmd);
2082 if (unlikely(!pmd_same(*pmd, entry) || !page_ref_freeze(page, 2))) {
2083 spin_unlock(ptl);
2084
2085
2086 if (TestClearPageActive(new_page))
2087 SetPageActive(page);
2088 if (TestClearPageUnevictable(new_page))
2089 SetPageUnevictable(page);
2090
2091 unlock_page(new_page);
2092 put_page(new_page);
2093
2094
2095 get_page(page);
2096 putback_lru_page(page);
2097 mod_node_page_state(page_pgdat(page),
2098 NR_ISOLATED_ANON + page_lru, -HPAGE_PMD_NR);
2099
2100 goto out_unlock;
2101 }
2102
2103 entry = mk_huge_pmd(new_page, vma->vm_page_prot);
2104 entry = maybe_pmd_mkwrite(pmd_mkdirty(entry), vma);
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114 page_add_anon_rmap(new_page, vma, start, true);
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126 set_pmd_at(mm, start, pmd, entry);
2127 update_mmu_cache_pmd(vma, address, &entry);
2128
2129 page_ref_unfreeze(page, 2);
2130 mlock_migrate_page(new_page, page);
2131 page_remove_rmap(page, true);
2132 set_page_owner_migrate_reason(new_page, MR_NUMA_MISPLACED);
2133
2134 spin_unlock(ptl);
2135
2136
2137 get_page(new_page);
2138 putback_lru_page(new_page);
2139
2140 unlock_page(new_page);
2141 unlock_page(page);
2142 put_page(page);
2143 put_page(page);
2144
2145 count_vm_events(PGMIGRATE_SUCCESS, HPAGE_PMD_NR);
2146 count_vm_numa_events(NUMA_PAGE_MIGRATE, HPAGE_PMD_NR);
2147
2148 mod_node_page_state(page_pgdat(page),
2149 NR_ISOLATED_ANON + page_lru,
2150 -HPAGE_PMD_NR);
2151 return isolated;
2152
2153out_fail:
2154 count_vm_events(PGMIGRATE_FAIL, HPAGE_PMD_NR);
2155 ptl = pmd_lock(mm, pmd);
2156 if (pmd_same(*pmd, entry)) {
2157 entry = pmd_modify(entry, vma->vm_page_prot);
2158 set_pmd_at(mm, start, pmd, entry);
2159 update_mmu_cache_pmd(vma, address, &entry);
2160 }
2161 spin_unlock(ptl);
2162
2163out_unlock:
2164 unlock_page(page);
2165 put_page(page);
2166 return 0;
2167}
2168#endif
2169
2170#endif
2171
2172#ifdef CONFIG_DEVICE_PRIVATE
2173static int migrate_vma_collect_hole(unsigned long start,
2174 unsigned long end,
2175 __always_unused int depth,
2176 struct mm_walk *walk)
2177{
2178 struct migrate_vma *migrate = walk->private;
2179 unsigned long addr;
2180
2181 for (addr = start; addr < end; addr += PAGE_SIZE) {
2182 migrate->src[migrate->npages] = MIGRATE_PFN_MIGRATE;
2183 migrate->dst[migrate->npages] = 0;
2184 migrate->npages++;
2185 migrate->cpages++;
2186 }
2187
2188 return 0;
2189}
2190
2191static int migrate_vma_collect_skip(unsigned long start,
2192 unsigned long end,
2193 struct mm_walk *walk)
2194{
2195 struct migrate_vma *migrate = walk->private;
2196 unsigned long addr;
2197
2198 for (addr = start; addr < end; addr += PAGE_SIZE) {
2199 migrate->dst[migrate->npages] = 0;
2200 migrate->src[migrate->npages++] = 0;
2201 }
2202
2203 return 0;
2204}
2205
2206static int migrate_vma_collect_pmd(pmd_t *pmdp,
2207 unsigned long start,
2208 unsigned long end,
2209 struct mm_walk *walk)
2210{
2211 struct migrate_vma *migrate = walk->private;
2212 struct vm_area_struct *vma = walk->vma;
2213 struct mm_struct *mm = vma->vm_mm;
2214 unsigned long addr = start, unmapped = 0;
2215 spinlock_t *ptl;
2216 pte_t *ptep;
2217
2218again:
2219 if (pmd_none(*pmdp))
2220 return migrate_vma_collect_hole(start, end, -1, walk);
2221
2222 if (pmd_trans_huge(*pmdp)) {
2223 struct page *page;
2224
2225 ptl = pmd_lock(mm, pmdp);
2226 if (unlikely(!pmd_trans_huge(*pmdp))) {
2227 spin_unlock(ptl);
2228 goto again;
2229 }
2230
2231 page = pmd_page(*pmdp);
2232 if (is_huge_zero_page(page)) {
2233 spin_unlock(ptl);
2234 split_huge_pmd(vma, pmdp, addr);
2235 if (pmd_trans_unstable(pmdp))
2236 return migrate_vma_collect_skip(start, end,
2237 walk);
2238 } else {
2239 int ret;
2240
2241 get_page(page);
2242 spin_unlock(ptl);
2243 if (unlikely(!trylock_page(page)))
2244 return migrate_vma_collect_skip(start, end,
2245 walk);
2246 ret = split_huge_page(page);
2247 unlock_page(page);
2248 put_page(page);
2249 if (ret)
2250 return migrate_vma_collect_skip(start, end,
2251 walk);
2252 if (pmd_none(*pmdp))
2253 return migrate_vma_collect_hole(start, end, -1,
2254 walk);
2255 }
2256 }
2257
2258 if (unlikely(pmd_bad(*pmdp)))
2259 return migrate_vma_collect_skip(start, end, walk);
2260
2261 ptep = pte_offset_map_lock(mm, pmdp, addr, &ptl);
2262 arch_enter_lazy_mmu_mode();
2263
2264 for (; addr < end; addr += PAGE_SIZE, ptep++) {
2265 unsigned long mpfn = 0, pfn;
2266 struct page *page;
2267 swp_entry_t entry;
2268 pte_t pte;
2269
2270 pte = *ptep;
2271
2272 if (pte_none(pte)) {
2273 mpfn = MIGRATE_PFN_MIGRATE;
2274 migrate->cpages++;
2275 goto next;
2276 }
2277
2278 if (!pte_present(pte)) {
2279
2280
2281
2282
2283
2284 entry = pte_to_swp_entry(pte);
2285 if (!is_device_private_entry(entry))
2286 goto next;
2287
2288 page = device_private_entry_to_page(entry);
2289 if (page->pgmap->owner != migrate->src_owner)
2290 goto next;
2291
2292 mpfn = migrate_pfn(page_to_pfn(page)) |
2293 MIGRATE_PFN_MIGRATE;
2294 if (is_write_device_private_entry(entry))
2295 mpfn |= MIGRATE_PFN_WRITE;
2296 } else {
2297 if (migrate->src_owner)
2298 goto next;
2299 pfn = pte_pfn(pte);
2300 if (is_zero_pfn(pfn)) {
2301 mpfn = MIGRATE_PFN_MIGRATE;
2302 migrate->cpages++;
2303 goto next;
2304 }
2305 page = vm_normal_page(migrate->vma, addr, pte);
2306 mpfn = migrate_pfn(pfn) | MIGRATE_PFN_MIGRATE;
2307 mpfn |= pte_write(pte) ? MIGRATE_PFN_WRITE : 0;
2308 }
2309
2310
2311 if (!page || !page->mapping || PageTransCompound(page)) {
2312 mpfn = 0;
2313 goto next;
2314 }
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325 get_page(page);
2326 migrate->cpages++;
2327
2328
2329
2330
2331
2332
2333 if (trylock_page(page)) {
2334 pte_t swp_pte;
2335
2336 mpfn |= MIGRATE_PFN_LOCKED;
2337 ptep_get_and_clear(mm, addr, ptep);
2338
2339
2340 entry = make_migration_entry(page, mpfn &
2341 MIGRATE_PFN_WRITE);
2342 swp_pte = swp_entry_to_pte(entry);
2343 if (pte_soft_dirty(pte))
2344 swp_pte = pte_swp_mksoft_dirty(swp_pte);
2345 if (pte_uffd_wp(pte))
2346 swp_pte = pte_swp_mkuffd_wp(swp_pte);
2347 set_pte_at(mm, addr, ptep, swp_pte);
2348
2349
2350
2351
2352
2353
2354 page_remove_rmap(page, false);
2355 put_page(page);
2356
2357 if (pte_present(pte))
2358 unmapped++;
2359 }
2360
2361next:
2362 migrate->dst[migrate->npages] = 0;
2363 migrate->src[migrate->npages++] = mpfn;
2364 }
2365 arch_leave_lazy_mmu_mode();
2366 pte_unmap_unlock(ptep - 1, ptl);
2367
2368
2369 if (unmapped)
2370 flush_tlb_range(walk->vma, start, end);
2371
2372 return 0;
2373}
2374
2375static const struct mm_walk_ops migrate_vma_walk_ops = {
2376 .pmd_entry = migrate_vma_collect_pmd,
2377 .pte_hole = migrate_vma_collect_hole,
2378};
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388static void migrate_vma_collect(struct migrate_vma *migrate)
2389{
2390 struct mmu_notifier_range range;
2391
2392 mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, NULL,
2393 migrate->vma->vm_mm, migrate->start, migrate->end);
2394 mmu_notifier_invalidate_range_start(&range);
2395
2396 walk_page_range(migrate->vma->vm_mm, migrate->start, migrate->end,
2397 &migrate_vma_walk_ops, migrate);
2398
2399 mmu_notifier_invalidate_range_end(&range);
2400 migrate->end = migrate->start + (migrate->npages << PAGE_SHIFT);
2401}
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411static bool migrate_vma_check_page(struct page *page)
2412{
2413
2414
2415
2416
2417
2418 int extra = 1;
2419
2420
2421
2422
2423
2424
2425 if (PageCompound(page))
2426 return false;
2427
2428
2429 if (is_zone_device_page(page)) {
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443 return is_device_private_page(page);
2444 }
2445
2446
2447 if (page_mapping(page))
2448 extra += 1 + page_has_private(page);
2449
2450 if ((page_count(page) - extra) > page_mapcount(page))
2451 return false;
2452
2453 return true;
2454}
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465static void migrate_vma_prepare(struct migrate_vma *migrate)
2466{
2467 const unsigned long npages = migrate->npages;
2468 const unsigned long start = migrate->start;
2469 unsigned long addr, i, restore = 0;
2470 bool allow_drain = true;
2471
2472 lru_add_drain();
2473
2474 for (i = 0; (i < npages) && migrate->cpages; i++) {
2475 struct page *page = migrate_pfn_to_page(migrate->src[i]);
2476 bool remap = true;
2477
2478 if (!page)
2479 continue;
2480
2481 if (!(migrate->src[i] & MIGRATE_PFN_LOCKED)) {
2482
2483
2484
2485
2486
2487
2488
2489
2490 if (!trylock_page(page)) {
2491 migrate->src[i] = 0;
2492 migrate->cpages--;
2493 put_page(page);
2494 continue;
2495 }
2496 remap = false;
2497 migrate->src[i] |= MIGRATE_PFN_LOCKED;
2498 }
2499
2500
2501 if (!is_zone_device_page(page)) {
2502 if (!PageLRU(page) && allow_drain) {
2503
2504 lru_add_drain_all();
2505 allow_drain = false;
2506 }
2507
2508 if (isolate_lru_page(page)) {
2509 if (remap) {
2510 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
2511 migrate->cpages--;
2512 restore++;
2513 } else {
2514 migrate->src[i] = 0;
2515 unlock_page(page);
2516 migrate->cpages--;
2517 put_page(page);
2518 }
2519 continue;
2520 }
2521
2522
2523 put_page(page);
2524 }
2525
2526 if (!migrate_vma_check_page(page)) {
2527 if (remap) {
2528 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
2529 migrate->cpages--;
2530 restore++;
2531
2532 if (!is_zone_device_page(page)) {
2533 get_page(page);
2534 putback_lru_page(page);
2535 }
2536 } else {
2537 migrate->src[i] = 0;
2538 unlock_page(page);
2539 migrate->cpages--;
2540
2541 if (!is_zone_device_page(page))
2542 putback_lru_page(page);
2543 else
2544 put_page(page);
2545 }
2546 }
2547 }
2548
2549 for (i = 0, addr = start; i < npages && restore; i++, addr += PAGE_SIZE) {
2550 struct page *page = migrate_pfn_to_page(migrate->src[i]);
2551
2552 if (!page || (migrate->src[i] & MIGRATE_PFN_MIGRATE))
2553 continue;
2554
2555 remove_migration_pte(page, migrate->vma, addr, page);
2556
2557 migrate->src[i] = 0;
2558 unlock_page(page);
2559 put_page(page);
2560 restore--;
2561 }
2562}
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575static void migrate_vma_unmap(struct migrate_vma *migrate)
2576{
2577 int flags = TTU_MIGRATION | TTU_IGNORE_MLOCK | TTU_IGNORE_ACCESS;
2578 const unsigned long npages = migrate->npages;
2579 const unsigned long start = migrate->start;
2580 unsigned long addr, i, restore = 0;
2581
2582 for (i = 0; i < npages; i++) {
2583 struct page *page = migrate_pfn_to_page(migrate->src[i]);
2584
2585 if (!page || !(migrate->src[i] & MIGRATE_PFN_MIGRATE))
2586 continue;
2587
2588 if (page_mapped(page)) {
2589 try_to_unmap(page, flags);
2590 if (page_mapped(page))
2591 goto restore;
2592 }
2593
2594 if (migrate_vma_check_page(page))
2595 continue;
2596
2597restore:
2598 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
2599 migrate->cpages--;
2600 restore++;
2601 }
2602
2603 for (addr = start, i = 0; i < npages && restore; addr += PAGE_SIZE, i++) {
2604 struct page *page = migrate_pfn_to_page(migrate->src[i]);
2605
2606 if (!page || (migrate->src[i] & MIGRATE_PFN_MIGRATE))
2607 continue;
2608
2609 remove_migration_ptes(page, page, false);
2610
2611 migrate->src[i] = 0;
2612 unlock_page(page);
2613 restore--;
2614
2615 if (is_zone_device_page(page))
2616 put_page(page);
2617 else
2618 putback_lru_page(page);
2619 }
2620}
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686int migrate_vma_setup(struct migrate_vma *args)
2687{
2688 long nr_pages = (args->end - args->start) >> PAGE_SHIFT;
2689
2690 args->start &= PAGE_MASK;
2691 args->end &= PAGE_MASK;
2692 if (!args->vma || is_vm_hugetlb_page(args->vma) ||
2693 (args->vma->vm_flags & VM_SPECIAL) || vma_is_dax(args->vma))
2694 return -EINVAL;
2695 if (nr_pages <= 0)
2696 return -EINVAL;
2697 if (args->start < args->vma->vm_start ||
2698 args->start >= args->vma->vm_end)
2699 return -EINVAL;
2700 if (args->end <= args->vma->vm_start || args->end > args->vma->vm_end)
2701 return -EINVAL;
2702 if (!args->src || !args->dst)
2703 return -EINVAL;
2704
2705 memset(args->src, 0, sizeof(*args->src) * nr_pages);
2706 args->cpages = 0;
2707 args->npages = 0;
2708
2709 migrate_vma_collect(args);
2710
2711 if (args->cpages)
2712 migrate_vma_prepare(args);
2713 if (args->cpages)
2714 migrate_vma_unmap(args);
2715
2716
2717
2718
2719
2720
2721 return 0;
2722
2723}
2724EXPORT_SYMBOL(migrate_vma_setup);
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734static void migrate_vma_insert_page(struct migrate_vma *migrate,
2735 unsigned long addr,
2736 struct page *page,
2737 unsigned long *src,
2738 unsigned long *dst)
2739{
2740 struct vm_area_struct *vma = migrate->vma;
2741 struct mm_struct *mm = vma->vm_mm;
2742 struct mem_cgroup *memcg;
2743 bool flush = false;
2744 spinlock_t *ptl;
2745 pte_t entry;
2746 pgd_t *pgdp;
2747 p4d_t *p4dp;
2748 pud_t *pudp;
2749 pmd_t *pmdp;
2750 pte_t *ptep;
2751
2752
2753 if (!vma_is_anonymous(vma))
2754 goto abort;
2755
2756 pgdp = pgd_offset(mm, addr);
2757 p4dp = p4d_alloc(mm, pgdp, addr);
2758 if (!p4dp)
2759 goto abort;
2760 pudp = pud_alloc(mm, p4dp, addr);
2761 if (!pudp)
2762 goto abort;
2763 pmdp = pmd_alloc(mm, pudp, addr);
2764 if (!pmdp)
2765 goto abort;
2766
2767 if (pmd_trans_huge(*pmdp) || pmd_devmap(*pmdp))
2768 goto abort;
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780 if (pte_alloc(mm, pmdp))
2781 goto abort;
2782
2783
2784 if (unlikely(pmd_trans_unstable(pmdp)))
2785 goto abort;
2786
2787 if (unlikely(anon_vma_prepare(vma)))
2788 goto abort;
2789 if (mem_cgroup_try_charge(page, vma->vm_mm, GFP_KERNEL, &memcg, false))
2790 goto abort;
2791
2792
2793
2794
2795
2796
2797 __SetPageUptodate(page);
2798
2799 if (is_zone_device_page(page)) {
2800 if (is_device_private_page(page)) {
2801 swp_entry_t swp_entry;
2802
2803 swp_entry = make_device_private_entry(page, vma->vm_flags & VM_WRITE);
2804 entry = swp_entry_to_pte(swp_entry);
2805 }
2806 } else {
2807 entry = mk_pte(page, vma->vm_page_prot);
2808 if (vma->vm_flags & VM_WRITE)
2809 entry = pte_mkwrite(pte_mkdirty(entry));
2810 }
2811
2812 ptep = pte_offset_map_lock(mm, pmdp, addr, &ptl);
2813
2814 if (check_stable_address_space(mm))
2815 goto unlock_abort;
2816
2817 if (pte_present(*ptep)) {
2818 unsigned long pfn = pte_pfn(*ptep);
2819
2820 if (!is_zero_pfn(pfn))
2821 goto unlock_abort;
2822 flush = true;
2823 } else if (!pte_none(*ptep))
2824 goto unlock_abort;
2825
2826
2827
2828
2829
2830 if (userfaultfd_missing(vma))
2831 goto unlock_abort;
2832
2833 inc_mm_counter(mm, MM_ANONPAGES);
2834 page_add_new_anon_rmap(page, vma, addr, false);
2835 mem_cgroup_commit_charge(page, memcg, false, false);
2836 if (!is_zone_device_page(page))
2837 lru_cache_add_active_or_unevictable(page, vma);
2838 get_page(page);
2839
2840 if (flush) {
2841 flush_cache_page(vma, addr, pte_pfn(*ptep));
2842 ptep_clear_flush_notify(vma, addr, ptep);
2843 set_pte_at_notify(mm, addr, ptep, entry);
2844 update_mmu_cache(vma, addr, ptep);
2845 } else {
2846
2847 set_pte_at(mm, addr, ptep, entry);
2848 update_mmu_cache(vma, addr, ptep);
2849 }
2850
2851 pte_unmap_unlock(ptep, ptl);
2852 *src = MIGRATE_PFN_MIGRATE;
2853 return;
2854
2855unlock_abort:
2856 pte_unmap_unlock(ptep, ptl);
2857 mem_cgroup_cancel_charge(page, memcg, false);
2858abort:
2859 *src &= ~MIGRATE_PFN_MIGRATE;
2860}
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870void migrate_vma_pages(struct migrate_vma *migrate)
2871{
2872 const unsigned long npages = migrate->npages;
2873 const unsigned long start = migrate->start;
2874 struct mmu_notifier_range range;
2875 unsigned long addr, i;
2876 bool notified = false;
2877
2878 for (i = 0, addr = start; i < npages; addr += PAGE_SIZE, i++) {
2879 struct page *newpage = migrate_pfn_to_page(migrate->dst[i]);
2880 struct page *page = migrate_pfn_to_page(migrate->src[i]);
2881 struct address_space *mapping;
2882 int r;
2883
2884 if (!newpage) {
2885 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
2886 continue;
2887 }
2888
2889 if (!page) {
2890 if (!(migrate->src[i] & MIGRATE_PFN_MIGRATE))
2891 continue;
2892 if (!notified) {
2893 notified = true;
2894
2895 mmu_notifier_range_init(&range,
2896 MMU_NOTIFY_CLEAR, 0,
2897 NULL,
2898 migrate->vma->vm_mm,
2899 addr, migrate->end);
2900 mmu_notifier_invalidate_range_start(&range);
2901 }
2902 migrate_vma_insert_page(migrate, addr, newpage,
2903 &migrate->src[i],
2904 &migrate->dst[i]);
2905 continue;
2906 }
2907
2908 mapping = page_mapping(page);
2909
2910 if (is_zone_device_page(newpage)) {
2911 if (is_device_private_page(newpage)) {
2912
2913
2914
2915
2916 if (mapping) {
2917 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
2918 continue;
2919 }
2920 } else {
2921
2922
2923
2924
2925 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
2926 continue;
2927 }
2928 }
2929
2930 r = migrate_page(mapping, newpage, page, MIGRATE_SYNC_NO_COPY);
2931 if (r != MIGRATEPAGE_SUCCESS)
2932 migrate->src[i] &= ~MIGRATE_PFN_MIGRATE;
2933 }
2934
2935
2936
2937
2938
2939
2940 if (notified)
2941 mmu_notifier_invalidate_range_only_end(&range);
2942}
2943EXPORT_SYMBOL(migrate_vma_pages);
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956void migrate_vma_finalize(struct migrate_vma *migrate)
2957{
2958 const unsigned long npages = migrate->npages;
2959 unsigned long i;
2960
2961 for (i = 0; i < npages; i++) {
2962 struct page *newpage = migrate_pfn_to_page(migrate->dst[i]);
2963 struct page *page = migrate_pfn_to_page(migrate->src[i]);
2964
2965 if (!page) {
2966 if (newpage) {
2967 unlock_page(newpage);
2968 put_page(newpage);
2969 }
2970 continue;
2971 }
2972
2973 if (!(migrate->src[i] & MIGRATE_PFN_MIGRATE) || !newpage) {
2974 if (newpage) {
2975 unlock_page(newpage);
2976 put_page(newpage);
2977 }
2978 newpage = page;
2979 }
2980
2981 remove_migration_ptes(page, newpage, false);
2982 unlock_page(page);
2983 migrate->cpages--;
2984
2985 if (is_zone_device_page(page))
2986 put_page(page);
2987 else
2988 putback_lru_page(page);
2989
2990 if (newpage != page) {
2991 unlock_page(newpage);
2992 if (is_zone_device_page(newpage))
2993 put_page(newpage);
2994 else
2995 putback_lru_page(newpage);
2996 }
2997 }
2998}
2999EXPORT_SYMBOL(migrate_vma_finalize);
3000#endif
3001