diff options
Diffstat (limited to 'mm/migrate.c')
-rw-r--r-- | mm/migrate.c | 11 |
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 | } |
999 | out: | 1004 | out: |
1000 | return rc; | 1005 | return rc; |