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