diff options
| -rw-r--r-- | arch/ia64/mm/init.c | 9 | ||||
| -rw-r--r-- | include/linux/memory_hotplug.h | 2 | ||||
| -rw-r--r-- | include/linux/mm.h | 4 | ||||
| -rw-r--r-- | kernel/memremap.c | 2 | ||||
| -rw-r--r-- | mm/hmm.c | 2 | ||||
| -rw-r--r-- | mm/memory_hotplug.c | 9 | ||||
| -rw-r--r-- | mm/page_alloc.c | 6 |
7 files changed, 18 insertions, 16 deletions
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 6a8ce9e1536e..18278b448530 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c | |||
| @@ -501,7 +501,7 @@ virtual_memmap_init(u64 start, u64 end, void *arg) | |||
| 501 | if (map_start < map_end) | 501 | if (map_start < map_end) |
| 502 | memmap_init_zone((unsigned long)(map_end - map_start), | 502 | memmap_init_zone((unsigned long)(map_end - map_start), |
| 503 | args->nid, args->zone, page_to_pfn(map_start), | 503 | args->nid, args->zone, page_to_pfn(map_start), |
| 504 | MEMMAP_EARLY); | 504 | MEMMAP_EARLY, NULL); |
| 505 | return 0; | 505 | return 0; |
| 506 | } | 506 | } |
| 507 | 507 | ||
| @@ -509,9 +509,10 @@ void __meminit | |||
| 509 | memmap_init (unsigned long size, int nid, unsigned long zone, | 509 | memmap_init (unsigned long size, int nid, unsigned long zone, |
| 510 | unsigned long start_pfn) | 510 | unsigned long start_pfn) |
| 511 | { | 511 | { |
| 512 | if (!vmem_map) | 512 | if (!vmem_map) { |
| 513 | memmap_init_zone(size, nid, zone, start_pfn, MEMMAP_EARLY); | 513 | memmap_init_zone(size, nid, zone, start_pfn, MEMMAP_EARLY, |
| 514 | else { | 514 | NULL); |
| 515 | } else { | ||
| 515 | struct page *start; | 516 | struct page *start; |
| 516 | struct memmap_init_callback_data args; | 517 | struct memmap_init_callback_data args; |
| 517 | 518 | ||
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 20dd98ad44a0..aba5f86eb038 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h | |||
| @@ -324,7 +324,7 @@ extern int add_memory_resource(int nid, struct resource *resource, bool online); | |||
| 324 | extern int arch_add_memory(int nid, u64 start, u64 size, | 324 | extern int arch_add_memory(int nid, u64 start, u64 size, |
| 325 | struct vmem_altmap *altmap, bool want_memblock); | 325 | struct vmem_altmap *altmap, bool want_memblock); |
| 326 | extern void move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, | 326 | extern void move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, |
| 327 | unsigned long nr_pages); | 327 | unsigned long nr_pages, struct vmem_altmap *altmap); |
| 328 | extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages); | 328 | extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages); |
| 329 | extern bool is_memblock_offlined(struct memory_block *mem); | 329 | extern bool is_memblock_offlined(struct memory_block *mem); |
| 330 | extern void remove_memory(int nid, u64 start, u64 size); | 330 | extern void remove_memory(int nid, u64 start, u64 size); |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 9d4cd4c1dc6d..fd01135324b6 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -2069,8 +2069,8 @@ static inline void zero_resv_unavail(void) {} | |||
| 2069 | #endif | 2069 | #endif |
| 2070 | 2070 | ||
| 2071 | extern void set_dma_reserve(unsigned long new_dma_reserve); | 2071 | extern void set_dma_reserve(unsigned long new_dma_reserve); |
| 2072 | extern void memmap_init_zone(unsigned long, int, unsigned long, | 2072 | extern void memmap_init_zone(unsigned long, int, unsigned long, unsigned long, |
| 2073 | unsigned long, enum memmap_context); | 2073 | enum memmap_context, struct vmem_altmap *); |
| 2074 | extern void setup_per_zone_wmarks(void); | 2074 | extern void setup_per_zone_wmarks(void); |
| 2075 | extern int __meminit init_per_zone_wmark_min(void); | 2075 | extern int __meminit init_per_zone_wmark_min(void); |
| 2076 | extern void mem_init(void); | 2076 | extern void mem_init(void); |
diff --git a/kernel/memremap.c b/kernel/memremap.c index 380fca1c4a02..64b12c806cc5 100644 --- a/kernel/memremap.c +++ b/kernel/memremap.c | |||
| @@ -432,7 +432,7 @@ void *devm_memremap_pages(struct device *dev, struct resource *res, | |||
| 432 | if (!error) | 432 | if (!error) |
| 433 | move_pfn_range_to_zone(&NODE_DATA(nid)->node_zones[ZONE_DEVICE], | 433 | move_pfn_range_to_zone(&NODE_DATA(nid)->node_zones[ZONE_DEVICE], |
| 434 | align_start >> PAGE_SHIFT, | 434 | align_start >> PAGE_SHIFT, |
| 435 | align_size >> PAGE_SHIFT); | 435 | align_size >> PAGE_SHIFT, altmap); |
| 436 | mem_hotplug_done(); | 436 | mem_hotplug_done(); |
| 437 | if (error) | 437 | if (error) |
| 438 | goto err_add_memory; | 438 | goto err_add_memory; |
| @@ -942,7 +942,7 @@ static int hmm_devmem_pages_create(struct hmm_devmem *devmem) | |||
| 942 | } | 942 | } |
| 943 | move_pfn_range_to_zone(&NODE_DATA(nid)->node_zones[ZONE_DEVICE], | 943 | move_pfn_range_to_zone(&NODE_DATA(nid)->node_zones[ZONE_DEVICE], |
| 944 | align_start >> PAGE_SHIFT, | 944 | align_start >> PAGE_SHIFT, |
| 945 | align_size >> PAGE_SHIFT); | 945 | align_size >> PAGE_SHIFT, NULL); |
| 946 | mem_hotplug_done(); | 946 | mem_hotplug_done(); |
| 947 | 947 | ||
| 948 | for (pfn = devmem->pfn_first; pfn < devmem->pfn_last; pfn++) { | 948 | for (pfn = devmem->pfn_first; pfn < devmem->pfn_last; pfn++) { |
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index a8dde9734120..12df8a5fadcc 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c | |||
| @@ -798,8 +798,8 @@ static void __meminit resize_pgdat_range(struct pglist_data *pgdat, unsigned lon | |||
| 798 | pgdat->node_spanned_pages = max(start_pfn + nr_pages, old_end_pfn) - pgdat->node_start_pfn; | 798 | pgdat->node_spanned_pages = max(start_pfn + nr_pages, old_end_pfn) - pgdat->node_start_pfn; |
| 799 | } | 799 | } |
| 800 | 800 | ||
| 801 | void __ref move_pfn_range_to_zone(struct zone *zone, | 801 | void __ref move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, |
| 802 | unsigned long start_pfn, unsigned long nr_pages) | 802 | unsigned long nr_pages, struct vmem_altmap *altmap) |
| 803 | { | 803 | { |
| 804 | struct pglist_data *pgdat = zone->zone_pgdat; | 804 | struct pglist_data *pgdat = zone->zone_pgdat; |
| 805 | int nid = pgdat->node_id; | 805 | int nid = pgdat->node_id; |
| @@ -824,7 +824,8 @@ void __ref move_pfn_range_to_zone(struct zone *zone, | |||
| 824 | * expects the zone spans the pfn range. All the pages in the range | 824 | * expects the zone spans the pfn range. All the pages in the range |
| 825 | * are reserved so nobody should be touching them so we should be safe | 825 | * are reserved so nobody should be touching them so we should be safe |
| 826 | */ | 826 | */ |
| 827 | memmap_init_zone(nr_pages, nid, zone_idx(zone), start_pfn, MEMMAP_HOTPLUG); | 827 | memmap_init_zone(nr_pages, nid, zone_idx(zone), start_pfn, |
| 828 | MEMMAP_HOTPLUG, altmap); | ||
| 828 | 829 | ||
| 829 | set_zone_contiguous(zone); | 830 | set_zone_contiguous(zone); |
| 830 | } | 831 | } |
| @@ -896,7 +897,7 @@ static struct zone * __meminit move_pfn_range(int online_type, int nid, | |||
| 896 | struct zone *zone; | 897 | struct zone *zone; |
| 897 | 898 | ||
| 898 | zone = zone_for_pfn_range(online_type, nid, start_pfn, nr_pages); | 899 | zone = zone_for_pfn_range(online_type, nid, start_pfn, nr_pages); |
| 899 | move_pfn_range_to_zone(zone, start_pfn, nr_pages); | 900 | move_pfn_range_to_zone(zone, start_pfn, nr_pages, NULL); |
| 900 | return zone; | 901 | return zone; |
| 901 | } | 902 | } |
| 902 | 903 | ||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 7e5e775e97f4..1748dd4a4b1b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
| @@ -5314,9 +5314,9 @@ void __ref build_all_zonelists(pg_data_t *pgdat) | |||
| 5314 | * done. Non-atomic initialization, single-pass. | 5314 | * done. Non-atomic initialization, single-pass. |
| 5315 | */ | 5315 | */ |
| 5316 | void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, | 5316 | void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, |
| 5317 | unsigned long start_pfn, enum memmap_context context) | 5317 | unsigned long start_pfn, enum memmap_context context, |
| 5318 | struct vmem_altmap *altmap) | ||
| 5318 | { | 5319 | { |
| 5319 | struct vmem_altmap *altmap = to_vmem_altmap(__pfn_to_phys(start_pfn)); | ||
| 5320 | unsigned long end_pfn = start_pfn + size; | 5320 | unsigned long end_pfn = start_pfn + size; |
| 5321 | pg_data_t *pgdat = NODE_DATA(nid); | 5321 | pg_data_t *pgdat = NODE_DATA(nid); |
| 5322 | unsigned long pfn; | 5322 | unsigned long pfn; |
| @@ -5417,7 +5417,7 @@ static void __meminit zone_init_free_lists(struct zone *zone) | |||
| 5417 | 5417 | ||
| 5418 | #ifndef __HAVE_ARCH_MEMMAP_INIT | 5418 | #ifndef __HAVE_ARCH_MEMMAP_INIT |
| 5419 | #define memmap_init(size, nid, zone, start_pfn) \ | 5419 | #define memmap_init(size, nid, zone, start_pfn) \ |
| 5420 | memmap_init_zone((size), (nid), (zone), (start_pfn), MEMMAP_EARLY) | 5420 | memmap_init_zone((size), (nid), (zone), (start_pfn), MEMMAP_EARLY, NULL) |
| 5421 | #endif | 5421 | #endif |
| 5422 | 5422 | ||
| 5423 | static int zone_batchsize(struct zone *zone) | 5423 | static int zone_batchsize(struct zone *zone) |
