The right interface to use to set a hugetlb pte entry is set_huge_pte_at. Use
that instead of set_pte_at.

Signed-off-by: Aneesh Kumar K.V <aneesh.ku...@linux.vnet.ibm.com>
---
 mm/migrate.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/mm/migrate.c b/mm/migrate.c
index 9a0897a14d37..4c272ac6fe53 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -224,25 +224,26 @@ static int 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);
 
-- 
2.7.4

Reply via email to