aboutsummaryrefslogtreecommitdiffstats
path: root/mm/migrate.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/migrate.c')
-rw-r--r--mm/migrate.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/mm/migrate.c b/mm/migrate.c
index 568284ec75d4..fdaf0818fb30 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -1773,7 +1773,10 @@ int migrate_misplaced_transhuge_page(struct mm_struct *mm,
1773 put_page(new_page); 1773 put_page(new_page);
1774 goto out_fail; 1774 goto out_fail;
1775 } 1775 }
1776 1776 /*
1777 * We are not sure a pending tlb flush here is for a huge page
1778 * mapping or not. Hence use the tlb range variant
1779 */
1777 if (mm_tlb_flush_pending(mm)) 1780 if (mm_tlb_flush_pending(mm))
1778 flush_tlb_range(vma, mmun_start, mmun_end); 1781 flush_tlb_range(vma, mmun_start, mmun_end);
1779 1782
@@ -1829,12 +1832,11 @@ fail_putback:
1829 page_add_anon_rmap(new_page, vma, mmun_start, true); 1832 page_add_anon_rmap(new_page, vma, mmun_start, true);
1830 pmdp_huge_clear_flush_notify(vma, mmun_start, pmd); 1833 pmdp_huge_clear_flush_notify(vma, mmun_start, pmd);
1831 set_pmd_at(mm, mmun_start, pmd, entry); 1834 set_pmd_at(mm, mmun_start, pmd, entry);
1832 flush_tlb_range(vma, mmun_start, mmun_end);
1833 update_mmu_cache_pmd(vma, address, &entry); 1835 update_mmu_cache_pmd(vma, address, &entry);
1834 1836
1835 if (page_count(page) != 2) { 1837 if (page_count(page) != 2) {
1836 set_pmd_at(mm, mmun_start, pmd, orig_entry); 1838 set_pmd_at(mm, mmun_start, pmd, orig_entry);
1837 flush_tlb_range(vma, mmun_start, mmun_end); 1839 flush_pmd_tlb_range(vma, mmun_start, mmun_end);
1838 mmu_notifier_invalidate_range(mm, mmun_start, mmun_end); 1840 mmu_notifier_invalidate_range(mm, mmun_start, mmun_end);
1839 update_mmu_cache_pmd(vma, address, &entry); 1841 update_mmu_cache_pmd(vma, address, &entry);
1840 page_remove_rmap(new_page, true); 1842 page_remove_rmap(new_page, true);