summaryrefslogtreecommitdiffstats
path: root/mm/migrate.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/migrate.c')
-rw-r--r--mm/migrate.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/mm/migrate.c b/mm/migrate.c
index ac6f4939bb59..663a5449367a 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -248,10 +248,8 @@ static bool remove_migration_pte(struct page *page, struct vm_area_struct *vma,
248 pte = swp_entry_to_pte(entry); 248 pte = swp_entry_to_pte(entry);
249 } else if (is_device_public_page(new)) { 249 } else if (is_device_public_page(new)) {
250 pte = pte_mkdevmap(pte); 250 pte = pte_mkdevmap(pte);
251 flush_dcache_page(new);
252 } 251 }
253 } else 252 }
254 flush_dcache_page(new);
255 253
256#ifdef CONFIG_HUGETLB_PAGE 254#ifdef CONFIG_HUGETLB_PAGE
257 if (PageHuge(new)) { 255 if (PageHuge(new)) {
@@ -995,6 +993,13 @@ static int move_to_new_page(struct page *newpage, struct page *page,
995 */ 993 */
996 if (!PageMappingFlags(page)) 994 if (!PageMappingFlags(page))
997 page->mapping = NULL; 995 page->mapping = NULL;
996
997 if (unlikely(is_zone_device_page(newpage))) {
998 if (is_device_public_page(newpage))
999 flush_dcache_page(newpage);
1000 } else
1001 flush_dcache_page(newpage);
1002
998 } 1003 }
999out: 1004out:
1000 return rc; 1005 return rc;