diff options
Diffstat (limited to 'mm/page_alloc.c')
| -rw-r--r-- | mm/page_alloc.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index af982f7cdb2a..e293c58bea58 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
| @@ -694,6 +694,9 @@ static int move_freepages(struct zone *zone, | |||
| 694 | #endif | 694 | #endif |
| 695 | 695 | ||
| 696 | for (page = start_page; page <= end_page;) { | 696 | for (page = start_page; page <= end_page;) { |
| 697 | /* Make sure we are not inadvertently changing nodes */ | ||
| 698 | VM_BUG_ON(page_to_nid(page) != zone_to_nid(zone)); | ||
| 699 | |||
| 697 | if (!pfn_valid_within(page_to_pfn(page))) { | 700 | if (!pfn_valid_within(page_to_pfn(page))) { |
| 698 | page++; | 701 | page++; |
| 699 | continue; | 702 | continue; |
| @@ -2516,6 +2519,10 @@ static void setup_zone_migrate_reserve(struct zone *zone) | |||
| 2516 | continue; | 2519 | continue; |
| 2517 | page = pfn_to_page(pfn); | 2520 | page = pfn_to_page(pfn); |
| 2518 | 2521 | ||
| 2522 | /* Watch out for overlapping nodes */ | ||
| 2523 | if (page_to_nid(page) != zone_to_nid(zone)) | ||
| 2524 | continue; | ||
| 2525 | |||
| 2519 | /* Blocks with reserved pages will never free, skip them. */ | 2526 | /* Blocks with reserved pages will never free, skip them. */ |
| 2520 | if (PageReserved(page)) | 2527 | if (PageReserved(page)) |
| 2521 | continue; | 2528 | continue; |
| @@ -4064,7 +4071,7 @@ void __init set_dma_reserve(unsigned long new_dma_reserve) | |||
| 4064 | } | 4071 | } |
| 4065 | 4072 | ||
| 4066 | #ifndef CONFIG_NEED_MULTIPLE_NODES | 4073 | #ifndef CONFIG_NEED_MULTIPLE_NODES |
| 4067 | struct pglist_data contig_page_data = { .bdata = &bootmem_node_data[0] }; | 4074 | struct pglist_data __refdata contig_page_data = { .bdata = &bootmem_node_data[0] }; |
| 4068 | EXPORT_SYMBOL(contig_page_data); | 4075 | EXPORT_SYMBOL(contig_page_data); |
| 4069 | #endif | 4076 | #endif |
| 4070 | 4077 | ||
