|
@@ -227,25 +227,26 @@ static bool remove_migration_pte(struct page *page, struct vm_area_struct *vma,
|
|
|
if (is_write_migration_entry(entry))
|
|
|
pte = maybe_mkwrite(pte, vma);
|
|
|
|
|
|
+ flush_dcache_page(new);
|
|
|
#ifdef CONFIG_HUGETLB_PAGE
|
|
|
if (PageHuge(new)) {
|
|
|
pte = pte_mkhuge(pte);
|
|
|
pte = arch_make_huge_pte(pte, vma, new, 0);
|
|
|
- }
|
|
|
-#endif
|
|
|
- flush_dcache_page(new);
|
|
|
- set_pte_at(vma->vm_mm, pvmw.address, pvmw.pte, pte);
|
|
|
-
|
|
|
- if (PageHuge(new)) {
|
|
|
+ set_huge_pte_at(vma->vm_mm, pvmw.address, pvmw.pte, pte);
|
|
|
if (PageAnon(new))
|
|
|
hugepage_add_anon_rmap(new, vma, pvmw.address);
|
|
|
else
|
|
|
page_dup_rmap(new, true);
|
|
|
- } else if (PageAnon(new))
|
|
|
- page_add_anon_rmap(new, vma, pvmw.address, false);
|
|
|
- else
|
|
|
- page_add_file_rmap(new, false);
|
|
|
+ } else
|
|
|
+#endif
|
|
|
+ {
|
|
|
+ set_pte_at(vma->vm_mm, pvmw.address, pvmw.pte, pte);
|
|
|
|
|
|
+ if (PageAnon(new))
|
|
|
+ page_add_anon_rmap(new, vma, pvmw.address, false);
|
|
|
+ else
|
|
|
+ page_add_file_rmap(new, false);
|
|
|
+ }
|
|
|
if (vma->vm_flags & VM_LOCKED && !PageTransCompound(new))
|
|
|
mlock_vma_page(new);
|
|
|
|