]> asedeno.scripts.mit.edu Git - linux.git/blob - mm/memory_hotplug.c
mm/memory_hotplug: create memory block devices after arch_add_memory()
[linux.git] / mm / memory_hotplug.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  *  linux/mm/memory_hotplug.c
4  *
5  *  Copyright (C)
6  */
7
8 #include <linux/stddef.h>
9 #include <linux/mm.h>
10 #include <linux/sched/signal.h>
11 #include <linux/swap.h>
12 #include <linux/interrupt.h>
13 #include <linux/pagemap.h>
14 #include <linux/compiler.h>
15 #include <linux/export.h>
16 #include <linux/pagevec.h>
17 #include <linux/writeback.h>
18 #include <linux/slab.h>
19 #include <linux/sysctl.h>
20 #include <linux/cpu.h>
21 #include <linux/memory.h>
22 #include <linux/memremap.h>
23 #include <linux/memory_hotplug.h>
24 #include <linux/highmem.h>
25 #include <linux/vmalloc.h>
26 #include <linux/ioport.h>
27 #include <linux/delay.h>
28 #include <linux/migrate.h>
29 #include <linux/page-isolation.h>
30 #include <linux/pfn.h>
31 #include <linux/suspend.h>
32 #include <linux/mm_inline.h>
33 #include <linux/firmware-map.h>
34 #include <linux/stop_machine.h>
35 #include <linux/hugetlb.h>
36 #include <linux/memblock.h>
37 #include <linux/compaction.h>
38 #include <linux/rmap.h>
39
40 #include <asm/tlbflush.h>
41
42 #include "internal.h"
43 #include "shuffle.h"
44
45 /*
46  * online_page_callback contains pointer to current page onlining function.
47  * Initially it is generic_online_page(). If it is required it could be
48  * changed by calling set_online_page_callback() for callback registration
49  * and restore_online_page_callback() for generic callback restore.
50  */
51
52 static void generic_online_page(struct page *page, unsigned int order);
53
54 static online_page_callback_t online_page_callback = generic_online_page;
55 static DEFINE_MUTEX(online_page_callback_lock);
56
57 DEFINE_STATIC_PERCPU_RWSEM(mem_hotplug_lock);
58
59 void get_online_mems(void)
60 {
61         percpu_down_read(&mem_hotplug_lock);
62 }
63
64 void put_online_mems(void)
65 {
66         percpu_up_read(&mem_hotplug_lock);
67 }
68
69 bool movable_node_enabled = false;
70
71 #ifndef CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE
72 bool memhp_auto_online;
73 #else
74 bool memhp_auto_online = true;
75 #endif
76 EXPORT_SYMBOL_GPL(memhp_auto_online);
77
78 static int __init setup_memhp_default_state(char *str)
79 {
80         if (!strcmp(str, "online"))
81                 memhp_auto_online = true;
82         else if (!strcmp(str, "offline"))
83                 memhp_auto_online = false;
84
85         return 1;
86 }
87 __setup("memhp_default_state=", setup_memhp_default_state);
88
89 void mem_hotplug_begin(void)
90 {
91         cpus_read_lock();
92         percpu_down_write(&mem_hotplug_lock);
93 }
94
95 void mem_hotplug_done(void)
96 {
97         percpu_up_write(&mem_hotplug_lock);
98         cpus_read_unlock();
99 }
100
101 u64 max_mem_size = U64_MAX;
102
103 /* add this memory to iomem resource */
104 static struct resource *register_memory_resource(u64 start, u64 size)
105 {
106         struct resource *res;
107         unsigned long flags =  IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
108         char *resource_name = "System RAM";
109
110         if (start + size > max_mem_size)
111                 return ERR_PTR(-E2BIG);
112
113         /*
114          * Request ownership of the new memory range.  This might be
115          * a child of an existing resource that was present but
116          * not marked as busy.
117          */
118         res = __request_region(&iomem_resource, start, size,
119                                resource_name, flags);
120
121         if (!res) {
122                 pr_debug("Unable to reserve System RAM region: %016llx->%016llx\n",
123                                 start, start + size);
124                 return ERR_PTR(-EEXIST);
125         }
126         return res;
127 }
128
129 static void release_memory_resource(struct resource *res)
130 {
131         if (!res)
132                 return;
133         release_resource(res);
134         kfree(res);
135         return;
136 }
137
138 #ifdef CONFIG_MEMORY_HOTPLUG_SPARSE
139 void get_page_bootmem(unsigned long info,  struct page *page,
140                       unsigned long type)
141 {
142         page->freelist = (void *)type;
143         SetPagePrivate(page);
144         set_page_private(page, info);
145         page_ref_inc(page);
146 }
147
148 void put_page_bootmem(struct page *page)
149 {
150         unsigned long type;
151
152         type = (unsigned long) page->freelist;
153         BUG_ON(type < MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE ||
154                type > MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE);
155
156         if (page_ref_dec_return(page) == 1) {
157                 page->freelist = NULL;
158                 ClearPagePrivate(page);
159                 set_page_private(page, 0);
160                 INIT_LIST_HEAD(&page->lru);
161                 free_reserved_page(page);
162         }
163 }
164
165 #ifdef CONFIG_HAVE_BOOTMEM_INFO_NODE
166 #ifndef CONFIG_SPARSEMEM_VMEMMAP
167 static void register_page_bootmem_info_section(unsigned long start_pfn)
168 {
169         unsigned long *usemap, mapsize, section_nr, i;
170         struct mem_section *ms;
171         struct page *page, *memmap;
172
173         section_nr = pfn_to_section_nr(start_pfn);
174         ms = __nr_to_section(section_nr);
175
176         /* Get section's memmap address */
177         memmap = sparse_decode_mem_map(ms->section_mem_map, section_nr);
178
179         /*
180          * Get page for the memmap's phys address
181          * XXX: need more consideration for sparse_vmemmap...
182          */
183         page = virt_to_page(memmap);
184         mapsize = sizeof(struct page) * PAGES_PER_SECTION;
185         mapsize = PAGE_ALIGN(mapsize) >> PAGE_SHIFT;
186
187         /* remember memmap's page */
188         for (i = 0; i < mapsize; i++, page++)
189                 get_page_bootmem(section_nr, page, SECTION_INFO);
190
191         usemap = ms->pageblock_flags;
192         page = virt_to_page(usemap);
193
194         mapsize = PAGE_ALIGN(usemap_size()) >> PAGE_SHIFT;
195
196         for (i = 0; i < mapsize; i++, page++)
197                 get_page_bootmem(section_nr, page, MIX_SECTION_INFO);
198
199 }
200 #else /* CONFIG_SPARSEMEM_VMEMMAP */
201 static void register_page_bootmem_info_section(unsigned long start_pfn)
202 {
203         unsigned long *usemap, mapsize, section_nr, i;
204         struct mem_section *ms;
205         struct page *page, *memmap;
206
207         section_nr = pfn_to_section_nr(start_pfn);
208         ms = __nr_to_section(section_nr);
209
210         memmap = sparse_decode_mem_map(ms->section_mem_map, section_nr);
211
212         register_page_bootmem_memmap(section_nr, memmap, PAGES_PER_SECTION);
213
214         usemap = ms->pageblock_flags;
215         page = virt_to_page(usemap);
216
217         mapsize = PAGE_ALIGN(usemap_size()) >> PAGE_SHIFT;
218
219         for (i = 0; i < mapsize; i++, page++)
220                 get_page_bootmem(section_nr, page, MIX_SECTION_INFO);
221 }
222 #endif /* !CONFIG_SPARSEMEM_VMEMMAP */
223
224 void __init register_page_bootmem_info_node(struct pglist_data *pgdat)
225 {
226         unsigned long i, pfn, end_pfn, nr_pages;
227         int node = pgdat->node_id;
228         struct page *page;
229
230         nr_pages = PAGE_ALIGN(sizeof(struct pglist_data)) >> PAGE_SHIFT;
231         page = virt_to_page(pgdat);
232
233         for (i = 0; i < nr_pages; i++, page++)
234                 get_page_bootmem(node, page, NODE_INFO);
235
236         pfn = pgdat->node_start_pfn;
237         end_pfn = pgdat_end_pfn(pgdat);
238
239         /* register section info */
240         for (; pfn < end_pfn; pfn += PAGES_PER_SECTION) {
241                 /*
242                  * Some platforms can assign the same pfn to multiple nodes - on
243                  * node0 as well as nodeN.  To avoid registering a pfn against
244                  * multiple nodes we check that this pfn does not already
245                  * reside in some other nodes.
246                  */
247                 if (pfn_valid(pfn) && (early_pfn_to_nid(pfn) == node))
248                         register_page_bootmem_info_section(pfn);
249         }
250 }
251 #endif /* CONFIG_HAVE_BOOTMEM_INFO_NODE */
252
253 static int __meminit __add_section(int nid, unsigned long phys_start_pfn,
254                 struct vmem_altmap *altmap, bool want_memblock)
255 {
256         int ret;
257
258         if (pfn_valid(phys_start_pfn))
259                 return -EEXIST;
260
261         ret = sparse_add_one_section(nid, phys_start_pfn, altmap);
262         return ret < 0 ? ret : 0;
263 }
264
265 /*
266  * Reasonably generic function for adding memory.  It is
267  * expected that archs that support memory hotplug will
268  * call this function after deciding the zone to which to
269  * add the new pages.
270  */
271 int __ref __add_pages(int nid, unsigned long phys_start_pfn,
272                 unsigned long nr_pages, struct mhp_restrictions *restrictions)
273 {
274         unsigned long i;
275         int err = 0;
276         int start_sec, end_sec;
277         struct vmem_altmap *altmap = restrictions->altmap;
278
279         /* during initialize mem_map, align hot-added range to section */
280         start_sec = pfn_to_section_nr(phys_start_pfn);
281         end_sec = pfn_to_section_nr(phys_start_pfn + nr_pages - 1);
282
283         if (altmap) {
284                 /*
285                  * Validate altmap is within bounds of the total request
286                  */
287                 if (altmap->base_pfn != phys_start_pfn
288                                 || vmem_altmap_offset(altmap) > nr_pages) {
289                         pr_warn_once("memory add fail, invalid altmap\n");
290                         err = -EINVAL;
291                         goto out;
292                 }
293                 altmap->alloc = 0;
294         }
295
296         for (i = start_sec; i <= end_sec; i++) {
297                 err = __add_section(nid, section_nr_to_pfn(i), altmap,
298                                 restrictions->flags & MHP_MEMBLOCK_API);
299
300                 /*
301                  * EEXIST is finally dealt with by ioresource collision
302                  * check. see add_memory() => register_memory_resource()
303                  * Warning will be printed if there is collision.
304                  */
305                 if (err && (err != -EEXIST))
306                         break;
307                 err = 0;
308                 cond_resched();
309         }
310         vmemmap_populate_print_last();
311 out:
312         return err;
313 }
314
315 /* find the smallest valid pfn in the range [start_pfn, end_pfn) */
316 static unsigned long find_smallest_section_pfn(int nid, struct zone *zone,
317                                      unsigned long start_pfn,
318                                      unsigned long end_pfn)
319 {
320         struct mem_section *ms;
321
322         for (; start_pfn < end_pfn; start_pfn += PAGES_PER_SECTION) {
323                 ms = __pfn_to_section(start_pfn);
324
325                 if (unlikely(!valid_section(ms)))
326                         continue;
327
328                 if (unlikely(pfn_to_nid(start_pfn) != nid))
329                         continue;
330
331                 if (zone && zone != page_zone(pfn_to_page(start_pfn)))
332                         continue;
333
334                 return start_pfn;
335         }
336
337         return 0;
338 }
339
340 /* find the biggest valid pfn in the range [start_pfn, end_pfn). */
341 static unsigned long find_biggest_section_pfn(int nid, struct zone *zone,
342                                     unsigned long start_pfn,
343                                     unsigned long end_pfn)
344 {
345         struct mem_section *ms;
346         unsigned long pfn;
347
348         /* pfn is the end pfn of a memory section. */
349         pfn = end_pfn - 1;
350         for (; pfn >= start_pfn; pfn -= PAGES_PER_SECTION) {
351                 ms = __pfn_to_section(pfn);
352
353                 if (unlikely(!valid_section(ms)))
354                         continue;
355
356                 if (unlikely(pfn_to_nid(pfn) != nid))
357                         continue;
358
359                 if (zone && zone != page_zone(pfn_to_page(pfn)))
360                         continue;
361
362                 return pfn;
363         }
364
365         return 0;
366 }
367
368 static void shrink_zone_span(struct zone *zone, unsigned long start_pfn,
369                              unsigned long end_pfn)
370 {
371         unsigned long zone_start_pfn = zone->zone_start_pfn;
372         unsigned long z = zone_end_pfn(zone); /* zone_end_pfn namespace clash */
373         unsigned long zone_end_pfn = z;
374         unsigned long pfn;
375         struct mem_section *ms;
376         int nid = zone_to_nid(zone);
377
378         zone_span_writelock(zone);
379         if (zone_start_pfn == start_pfn) {
380                 /*
381                  * If the section is smallest section in the zone, it need
382                  * shrink zone->zone_start_pfn and zone->zone_spanned_pages.
383                  * In this case, we find second smallest valid mem_section
384                  * for shrinking zone.
385                  */
386                 pfn = find_smallest_section_pfn(nid, zone, end_pfn,
387                                                 zone_end_pfn);
388                 if (pfn) {
389                         zone->zone_start_pfn = pfn;
390                         zone->spanned_pages = zone_end_pfn - pfn;
391                 }
392         } else if (zone_end_pfn == end_pfn) {
393                 /*
394                  * If the section is biggest section in the zone, it need
395                  * shrink zone->spanned_pages.
396                  * In this case, we find second biggest valid mem_section for
397                  * shrinking zone.
398                  */
399                 pfn = find_biggest_section_pfn(nid, zone, zone_start_pfn,
400                                                start_pfn);
401                 if (pfn)
402                         zone->spanned_pages = pfn - zone_start_pfn + 1;
403         }
404
405         /*
406          * The section is not biggest or smallest mem_section in the zone, it
407          * only creates a hole in the zone. So in this case, we need not
408          * change the zone. But perhaps, the zone has only hole data. Thus
409          * it check the zone has only hole or not.
410          */
411         pfn = zone_start_pfn;
412         for (; pfn < zone_end_pfn; pfn += PAGES_PER_SECTION) {
413                 ms = __pfn_to_section(pfn);
414
415                 if (unlikely(!valid_section(ms)))
416                         continue;
417
418                 if (page_zone(pfn_to_page(pfn)) != zone)
419                         continue;
420
421                  /* If the section is current section, it continues the loop */
422                 if (start_pfn == pfn)
423                         continue;
424
425                 /* If we find valid section, we have nothing to do */
426                 zone_span_writeunlock(zone);
427                 return;
428         }
429
430         /* The zone has no valid section */
431         zone->zone_start_pfn = 0;
432         zone->spanned_pages = 0;
433         zone_span_writeunlock(zone);
434 }
435
436 static void shrink_pgdat_span(struct pglist_data *pgdat,
437                               unsigned long start_pfn, unsigned long end_pfn)
438 {
439         unsigned long pgdat_start_pfn = pgdat->node_start_pfn;
440         unsigned long p = pgdat_end_pfn(pgdat); /* pgdat_end_pfn namespace clash */
441         unsigned long pgdat_end_pfn = p;
442         unsigned long pfn;
443         struct mem_section *ms;
444         int nid = pgdat->node_id;
445
446         if (pgdat_start_pfn == start_pfn) {
447                 /*
448                  * If the section is smallest section in the pgdat, it need
449                  * shrink pgdat->node_start_pfn and pgdat->node_spanned_pages.
450                  * In this case, we find second smallest valid mem_section
451                  * for shrinking zone.
452                  */
453                 pfn = find_smallest_section_pfn(nid, NULL, end_pfn,
454                                                 pgdat_end_pfn);
455                 if (pfn) {
456                         pgdat->node_start_pfn = pfn;
457                         pgdat->node_spanned_pages = pgdat_end_pfn - pfn;
458                 }
459         } else if (pgdat_end_pfn == end_pfn) {
460                 /*
461                  * If the section is biggest section in the pgdat, it need
462                  * shrink pgdat->node_spanned_pages.
463                  * In this case, we find second biggest valid mem_section for
464                  * shrinking zone.
465                  */
466                 pfn = find_biggest_section_pfn(nid, NULL, pgdat_start_pfn,
467                                                start_pfn);
468                 if (pfn)
469                         pgdat->node_spanned_pages = pfn - pgdat_start_pfn + 1;
470         }
471
472         /*
473          * If the section is not biggest or smallest mem_section in the pgdat,
474          * it only creates a hole in the pgdat. So in this case, we need not
475          * change the pgdat.
476          * But perhaps, the pgdat has only hole data. Thus it check the pgdat
477          * has only hole or not.
478          */
479         pfn = pgdat_start_pfn;
480         for (; pfn < pgdat_end_pfn; pfn += PAGES_PER_SECTION) {
481                 ms = __pfn_to_section(pfn);
482
483                 if (unlikely(!valid_section(ms)))
484                         continue;
485
486                 if (pfn_to_nid(pfn) != nid)
487                         continue;
488
489                  /* If the section is current section, it continues the loop */
490                 if (start_pfn == pfn)
491                         continue;
492
493                 /* If we find valid section, we have nothing to do */
494                 return;
495         }
496
497         /* The pgdat has no valid section */
498         pgdat->node_start_pfn = 0;
499         pgdat->node_spanned_pages = 0;
500 }
501
502 static void __remove_zone(struct zone *zone, unsigned long start_pfn)
503 {
504         struct pglist_data *pgdat = zone->zone_pgdat;
505         int nr_pages = PAGES_PER_SECTION;
506         unsigned long flags;
507
508         pgdat_resize_lock(zone->zone_pgdat, &flags);
509         shrink_zone_span(zone, start_pfn, start_pfn + nr_pages);
510         shrink_pgdat_span(pgdat, start_pfn, start_pfn + nr_pages);
511         pgdat_resize_unlock(zone->zone_pgdat, &flags);
512 }
513
514 static void __remove_section(struct zone *zone, struct mem_section *ms,
515                              unsigned long map_offset,
516                              struct vmem_altmap *altmap)
517 {
518         unsigned long start_pfn;
519         int scn_nr;
520
521         if (WARN_ON_ONCE(!valid_section(ms)))
522                 return;
523
524         unregister_memory_section(ms);
525
526         scn_nr = __section_nr(ms);
527         start_pfn = section_nr_to_pfn((unsigned long)scn_nr);
528         __remove_zone(zone, start_pfn);
529
530         sparse_remove_one_section(zone, ms, map_offset, altmap);
531 }
532
533 /**
534  * __remove_pages() - remove sections of pages from a zone
535  * @zone: zone from which pages need to be removed
536  * @phys_start_pfn: starting pageframe (must be aligned to start of a section)
537  * @nr_pages: number of pages to remove (must be multiple of section size)
538  * @altmap: alternative device page map or %NULL if default memmap is used
539  *
540  * Generic helper function to remove section mappings and sysfs entries
541  * for the section of the memory we are removing. Caller needs to make
542  * sure that pages are marked reserved and zones are adjust properly by
543  * calling offline_pages().
544  */
545 void __remove_pages(struct zone *zone, unsigned long phys_start_pfn,
546                     unsigned long nr_pages, struct vmem_altmap *altmap)
547 {
548         unsigned long i;
549         unsigned long map_offset = 0;
550         int sections_to_remove;
551
552         /* In the ZONE_DEVICE case device driver owns the memory region */
553         if (is_dev_zone(zone))
554                 map_offset = vmem_altmap_offset(altmap);
555
556         clear_zone_contiguous(zone);
557
558         /*
559          * We can only remove entire sections
560          */
561         BUG_ON(phys_start_pfn & ~PAGE_SECTION_MASK);
562         BUG_ON(nr_pages % PAGES_PER_SECTION);
563
564         sections_to_remove = nr_pages / PAGES_PER_SECTION;
565         for (i = 0; i < sections_to_remove; i++) {
566                 unsigned long pfn = phys_start_pfn + i*PAGES_PER_SECTION;
567
568                 cond_resched();
569                 __remove_section(zone, __pfn_to_section(pfn), map_offset,
570                                  altmap);
571                 map_offset = 0;
572         }
573
574         set_zone_contiguous(zone);
575 }
576
577 int set_online_page_callback(online_page_callback_t callback)
578 {
579         int rc = -EINVAL;
580
581         get_online_mems();
582         mutex_lock(&online_page_callback_lock);
583
584         if (online_page_callback == generic_online_page) {
585                 online_page_callback = callback;
586                 rc = 0;
587         }
588
589         mutex_unlock(&online_page_callback_lock);
590         put_online_mems();
591
592         return rc;
593 }
594 EXPORT_SYMBOL_GPL(set_online_page_callback);
595
596 int restore_online_page_callback(online_page_callback_t callback)
597 {
598         int rc = -EINVAL;
599
600         get_online_mems();
601         mutex_lock(&online_page_callback_lock);
602
603         if (online_page_callback == callback) {
604                 online_page_callback = generic_online_page;
605                 rc = 0;
606         }
607
608         mutex_unlock(&online_page_callback_lock);
609         put_online_mems();
610
611         return rc;
612 }
613 EXPORT_SYMBOL_GPL(restore_online_page_callback);
614
615 void __online_page_set_limits(struct page *page)
616 {
617 }
618 EXPORT_SYMBOL_GPL(__online_page_set_limits);
619
620 void __online_page_increment_counters(struct page *page)
621 {
622         adjust_managed_page_count(page, 1);
623 }
624 EXPORT_SYMBOL_GPL(__online_page_increment_counters);
625
626 void __online_page_free(struct page *page)
627 {
628         __free_reserved_page(page);
629 }
630 EXPORT_SYMBOL_GPL(__online_page_free);
631
632 static void generic_online_page(struct page *page, unsigned int order)
633 {
634         kernel_map_pages(page, 1 << order, 1);
635         __free_pages_core(page, order);
636         totalram_pages_add(1UL << order);
637 #ifdef CONFIG_HIGHMEM
638         if (PageHighMem(page))
639                 totalhigh_pages_add(1UL << order);
640 #endif
641 }
642
643 static int online_pages_blocks(unsigned long start, unsigned long nr_pages)
644 {
645         unsigned long end = start + nr_pages;
646         int order, onlined_pages = 0;
647
648         while (start < end) {
649                 order = min(MAX_ORDER - 1,
650                         get_order(PFN_PHYS(end) - PFN_PHYS(start)));
651                 (*online_page_callback)(pfn_to_page(start), order);
652
653                 onlined_pages += (1UL << order);
654                 start += (1UL << order);
655         }
656         return onlined_pages;
657 }
658
659 static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages,
660                         void *arg)
661 {
662         unsigned long onlined_pages = *(unsigned long *)arg;
663
664         if (PageReserved(pfn_to_page(start_pfn)))
665                 onlined_pages += online_pages_blocks(start_pfn, nr_pages);
666
667         online_mem_sections(start_pfn, start_pfn + nr_pages);
668
669         *(unsigned long *)arg = onlined_pages;
670         return 0;
671 }
672
673 /* check which state of node_states will be changed when online memory */
674 static void node_states_check_changes_online(unsigned long nr_pages,
675         struct zone *zone, struct memory_notify *arg)
676 {
677         int nid = zone_to_nid(zone);
678
679         arg->status_change_nid = NUMA_NO_NODE;
680         arg->status_change_nid_normal = NUMA_NO_NODE;
681         arg->status_change_nid_high = NUMA_NO_NODE;
682
683         if (!node_state(nid, N_MEMORY))
684                 arg->status_change_nid = nid;
685         if (zone_idx(zone) <= ZONE_NORMAL && !node_state(nid, N_NORMAL_MEMORY))
686                 arg->status_change_nid_normal = nid;
687 #ifdef CONFIG_HIGHMEM
688         if (zone_idx(zone) <= ZONE_HIGHMEM && !node_state(nid, N_HIGH_MEMORY))
689                 arg->status_change_nid_high = nid;
690 #endif
691 }
692
693 static void node_states_set_node(int node, struct memory_notify *arg)
694 {
695         if (arg->status_change_nid_normal >= 0)
696                 node_set_state(node, N_NORMAL_MEMORY);
697
698         if (arg->status_change_nid_high >= 0)
699                 node_set_state(node, N_HIGH_MEMORY);
700
701         if (arg->status_change_nid >= 0)
702                 node_set_state(node, N_MEMORY);
703 }
704
705 static void __meminit resize_zone_range(struct zone *zone, unsigned long start_pfn,
706                 unsigned long nr_pages)
707 {
708         unsigned long old_end_pfn = zone_end_pfn(zone);
709
710         if (zone_is_empty(zone) || start_pfn < zone->zone_start_pfn)
711                 zone->zone_start_pfn = start_pfn;
712
713         zone->spanned_pages = max(start_pfn + nr_pages, old_end_pfn) - zone->zone_start_pfn;
714 }
715
716 static void __meminit resize_pgdat_range(struct pglist_data *pgdat, unsigned long start_pfn,
717                                      unsigned long nr_pages)
718 {
719         unsigned long old_end_pfn = pgdat_end_pfn(pgdat);
720
721         if (!pgdat->node_spanned_pages || start_pfn < pgdat->node_start_pfn)
722                 pgdat->node_start_pfn = start_pfn;
723
724         pgdat->node_spanned_pages = max(start_pfn + nr_pages, old_end_pfn) - pgdat->node_start_pfn;
725 }
726
727 void __ref move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn,
728                 unsigned long nr_pages, struct vmem_altmap *altmap)
729 {
730         struct pglist_data *pgdat = zone->zone_pgdat;
731         int nid = pgdat->node_id;
732         unsigned long flags;
733
734         clear_zone_contiguous(zone);
735
736         /* TODO Huh pgdat is irqsave while zone is not. It used to be like that before */
737         pgdat_resize_lock(pgdat, &flags);
738         zone_span_writelock(zone);
739         if (zone_is_empty(zone))
740                 init_currently_empty_zone(zone, start_pfn, nr_pages);
741         resize_zone_range(zone, start_pfn, nr_pages);
742         zone_span_writeunlock(zone);
743         resize_pgdat_range(pgdat, start_pfn, nr_pages);
744         pgdat_resize_unlock(pgdat, &flags);
745
746         /*
747          * TODO now we have a visible range of pages which are not associated
748          * with their zone properly. Not nice but set_pfnblock_flags_mask
749          * expects the zone spans the pfn range. All the pages in the range
750          * are reserved so nobody should be touching them so we should be safe
751          */
752         memmap_init_zone(nr_pages, nid, zone_idx(zone), start_pfn,
753                         MEMMAP_HOTPLUG, altmap);
754
755         set_zone_contiguous(zone);
756 }
757
758 /*
759  * Returns a default kernel memory zone for the given pfn range.
760  * If no kernel zone covers this pfn range it will automatically go
761  * to the ZONE_NORMAL.
762  */
763 static struct zone *default_kernel_zone_for_pfn(int nid, unsigned long start_pfn,
764                 unsigned long nr_pages)
765 {
766         struct pglist_data *pgdat = NODE_DATA(nid);
767         int zid;
768
769         for (zid = 0; zid <= ZONE_NORMAL; zid++) {
770                 struct zone *zone = &pgdat->node_zones[zid];
771
772                 if (zone_intersects(zone, start_pfn, nr_pages))
773                         return zone;
774         }
775
776         return &pgdat->node_zones[ZONE_NORMAL];
777 }
778
779 static inline struct zone *default_zone_for_pfn(int nid, unsigned long start_pfn,
780                 unsigned long nr_pages)
781 {
782         struct zone *kernel_zone = default_kernel_zone_for_pfn(nid, start_pfn,
783                         nr_pages);
784         struct zone *movable_zone = &NODE_DATA(nid)->node_zones[ZONE_MOVABLE];
785         bool in_kernel = zone_intersects(kernel_zone, start_pfn, nr_pages);
786         bool in_movable = zone_intersects(movable_zone, start_pfn, nr_pages);
787
788         /*
789          * We inherit the existing zone in a simple case where zones do not
790          * overlap in the given range
791          */
792         if (in_kernel ^ in_movable)
793                 return (in_kernel) ? kernel_zone : movable_zone;
794
795         /*
796          * If the range doesn't belong to any zone or two zones overlap in the
797          * given range then we use movable zone only if movable_node is
798          * enabled because we always online to a kernel zone by default.
799          */
800         return movable_node_enabled ? movable_zone : kernel_zone;
801 }
802
803 struct zone * zone_for_pfn_range(int online_type, int nid, unsigned start_pfn,
804                 unsigned long nr_pages)
805 {
806         if (online_type == MMOP_ONLINE_KERNEL)
807                 return default_kernel_zone_for_pfn(nid, start_pfn, nr_pages);
808
809         if (online_type == MMOP_ONLINE_MOVABLE)
810                 return &NODE_DATA(nid)->node_zones[ZONE_MOVABLE];
811
812         return default_zone_for_pfn(nid, start_pfn, nr_pages);
813 }
814
815 /*
816  * Associates the given pfn range with the given node and the zone appropriate
817  * for the given online type.
818  */
819 static struct zone * __meminit move_pfn_range(int online_type, int nid,
820                 unsigned long start_pfn, unsigned long nr_pages)
821 {
822         struct zone *zone;
823
824         zone = zone_for_pfn_range(online_type, nid, start_pfn, nr_pages);
825         move_pfn_range_to_zone(zone, start_pfn, nr_pages, NULL);
826         return zone;
827 }
828
829 int __ref online_pages(unsigned long pfn, unsigned long nr_pages, int online_type)
830 {
831         unsigned long flags;
832         unsigned long onlined_pages = 0;
833         struct zone *zone;
834         int need_zonelists_rebuild = 0;
835         int nid;
836         int ret;
837         struct memory_notify arg;
838         struct memory_block *mem;
839
840         mem_hotplug_begin();
841
842         /*
843          * We can't use pfn_to_nid() because nid might be stored in struct page
844          * which is not yet initialized. Instead, we find nid from memory block.
845          */
846         mem = find_memory_block(__pfn_to_section(pfn));
847         nid = mem->nid;
848         put_device(&mem->dev);
849
850         /* associate pfn range with the zone */
851         zone = move_pfn_range(online_type, nid, pfn, nr_pages);
852
853         arg.start_pfn = pfn;
854         arg.nr_pages = nr_pages;
855         node_states_check_changes_online(nr_pages, zone, &arg);
856
857         ret = memory_notify(MEM_GOING_ONLINE, &arg);
858         ret = notifier_to_errno(ret);
859         if (ret)
860                 goto failed_addition;
861
862         /*
863          * If this zone is not populated, then it is not in zonelist.
864          * This means the page allocator ignores this zone.
865          * So, zonelist must be updated after online.
866          */
867         if (!populated_zone(zone)) {
868                 need_zonelists_rebuild = 1;
869                 setup_zone_pageset(zone);
870         }
871
872         ret = walk_system_ram_range(pfn, nr_pages, &onlined_pages,
873                 online_pages_range);
874         if (ret) {
875                 if (need_zonelists_rebuild)
876                         zone_pcp_reset(zone);
877                 goto failed_addition;
878         }
879
880         zone->present_pages += onlined_pages;
881
882         pgdat_resize_lock(zone->zone_pgdat, &flags);
883         zone->zone_pgdat->node_present_pages += onlined_pages;
884         pgdat_resize_unlock(zone->zone_pgdat, &flags);
885
886         shuffle_zone(zone);
887
888         if (onlined_pages) {
889                 node_states_set_node(nid, &arg);
890                 if (need_zonelists_rebuild)
891                         build_all_zonelists(NULL);
892                 else
893                         zone_pcp_update(zone);
894         }
895
896         init_per_zone_wmark_min();
897
898         if (onlined_pages) {
899                 kswapd_run(nid);
900                 kcompactd_run(nid);
901         }
902
903         vm_total_pages = nr_free_pagecache_pages();
904
905         writeback_set_ratelimit();
906
907         if (onlined_pages)
908                 memory_notify(MEM_ONLINE, &arg);
909         mem_hotplug_done();
910         return 0;
911
912 failed_addition:
913         pr_debug("online_pages [mem %#010llx-%#010llx] failed\n",
914                  (unsigned long long) pfn << PAGE_SHIFT,
915                  (((unsigned long long) pfn + nr_pages) << PAGE_SHIFT) - 1);
916         memory_notify(MEM_CANCEL_ONLINE, &arg);
917         mem_hotplug_done();
918         return ret;
919 }
920 #endif /* CONFIG_MEMORY_HOTPLUG_SPARSE */
921
922 static void reset_node_present_pages(pg_data_t *pgdat)
923 {
924         struct zone *z;
925
926         for (z = pgdat->node_zones; z < pgdat->node_zones + MAX_NR_ZONES; z++)
927                 z->present_pages = 0;
928
929         pgdat->node_present_pages = 0;
930 }
931
932 /* we are OK calling __meminit stuff here - we have CONFIG_MEMORY_HOTPLUG */
933 static pg_data_t __ref *hotadd_new_pgdat(int nid, u64 start)
934 {
935         struct pglist_data *pgdat;
936         unsigned long start_pfn = PFN_DOWN(start);
937
938         pgdat = NODE_DATA(nid);
939         if (!pgdat) {
940                 pgdat = arch_alloc_nodedata(nid);
941                 if (!pgdat)
942                         return NULL;
943
944                 arch_refresh_nodedata(nid, pgdat);
945         } else {
946                 /*
947                  * Reset the nr_zones, order and classzone_idx before reuse.
948                  * Note that kswapd will init kswapd_classzone_idx properly
949                  * when it starts in the near future.
950                  */
951                 pgdat->nr_zones = 0;
952                 pgdat->kswapd_order = 0;
953                 pgdat->kswapd_classzone_idx = 0;
954         }
955
956         /* we can use NODE_DATA(nid) from here */
957
958         pgdat->node_id = nid;
959         pgdat->node_start_pfn = start_pfn;
960
961         /* init node's zones as empty zones, we don't have any present pages.*/
962         free_area_init_core_hotplug(nid);
963         pgdat->per_cpu_nodestats = alloc_percpu(struct per_cpu_nodestat);
964
965         /*
966          * The node we allocated has no zone fallback lists. For avoiding
967          * to access not-initialized zonelist, build here.
968          */
969         build_all_zonelists(pgdat);
970
971         /*
972          * When memory is hot-added, all the memory is in offline state. So
973          * clear all zones' present_pages because they will be updated in
974          * online_pages() and offline_pages().
975          */
976         reset_node_managed_pages(pgdat);
977         reset_node_present_pages(pgdat);
978
979         return pgdat;
980 }
981
982 static void rollback_node_hotadd(int nid)
983 {
984         pg_data_t *pgdat = NODE_DATA(nid);
985
986         arch_refresh_nodedata(nid, NULL);
987         free_percpu(pgdat->per_cpu_nodestats);
988         arch_free_nodedata(pgdat);
989         return;
990 }
991
992
993 /**
994  * try_online_node - online a node if offlined
995  * @nid: the node ID
996  * @start: start addr of the node
997  * @set_node_online: Whether we want to online the node
998  * called by cpu_up() to online a node without onlined memory.
999  *
1000  * Returns:
1001  * 1 -> a new node has been allocated
1002  * 0 -> the node is already online
1003  * -ENOMEM -> the node could not be allocated
1004  */
1005 static int __try_online_node(int nid, u64 start, bool set_node_online)
1006 {
1007         pg_data_t *pgdat;
1008         int ret = 1;
1009
1010         if (node_online(nid))
1011                 return 0;
1012
1013         pgdat = hotadd_new_pgdat(nid, start);
1014         if (!pgdat) {
1015                 pr_err("Cannot online node %d due to NULL pgdat\n", nid);
1016                 ret = -ENOMEM;
1017                 goto out;
1018         }
1019
1020         if (set_node_online) {
1021                 node_set_online(nid);
1022                 ret = register_one_node(nid);
1023                 BUG_ON(ret);
1024         }
1025 out:
1026         return ret;
1027 }
1028
1029 /*
1030  * Users of this function always want to online/register the node
1031  */
1032 int try_online_node(int nid)
1033 {
1034         int ret;
1035
1036         mem_hotplug_begin();
1037         ret =  __try_online_node(nid, 0, true);
1038         mem_hotplug_done();
1039         return ret;
1040 }
1041
1042 static int check_hotplug_memory_range(u64 start, u64 size)
1043 {
1044         /* memory range must be block size aligned */
1045         if (!size || !IS_ALIGNED(start, memory_block_size_bytes()) ||
1046             !IS_ALIGNED(size, memory_block_size_bytes())) {
1047                 pr_err("Block size [%#lx] unaligned hotplug range: start %#llx, size %#llx",
1048                        memory_block_size_bytes(), start, size);
1049                 return -EINVAL;
1050         }
1051
1052         return 0;
1053 }
1054
1055 static int online_memory_block(struct memory_block *mem, void *arg)
1056 {
1057         return device_online(&mem->dev);
1058 }
1059
1060 /*
1061  * NOTE: The caller must call lock_device_hotplug() to serialize hotplug
1062  * and online/offline operations (triggered e.g. by sysfs).
1063  *
1064  * we are OK calling __meminit stuff here - we have CONFIG_MEMORY_HOTPLUG
1065  */
1066 int __ref add_memory_resource(int nid, struct resource *res)
1067 {
1068         struct mhp_restrictions restrictions = {
1069                 .flags = MHP_MEMBLOCK_API,
1070         };
1071         u64 start, size;
1072         bool new_node = false;
1073         int ret;
1074
1075         start = res->start;
1076         size = resource_size(res);
1077
1078         ret = check_hotplug_memory_range(start, size);
1079         if (ret)
1080                 return ret;
1081
1082         mem_hotplug_begin();
1083
1084         /*
1085          * Add new range to memblock so that when hotadd_new_pgdat() is called
1086          * to allocate new pgdat, get_pfn_range_for_nid() will be able to find
1087          * this new range and calculate total pages correctly.  The range will
1088          * be removed at hot-remove time.
1089          */
1090         memblock_add_node(start, size, nid);
1091
1092         ret = __try_online_node(nid, start, false);
1093         if (ret < 0)
1094                 goto error;
1095         new_node = ret;
1096
1097         /* call arch's memory hotadd */
1098         ret = arch_add_memory(nid, start, size, &restrictions);
1099         if (ret < 0)
1100                 goto error;
1101
1102         /* create memory block devices after memory was added */
1103         ret = create_memory_block_devices(start, size);
1104         if (ret) {
1105                 arch_remove_memory(nid, start, size, NULL);
1106                 goto error;
1107         }
1108
1109         if (new_node) {
1110                 /* If sysfs file of new node can't be created, cpu on the node
1111                  * can't be hot-added. There is no rollback way now.
1112                  * So, check by BUG_ON() to catch it reluctantly..
1113                  * We online node here. We can't roll back from here.
1114                  */
1115                 node_set_online(nid);
1116                 ret = __register_one_node(nid);
1117                 BUG_ON(ret);
1118         }
1119
1120         /* link memory sections under this node.*/
1121         ret = link_mem_sections(nid, PFN_DOWN(start), PFN_UP(start + size - 1));
1122         BUG_ON(ret);
1123
1124         /* create new memmap entry */
1125         firmware_map_add_hotplug(start, start + size, "System RAM");
1126
1127         /* device_online() will take the lock when calling online_pages() */
1128         mem_hotplug_done();
1129
1130         /* online pages if requested */
1131         if (memhp_auto_online)
1132                 walk_memory_range(PFN_DOWN(start), PFN_UP(start + size - 1),
1133                                   NULL, online_memory_block);
1134
1135         return ret;
1136 error:
1137         /* rollback pgdat allocation and others */
1138         if (new_node)
1139                 rollback_node_hotadd(nid);
1140         memblock_remove(start, size);
1141         mem_hotplug_done();
1142         return ret;
1143 }
1144
1145 /* requires device_hotplug_lock, see add_memory_resource() */
1146 int __ref __add_memory(int nid, u64 start, u64 size)
1147 {
1148         struct resource *res;
1149         int ret;
1150
1151         res = register_memory_resource(start, size);
1152         if (IS_ERR(res))
1153                 return PTR_ERR(res);
1154
1155         ret = add_memory_resource(nid, res);
1156         if (ret < 0)
1157                 release_memory_resource(res);
1158         return ret;
1159 }
1160
1161 int add_memory(int nid, u64 start, u64 size)
1162 {
1163         int rc;
1164
1165         lock_device_hotplug();
1166         rc = __add_memory(nid, start, size);
1167         unlock_device_hotplug();
1168
1169         return rc;
1170 }
1171 EXPORT_SYMBOL_GPL(add_memory);
1172
1173 #ifdef CONFIG_MEMORY_HOTREMOVE
1174 /*
1175  * A free page on the buddy free lists (not the per-cpu lists) has PageBuddy
1176  * set and the size of the free page is given by page_order(). Using this,
1177  * the function determines if the pageblock contains only free pages.
1178  * Due to buddy contraints, a free page at least the size of a pageblock will
1179  * be located at the start of the pageblock
1180  */
1181 static inline int pageblock_free(struct page *page)
1182 {
1183         return PageBuddy(page) && page_order(page) >= pageblock_order;
1184 }
1185
1186 /* Return the pfn of the start of the next active pageblock after a given pfn */
1187 static unsigned long next_active_pageblock(unsigned long pfn)
1188 {
1189         struct page *page = pfn_to_page(pfn);
1190
1191         /* Ensure the starting page is pageblock-aligned */
1192         BUG_ON(pfn & (pageblock_nr_pages - 1));
1193
1194         /* If the entire pageblock is free, move to the end of free page */
1195         if (pageblock_free(page)) {
1196                 int order;
1197                 /* be careful. we don't have locks, page_order can be changed.*/
1198                 order = page_order(page);
1199                 if ((order < MAX_ORDER) && (order >= pageblock_order))
1200                         return pfn + (1 << order);
1201         }
1202
1203         return pfn + pageblock_nr_pages;
1204 }
1205
1206 static bool is_pageblock_removable_nolock(unsigned long pfn)
1207 {
1208         struct page *page = pfn_to_page(pfn);
1209         struct zone *zone;
1210
1211         /*
1212          * We have to be careful here because we are iterating over memory
1213          * sections which are not zone aware so we might end up outside of
1214          * the zone but still within the section.
1215          * We have to take care about the node as well. If the node is offline
1216          * its NODE_DATA will be NULL - see page_zone.
1217          */
1218         if (!node_online(page_to_nid(page)))
1219                 return false;
1220
1221         zone = page_zone(page);
1222         pfn = page_to_pfn(page);
1223         if (!zone_spans_pfn(zone, pfn))
1224                 return false;
1225
1226         return !has_unmovable_pages(zone, page, 0, MIGRATE_MOVABLE, SKIP_HWPOISON);
1227 }
1228
1229 /* Checks if this range of memory is likely to be hot-removable. */
1230 bool is_mem_section_removable(unsigned long start_pfn, unsigned long nr_pages)
1231 {
1232         unsigned long end_pfn, pfn;
1233
1234         end_pfn = min(start_pfn + nr_pages,
1235                         zone_end_pfn(page_zone(pfn_to_page(start_pfn))));
1236
1237         /* Check the starting page of each pageblock within the range */
1238         for (pfn = start_pfn; pfn < end_pfn; pfn = next_active_pageblock(pfn)) {
1239                 if (!is_pageblock_removable_nolock(pfn))
1240                         return false;
1241                 cond_resched();
1242         }
1243
1244         /* All pageblocks in the memory block are likely to be hot-removable */
1245         return true;
1246 }
1247
1248 /*
1249  * Confirm all pages in a range [start, end) belong to the same zone.
1250  * When true, return its valid [start, end).
1251  */
1252 int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn,
1253                          unsigned long *valid_start, unsigned long *valid_end)
1254 {
1255         unsigned long pfn, sec_end_pfn;
1256         unsigned long start, end;
1257         struct zone *zone = NULL;
1258         struct page *page;
1259         int i;
1260         for (pfn = start_pfn, sec_end_pfn = SECTION_ALIGN_UP(start_pfn + 1);
1261              pfn < end_pfn;
1262              pfn = sec_end_pfn, sec_end_pfn += PAGES_PER_SECTION) {
1263                 /* Make sure the memory section is present first */
1264                 if (!present_section_nr(pfn_to_section_nr(pfn)))
1265                         continue;
1266                 for (; pfn < sec_end_pfn && pfn < end_pfn;
1267                      pfn += MAX_ORDER_NR_PAGES) {
1268                         i = 0;
1269                         /* This is just a CONFIG_HOLES_IN_ZONE check.*/
1270                         while ((i < MAX_ORDER_NR_PAGES) &&
1271                                 !pfn_valid_within(pfn + i))
1272                                 i++;
1273                         if (i == MAX_ORDER_NR_PAGES || pfn + i >= end_pfn)
1274                                 continue;
1275                         /* Check if we got outside of the zone */
1276                         if (zone && !zone_spans_pfn(zone, pfn + i))
1277                                 return 0;
1278                         page = pfn_to_page(pfn + i);
1279                         if (zone && page_zone(page) != zone)
1280                                 return 0;
1281                         if (!zone)
1282                                 start = pfn + i;
1283                         zone = page_zone(page);
1284                         end = pfn + MAX_ORDER_NR_PAGES;
1285                 }
1286         }
1287
1288         if (zone) {
1289                 *valid_start = start;
1290                 *valid_end = min(end, end_pfn);
1291                 return 1;
1292         } else {
1293                 return 0;
1294         }
1295 }
1296
1297 /*
1298  * Scan pfn range [start,end) to find movable/migratable pages (LRU pages,
1299  * non-lru movable pages and hugepages). We scan pfn because it's much
1300  * easier than scanning over linked list. This function returns the pfn
1301  * of the first found movable page if it's found, otherwise 0.
1302  */
1303 static unsigned long scan_movable_pages(unsigned long start, unsigned long end)
1304 {
1305         unsigned long pfn;
1306
1307         for (pfn = start; pfn < end; pfn++) {
1308                 struct page *page, *head;
1309                 unsigned long skip;
1310
1311                 if (!pfn_valid(pfn))
1312                         continue;
1313                 page = pfn_to_page(pfn);
1314                 if (PageLRU(page))
1315                         return pfn;
1316                 if (__PageMovable(page))
1317                         return pfn;
1318
1319                 if (!PageHuge(page))
1320                         continue;
1321                 head = compound_head(page);
1322                 if (page_huge_active(head))
1323                         return pfn;
1324                 skip = (1 << compound_order(head)) - (page - head);
1325                 pfn += skip - 1;
1326         }
1327         return 0;
1328 }
1329
1330 static struct page *new_node_page(struct page *page, unsigned long private)
1331 {
1332         int nid = page_to_nid(page);
1333         nodemask_t nmask = node_states[N_MEMORY];
1334
1335         /*
1336          * try to allocate from a different node but reuse this node if there
1337          * are no other online nodes to be used (e.g. we are offlining a part
1338          * of the only existing node)
1339          */
1340         node_clear(nid, nmask);
1341         if (nodes_empty(nmask))
1342                 node_set(nid, nmask);
1343
1344         return new_page_nodemask(page, nid, &nmask);
1345 }
1346
1347 static int
1348 do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
1349 {
1350         unsigned long pfn;
1351         struct page *page;
1352         int ret = 0;
1353         LIST_HEAD(source);
1354
1355         for (pfn = start_pfn; pfn < end_pfn; pfn++) {
1356                 if (!pfn_valid(pfn))
1357                         continue;
1358                 page = pfn_to_page(pfn);
1359
1360                 if (PageHuge(page)) {
1361                         struct page *head = compound_head(page);
1362                         pfn = page_to_pfn(head) + (1<<compound_order(head)) - 1;
1363                         isolate_huge_page(head, &source);
1364                         continue;
1365                 } else if (PageTransHuge(page))
1366                         pfn = page_to_pfn(compound_head(page))
1367                                 + hpage_nr_pages(page) - 1;
1368
1369                 /*
1370                  * HWPoison pages have elevated reference counts so the migration would
1371                  * fail on them. It also doesn't make any sense to migrate them in the
1372                  * first place. Still try to unmap such a page in case it is still mapped
1373                  * (e.g. current hwpoison implementation doesn't unmap KSM pages but keep
1374                  * the unmap as the catch all safety net).
1375                  */
1376                 if (PageHWPoison(page)) {
1377                         if (WARN_ON(PageLRU(page)))
1378                                 isolate_lru_page(page);
1379                         if (page_mapped(page))
1380                                 try_to_unmap(page, TTU_IGNORE_MLOCK | TTU_IGNORE_ACCESS);
1381                         continue;
1382                 }
1383
1384                 if (!get_page_unless_zero(page))
1385                         continue;
1386                 /*
1387                  * We can skip free pages. And we can deal with pages on
1388                  * LRU and non-lru movable pages.
1389                  */
1390                 if (PageLRU(page))
1391                         ret = isolate_lru_page(page);
1392                 else
1393                         ret = isolate_movable_page(page, ISOLATE_UNEVICTABLE);
1394                 if (!ret) { /* Success */
1395                         list_add_tail(&page->lru, &source);
1396                         if (!__PageMovable(page))
1397                                 inc_node_page_state(page, NR_ISOLATED_ANON +
1398                                                     page_is_file_cache(page));
1399
1400                 } else {
1401                         pr_warn("failed to isolate pfn %lx\n", pfn);
1402                         dump_page(page, "isolation failed");
1403                 }
1404                 put_page(page);
1405         }
1406         if (!list_empty(&source)) {
1407                 /* Allocate a new page from the nearest neighbor node */
1408                 ret = migrate_pages(&source, new_node_page, NULL, 0,
1409                                         MIGRATE_SYNC, MR_MEMORY_HOTPLUG);
1410                 if (ret) {
1411                         list_for_each_entry(page, &source, lru) {
1412                                 pr_warn("migrating pfn %lx failed ret:%d ",
1413                                        page_to_pfn(page), ret);
1414                                 dump_page(page, "migration failure");
1415                         }
1416                         putback_movable_pages(&source);
1417                 }
1418         }
1419
1420         return ret;
1421 }
1422
1423 /*
1424  * remove from free_area[] and mark all as Reserved.
1425  */
1426 static int
1427 offline_isolated_pages_cb(unsigned long start, unsigned long nr_pages,
1428                         void *data)
1429 {
1430         unsigned long *offlined_pages = (unsigned long *)data;
1431
1432         *offlined_pages += __offline_isolated_pages(start, start + nr_pages);
1433         return 0;
1434 }
1435
1436 /*
1437  * Check all pages in range, recoreded as memory resource, are isolated.
1438  */
1439 static int
1440 check_pages_isolated_cb(unsigned long start_pfn, unsigned long nr_pages,
1441                         void *data)
1442 {
1443         return test_pages_isolated(start_pfn, start_pfn + nr_pages, true);
1444 }
1445
1446 static int __init cmdline_parse_movable_node(char *p)
1447 {
1448 #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
1449         movable_node_enabled = true;
1450 #else
1451         pr_warn("movable_node parameter depends on CONFIG_HAVE_MEMBLOCK_NODE_MAP to work properly\n");
1452 #endif
1453         return 0;
1454 }
1455 early_param("movable_node", cmdline_parse_movable_node);
1456
1457 /* check which state of node_states will be changed when offline memory */
1458 static void node_states_check_changes_offline(unsigned long nr_pages,
1459                 struct zone *zone, struct memory_notify *arg)
1460 {
1461         struct pglist_data *pgdat = zone->zone_pgdat;
1462         unsigned long present_pages = 0;
1463         enum zone_type zt;
1464
1465         arg->status_change_nid = NUMA_NO_NODE;
1466         arg->status_change_nid_normal = NUMA_NO_NODE;
1467         arg->status_change_nid_high = NUMA_NO_NODE;
1468
1469         /*
1470          * Check whether node_states[N_NORMAL_MEMORY] will be changed.
1471          * If the memory to be offline is within the range
1472          * [0..ZONE_NORMAL], and it is the last present memory there,
1473          * the zones in that range will become empty after the offlining,
1474          * thus we can determine that we need to clear the node from
1475          * node_states[N_NORMAL_MEMORY].
1476          */
1477         for (zt = 0; zt <= ZONE_NORMAL; zt++)
1478                 present_pages += pgdat->node_zones[zt].present_pages;
1479         if (zone_idx(zone) <= ZONE_NORMAL && nr_pages >= present_pages)
1480                 arg->status_change_nid_normal = zone_to_nid(zone);
1481
1482 #ifdef CONFIG_HIGHMEM
1483         /*
1484          * node_states[N_HIGH_MEMORY] contains nodes which
1485          * have normal memory or high memory.
1486          * Here we add the present_pages belonging to ZONE_HIGHMEM.
1487          * If the zone is within the range of [0..ZONE_HIGHMEM), and
1488          * we determine that the zones in that range become empty,
1489          * we need to clear the node for N_HIGH_MEMORY.
1490          */
1491         present_pages += pgdat->node_zones[ZONE_HIGHMEM].present_pages;
1492         if (zone_idx(zone) <= ZONE_HIGHMEM && nr_pages >= present_pages)
1493                 arg->status_change_nid_high = zone_to_nid(zone);
1494 #endif
1495
1496         /*
1497          * We have accounted the pages from [0..ZONE_NORMAL), and
1498          * in case of CONFIG_HIGHMEM the pages from ZONE_HIGHMEM
1499          * as well.
1500          * Here we count the possible pages from ZONE_MOVABLE.
1501          * If after having accounted all the pages, we see that the nr_pages
1502          * to be offlined is over or equal to the accounted pages,
1503          * we know that the node will become empty, and so, we can clear
1504          * it for N_MEMORY as well.
1505          */
1506         present_pages += pgdat->node_zones[ZONE_MOVABLE].present_pages;
1507
1508         if (nr_pages >= present_pages)
1509                 arg->status_change_nid = zone_to_nid(zone);
1510 }
1511
1512 static void node_states_clear_node(int node, struct memory_notify *arg)
1513 {
1514         if (arg->status_change_nid_normal >= 0)
1515                 node_clear_state(node, N_NORMAL_MEMORY);
1516
1517         if (arg->status_change_nid_high >= 0)
1518                 node_clear_state(node, N_HIGH_MEMORY);
1519
1520         if (arg->status_change_nid >= 0)
1521                 node_clear_state(node, N_MEMORY);
1522 }
1523
1524 static int __ref __offline_pages(unsigned long start_pfn,
1525                   unsigned long end_pfn)
1526 {
1527         unsigned long pfn, nr_pages;
1528         unsigned long offlined_pages = 0;
1529         int ret, node, nr_isolate_pageblock;
1530         unsigned long flags;
1531         unsigned long valid_start, valid_end;
1532         struct zone *zone;
1533         struct memory_notify arg;
1534         char *reason;
1535
1536         mem_hotplug_begin();
1537
1538         /* This makes hotplug much easier...and readable.
1539            we assume this for now. .*/
1540         if (!test_pages_in_a_zone(start_pfn, end_pfn, &valid_start,
1541                                   &valid_end)) {
1542                 ret = -EINVAL;
1543                 reason = "multizone range";
1544                 goto failed_removal;
1545         }
1546
1547         zone = page_zone(pfn_to_page(valid_start));
1548         node = zone_to_nid(zone);
1549         nr_pages = end_pfn - start_pfn;
1550
1551         /* set above range as isolated */
1552         ret = start_isolate_page_range(start_pfn, end_pfn,
1553                                        MIGRATE_MOVABLE,
1554                                        SKIP_HWPOISON | REPORT_FAILURE);
1555         if (ret < 0) {
1556                 reason = "failure to isolate range";
1557                 goto failed_removal;
1558         }
1559         nr_isolate_pageblock = ret;
1560
1561         arg.start_pfn = start_pfn;
1562         arg.nr_pages = nr_pages;
1563         node_states_check_changes_offline(nr_pages, zone, &arg);
1564
1565         ret = memory_notify(MEM_GOING_OFFLINE, &arg);
1566         ret = notifier_to_errno(ret);
1567         if (ret) {
1568                 reason = "notifier failure";
1569                 goto failed_removal_isolated;
1570         }
1571
1572         do {
1573                 for (pfn = start_pfn; pfn;) {
1574                         if (signal_pending(current)) {
1575                                 ret = -EINTR;
1576                                 reason = "signal backoff";
1577                                 goto failed_removal_isolated;
1578                         }
1579
1580                         cond_resched();
1581                         lru_add_drain_all();
1582
1583                         pfn = scan_movable_pages(pfn, end_pfn);
1584                         if (pfn) {
1585                                 /*
1586                                  * TODO: fatal migration failures should bail
1587                                  * out
1588                                  */
1589                                 do_migrate_range(pfn, end_pfn);
1590                         }
1591                 }
1592
1593                 /*
1594                  * Dissolve free hugepages in the memory block before doing
1595                  * offlining actually in order to make hugetlbfs's object
1596                  * counting consistent.
1597                  */
1598                 ret = dissolve_free_huge_pages(start_pfn, end_pfn);
1599                 if (ret) {
1600                         reason = "failure to dissolve huge pages";
1601                         goto failed_removal_isolated;
1602                 }
1603                 /* check again */
1604                 ret = walk_system_ram_range(start_pfn, end_pfn - start_pfn,
1605                                             NULL, check_pages_isolated_cb);
1606         } while (ret);
1607
1608         /* Ok, all of our target is isolated.
1609            We cannot do rollback at this point. */
1610         walk_system_ram_range(start_pfn, end_pfn - start_pfn,
1611                               &offlined_pages, offline_isolated_pages_cb);
1612         pr_info("Offlined Pages %ld\n", offlined_pages);
1613         /*
1614          * Onlining will reset pagetype flags and makes migrate type
1615          * MOVABLE, so just need to decrease the number of isolated
1616          * pageblocks zone counter here.
1617          */
1618         spin_lock_irqsave(&zone->lock, flags);
1619         zone->nr_isolate_pageblock -= nr_isolate_pageblock;
1620         spin_unlock_irqrestore(&zone->lock, flags);
1621
1622         /* removal success */
1623         adjust_managed_page_count(pfn_to_page(start_pfn), -offlined_pages);
1624         zone->present_pages -= offlined_pages;
1625
1626         pgdat_resize_lock(zone->zone_pgdat, &flags);
1627         zone->zone_pgdat->node_present_pages -= offlined_pages;
1628         pgdat_resize_unlock(zone->zone_pgdat, &flags);
1629
1630         init_per_zone_wmark_min();
1631
1632         if (!populated_zone(zone)) {
1633                 zone_pcp_reset(zone);
1634                 build_all_zonelists(NULL);
1635         } else
1636                 zone_pcp_update(zone);
1637
1638         node_states_clear_node(node, &arg);
1639         if (arg.status_change_nid >= 0) {
1640                 kswapd_stop(node);
1641                 kcompactd_stop(node);
1642         }
1643
1644         vm_total_pages = nr_free_pagecache_pages();
1645         writeback_set_ratelimit();
1646
1647         memory_notify(MEM_OFFLINE, &arg);
1648         mem_hotplug_done();
1649         return 0;
1650
1651 failed_removal_isolated:
1652         undo_isolate_page_range(start_pfn, end_pfn, MIGRATE_MOVABLE);
1653         memory_notify(MEM_CANCEL_OFFLINE, &arg);
1654 failed_removal:
1655         pr_debug("memory offlining [mem %#010llx-%#010llx] failed due to %s\n",
1656                  (unsigned long long) start_pfn << PAGE_SHIFT,
1657                  ((unsigned long long) end_pfn << PAGE_SHIFT) - 1,
1658                  reason);
1659         /* pushback to free area */
1660         mem_hotplug_done();
1661         return ret;
1662 }
1663
1664 int offline_pages(unsigned long start_pfn, unsigned long nr_pages)
1665 {
1666         return __offline_pages(start_pfn, start_pfn + nr_pages);
1667 }
1668 #endif /* CONFIG_MEMORY_HOTREMOVE */
1669
1670 /**
1671  * walk_memory_range - walks through all mem sections in [start_pfn, end_pfn)
1672  * @start_pfn: start pfn of the memory range
1673  * @end_pfn: end pfn of the memory range
1674  * @arg: argument passed to func
1675  * @func: callback for each memory section walked
1676  *
1677  * This function walks through all present mem sections in range
1678  * [start_pfn, end_pfn) and call func on each mem section.
1679  *
1680  * Returns the return value of func.
1681  */
1682 int walk_memory_range(unsigned long start_pfn, unsigned long end_pfn,
1683                 void *arg, int (*func)(struct memory_block *, void *))
1684 {
1685         struct memory_block *mem = NULL;
1686         struct mem_section *section;
1687         unsigned long pfn, section_nr;
1688         int ret;
1689
1690         for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) {
1691                 section_nr = pfn_to_section_nr(pfn);
1692                 if (!present_section_nr(section_nr))
1693                         continue;
1694
1695                 section = __nr_to_section(section_nr);
1696                 /* same memblock? */
1697                 if (mem)
1698                         if ((section_nr >= mem->start_section_nr) &&
1699                             (section_nr <= mem->end_section_nr))
1700                                 continue;
1701
1702                 mem = find_memory_block_hinted(section, mem);
1703                 if (!mem)
1704                         continue;
1705
1706                 ret = func(mem, arg);
1707                 if (ret) {
1708                         kobject_put(&mem->dev.kobj);
1709                         return ret;
1710                 }
1711         }
1712
1713         if (mem)
1714                 kobject_put(&mem->dev.kobj);
1715
1716         return 0;
1717 }
1718
1719 #ifdef CONFIG_MEMORY_HOTREMOVE
1720 static int check_memblock_offlined_cb(struct memory_block *mem, void *arg)
1721 {
1722         int ret = !is_memblock_offlined(mem);
1723
1724         if (unlikely(ret)) {
1725                 phys_addr_t beginpa, endpa;
1726
1727                 beginpa = PFN_PHYS(section_nr_to_pfn(mem->start_section_nr));
1728                 endpa = PFN_PHYS(section_nr_to_pfn(mem->end_section_nr + 1))-1;
1729                 pr_warn("removing memory fails, because memory [%pa-%pa] is onlined\n",
1730                         &beginpa, &endpa);
1731
1732                 return -EBUSY;
1733         }
1734         return 0;
1735 }
1736
1737 static int check_cpu_on_node(pg_data_t *pgdat)
1738 {
1739         int cpu;
1740
1741         for_each_present_cpu(cpu) {
1742                 if (cpu_to_node(cpu) == pgdat->node_id)
1743                         /*
1744                          * the cpu on this node isn't removed, and we can't
1745                          * offline this node.
1746                          */
1747                         return -EBUSY;
1748         }
1749
1750         return 0;
1751 }
1752
1753 /**
1754  * try_offline_node
1755  * @nid: the node ID
1756  *
1757  * Offline a node if all memory sections and cpus of the node are removed.
1758  *
1759  * NOTE: The caller must call lock_device_hotplug() to serialize hotplug
1760  * and online/offline operations before this call.
1761  */
1762 void try_offline_node(int nid)
1763 {
1764         pg_data_t *pgdat = NODE_DATA(nid);
1765         unsigned long start_pfn = pgdat->node_start_pfn;
1766         unsigned long end_pfn = start_pfn + pgdat->node_spanned_pages;
1767         unsigned long pfn;
1768
1769         for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) {
1770                 unsigned long section_nr = pfn_to_section_nr(pfn);
1771
1772                 if (!present_section_nr(section_nr))
1773                         continue;
1774
1775                 if (pfn_to_nid(pfn) != nid)
1776                         continue;
1777
1778                 /*
1779                  * some memory sections of this node are not removed, and we
1780                  * can't offline node now.
1781                  */
1782                 return;
1783         }
1784
1785         if (check_cpu_on_node(pgdat))
1786                 return;
1787
1788         /*
1789          * all memory/cpu of this node are removed, we can offline this
1790          * node now.
1791          */
1792         node_set_offline(nid);
1793         unregister_one_node(nid);
1794 }
1795 EXPORT_SYMBOL(try_offline_node);
1796
1797 static void __release_memory_resource(resource_size_t start,
1798                                       resource_size_t size)
1799 {
1800         int ret;
1801
1802         /*
1803          * When removing memory in the same granularity as it was added,
1804          * this function never fails. It might only fail if resources
1805          * have to be adjusted or split. We'll ignore the error, as
1806          * removing of memory cannot fail.
1807          */
1808         ret = release_mem_region_adjustable(&iomem_resource, start, size);
1809         if (ret) {
1810                 resource_size_t endres = start + size - 1;
1811
1812                 pr_warn("Unable to release resource <%pa-%pa> (%d)\n",
1813                         &start, &endres, ret);
1814         }
1815 }
1816
1817 static int __ref try_remove_memory(int nid, u64 start, u64 size)
1818 {
1819         int rc = 0;
1820
1821         BUG_ON(check_hotplug_memory_range(start, size));
1822
1823         mem_hotplug_begin();
1824
1825         /*
1826          * All memory blocks must be offlined before removing memory.  Check
1827          * whether all memory blocks in question are offline and return error
1828          * if this is not the case.
1829          */
1830         rc = walk_memory_range(PFN_DOWN(start), PFN_UP(start + size - 1), NULL,
1831                                check_memblock_offlined_cb);
1832         if (rc)
1833                 goto done;
1834
1835         /* remove memmap entry */
1836         firmware_map_remove(start, start + size, "System RAM");
1837         memblock_free(start, size);
1838         memblock_remove(start, size);
1839
1840         arch_remove_memory(nid, start, size, NULL);
1841         __release_memory_resource(start, size);
1842
1843         try_offline_node(nid);
1844
1845 done:
1846         mem_hotplug_done();
1847         return rc;
1848 }
1849
1850 /**
1851  * remove_memory
1852  * @nid: the node ID
1853  * @start: physical address of the region to remove
1854  * @size: size of the region to remove
1855  *
1856  * NOTE: The caller must call lock_device_hotplug() to serialize hotplug
1857  * and online/offline operations before this call, as required by
1858  * try_offline_node().
1859  */
1860 void __remove_memory(int nid, u64 start, u64 size)
1861 {
1862
1863         /*
1864          * trigger BUG() is some memory is not offlined prior to calling this
1865          * function
1866          */
1867         if (try_remove_memory(nid, start, size))
1868                 BUG();
1869 }
1870
1871 /*
1872  * Remove memory if every memory block is offline, otherwise return -EBUSY is
1873  * some memory is not offline
1874  */
1875 int remove_memory(int nid, u64 start, u64 size)
1876 {
1877         int rc;
1878
1879         lock_device_hotplug();
1880         rc  = try_remove_memory(nid, start, size);
1881         unlock_device_hotplug();
1882
1883         return rc;
1884 }
1885 EXPORT_SYMBOL_GPL(remove_memory);
1886 #endif /* CONFIG_MEMORY_HOTREMOVE */