diff options
-rw-r--r-- | mm/migrate.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index ff537749d3b4..44c1fa9d6f54 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -443,6 +443,8 @@ int migrate_huge_page_move_mapping(struct address_space *mapping, | |||
443 | */ | 443 | */ |
444 | void migrate_page_copy(struct page *newpage, struct page *page) | 444 | void migrate_page_copy(struct page *newpage, struct page *page) |
445 | { | 445 | { |
446 | int cpupid; | ||
447 | |||
446 | if (PageHuge(page) || PageTransHuge(page)) | 448 | if (PageHuge(page) || PageTransHuge(page)) |
447 | copy_huge_page(newpage, page); | 449 | copy_huge_page(newpage, page); |
448 | else | 450 | else |
@@ -479,6 +481,13 @@ void migrate_page_copy(struct page *newpage, struct page *page) | |||
479 | __set_page_dirty_nobuffers(newpage); | 481 | __set_page_dirty_nobuffers(newpage); |
480 | } | 482 | } |
481 | 483 | ||
484 | /* | ||
485 | * Copy NUMA information to the new page, to prevent over-eager | ||
486 | * future migrations of this same page. | ||
487 | */ | ||
488 | cpupid = page_cpupid_xchg_last(page, -1); | ||
489 | page_cpupid_xchg_last(newpage, cpupid); | ||
490 | |||
482 | mlock_migrate_page(newpage, page); | 491 | mlock_migrate_page(newpage, page); |
483 | ksm_migrate_page(newpage, page); | 492 | ksm_migrate_page(newpage, page); |
484 | /* | 493 | /* |