diff options
| -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; |
