1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#include <linux/stddef.h>
19#include <linux/mm.h>
20#include <linux/highmem.h>
21#include <linux/swap.h>
22#include <linux/interrupt.h>
23#include <linux/pagemap.h>
24#include <linux/jiffies.h>
25#include <linux/memblock.h>
26#include <linux/compiler.h>
27#include <linux/kernel.h>
28#include <linux/kasan.h>
29#include <linux/module.h>
30#include <linux/suspend.h>
31#include <linux/pagevec.h>
32#include <linux/blkdev.h>
33#include <linux/slab.h>
34#include <linux/ratelimit.h>
35#include <linux/oom.h>
36#include <linux/topology.h>
37#include <linux/sysctl.h>
38#include <linux/cpu.h>
39#include <linux/cpuset.h>
40#include <linux/memory_hotplug.h>
41#include <linux/nodemask.h>
42#include <linux/vmalloc.h>
43#include <linux/vmstat.h>
44#include <linux/mempolicy.h>
45#include <linux/memremap.h>
46#include <linux/stop_machine.h>
47#include <linux/random.h>
48#include <linux/sort.h>
49#include <linux/pfn.h>
50#include <linux/backing-dev.h>
51#include <linux/fault-inject.h>
52#include <linux/page-isolation.h>
53#include <linux/debugobjects.h>
54#include <linux/kmemleak.h>
55#include <linux/compaction.h>
56#include <trace/events/kmem.h>
57#include <trace/events/oom.h>
58#include <linux/prefetch.h>
59#include <linux/mm_inline.h>
60#include <linux/migrate.h>
61#include <linux/hugetlb.h>
62#include <linux/sched/rt.h>
63#include <linux/sched/mm.h>
64#include <linux/page_owner.h>
65#include <linux/kthread.h>
66#include <linux/memcontrol.h>
67#include <linux/ftrace.h>
68#include <linux/lockdep.h>
69#include <linux/nmi.h>
70#include <linux/psi.h>
71#include <linux/padata.h>
72#include <linux/khugepaged.h>
73
74#include <asm/sections.h>
75#include <asm/tlbflush.h>
76#include <asm/div64.h>
77#include "internal.h"
78#include "shuffle.h"
79#include "page_reporting.h"
80
81
82static DEFINE_MUTEX(pcp_batch_high_lock);
83#define MIN_PERCPU_PAGELIST_FRACTION (8)
84
85#ifdef CONFIG_USE_PERCPU_NUMA_NODE_ID
86DEFINE_PER_CPU(int, numa_node);
87EXPORT_PER_CPU_SYMBOL(numa_node);
88#endif
89
90DEFINE_STATIC_KEY_TRUE(vm_numa_stat_key);
91
92#ifdef CONFIG_HAVE_MEMORYLESS_NODES
93
94
95
96
97
98
99DEFINE_PER_CPU(int, _numa_mem_);
100EXPORT_PER_CPU_SYMBOL(_numa_mem_);
101#endif
102
103
104struct pcpu_drain {
105 struct zone *zone;
106 struct work_struct work;
107};
108static DEFINE_MUTEX(pcpu_drain_mutex);
109static DEFINE_PER_CPU(struct pcpu_drain, pcpu_drain);
110
111#ifdef CONFIG_GCC_PLUGIN_LATENT_ENTROPY
112volatile unsigned long latent_entropy __latent_entropy;
113EXPORT_SYMBOL(latent_entropy);
114#endif
115
116
117
118
119nodemask_t node_states[NR_NODE_STATES] __read_mostly = {
120 [N_POSSIBLE] = NODE_MASK_ALL,
121 [N_ONLINE] = { { [0] = 1UL } },
122#ifndef CONFIG_NUMA
123 [N_NORMAL_MEMORY] = { { [0] = 1UL } },
124#ifdef CONFIG_HIGHMEM
125 [N_HIGH_MEMORY] = { { [0] = 1UL } },
126#endif
127 [N_MEMORY] = { { [0] = 1UL } },
128 [N_CPU] = { { [0] = 1UL } },
129#endif
130};
131EXPORT_SYMBOL(node_states);
132
133atomic_long_t _totalram_pages __read_mostly;
134EXPORT_SYMBOL(_totalram_pages);
135unsigned long totalreserve_pages __read_mostly;
136unsigned long totalcma_pages __read_mostly;
137
138int percpu_pagelist_fraction;
139gfp_t gfp_allowed_mask __read_mostly = GFP_BOOT_MASK;
140#ifdef CONFIG_INIT_ON_ALLOC_DEFAULT_ON
141DEFINE_STATIC_KEY_TRUE(init_on_alloc);
142#else
143DEFINE_STATIC_KEY_FALSE(init_on_alloc);
144#endif
145EXPORT_SYMBOL(init_on_alloc);
146
147#ifdef CONFIG_INIT_ON_FREE_DEFAULT_ON
148DEFINE_STATIC_KEY_TRUE(init_on_free);
149#else
150DEFINE_STATIC_KEY_FALSE(init_on_free);
151#endif
152EXPORT_SYMBOL(init_on_free);
153
154static int __init early_init_on_alloc(char *buf)
155{
156 int ret;
157 bool bool_result;
158
159 if (!buf)
160 return -EINVAL;
161 ret = kstrtobool(buf, &bool_result);
162 if (bool_result && page_poisoning_enabled())
163 pr_info("mem auto-init: CONFIG_PAGE_POISONING is on, will take precedence over init_on_alloc\n");
164 if (bool_result)
165 static_branch_enable(&init_on_alloc);
166 else
167 static_branch_disable(&init_on_alloc);
168 return ret;
169}
170early_param("init_on_alloc", early_init_on_alloc);
171
172static int __init early_init_on_free(char *buf)
173{
174 int ret;
175 bool bool_result;
176
177 if (!buf)
178 return -EINVAL;
179 ret = kstrtobool(buf, &bool_result);
180 if (bool_result && page_poisoning_enabled())
181 pr_info("mem auto-init: CONFIG_PAGE_POISONING is on, will take precedence over init_on_free\n");
182 if (bool_result)
183 static_branch_enable(&init_on_free);
184 else
185 static_branch_disable(&init_on_free);
186 return ret;
187}
188early_param("init_on_free", early_init_on_free);
189
190
191
192
193
194
195
196
197
198static inline int get_pcppage_migratetype(struct page *page)
199{
200 return page->index;
201}
202
203static inline void set_pcppage_migratetype(struct page *page, int migratetype)
204{
205 page->index = migratetype;
206}
207
208#ifdef CONFIG_PM_SLEEP
209
210
211
212
213
214
215
216
217
218
219static gfp_t saved_gfp_mask;
220
221void pm_restore_gfp_mask(void)
222{
223 WARN_ON(!mutex_is_locked(&system_transition_mutex));
224 if (saved_gfp_mask) {
225 gfp_allowed_mask = saved_gfp_mask;
226 saved_gfp_mask = 0;
227 }
228}
229
230void pm_restrict_gfp_mask(void)
231{
232 WARN_ON(!mutex_is_locked(&system_transition_mutex));
233 WARN_ON(saved_gfp_mask);
234 saved_gfp_mask = gfp_allowed_mask;
235 gfp_allowed_mask &= ~(__GFP_IO | __GFP_FS);
236}
237
238bool pm_suspended_storage(void)
239{
240 if ((gfp_allowed_mask & (__GFP_IO | __GFP_FS)) == (__GFP_IO | __GFP_FS))
241 return false;
242 return true;
243}
244#endif
245
246#ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
247unsigned int pageblock_order __read_mostly;
248#endif
249
250static void __free_pages_ok(struct page *page, unsigned int order);
251
252
253
254
255
256
257
258
259
260
261
262
263int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES] = {
264#ifdef CONFIG_ZONE_DMA
265 [ZONE_DMA] = 256,
266#endif
267#ifdef CONFIG_ZONE_DMA32
268 [ZONE_DMA32] = 256,
269#endif
270 [ZONE_NORMAL] = 32,
271#ifdef CONFIG_HIGHMEM
272 [ZONE_HIGHMEM] = 0,
273#endif
274 [ZONE_MOVABLE] = 0,
275};
276
277static char * const zone_names[MAX_NR_ZONES] = {
278#ifdef CONFIG_ZONE_DMA
279 "DMA",
280#endif
281#ifdef CONFIG_ZONE_DMA32
282 "DMA32",
283#endif
284 "Normal",
285#ifdef CONFIG_HIGHMEM
286 "HighMem",
287#endif
288 "Movable",
289#ifdef CONFIG_ZONE_DEVICE
290 "Device",
291#endif
292};
293
294const char * const migratetype_names[MIGRATE_TYPES] = {
295 "Unmovable",
296 "Movable",
297 "Reclaimable",
298 "HighAtomic",
299#ifdef CONFIG_CMA
300 "CMA",
301#endif
302#ifdef CONFIG_MEMORY_ISOLATION
303 "Isolate",
304#endif
305};
306
307compound_page_dtor * const compound_page_dtors[NR_COMPOUND_DTORS] = {
308 [NULL_COMPOUND_DTOR] = NULL,
309 [COMPOUND_PAGE_DTOR] = free_compound_page,
310#ifdef CONFIG_HUGETLB_PAGE
311 [HUGETLB_PAGE_DTOR] = free_huge_page,
312#endif
313#ifdef CONFIG_TRANSPARENT_HUGEPAGE
314 [TRANSHUGE_PAGE_DTOR] = free_transhuge_page,
315#endif
316};
317
318int min_free_kbytes = 1024;
319int user_min_free_kbytes = -1;
320#ifdef CONFIG_DISCONTIGMEM
321
322
323
324
325
326
327
328
329
330int watermark_boost_factor __read_mostly;
331#else
332int watermark_boost_factor __read_mostly = 15000;
333#endif
334int watermark_scale_factor = 10;
335
336static unsigned long nr_kernel_pages __initdata;
337static unsigned long nr_all_pages __initdata;
338static unsigned long dma_reserve __initdata;
339
340static unsigned long arch_zone_lowest_possible_pfn[MAX_NR_ZONES] __initdata;
341static unsigned long arch_zone_highest_possible_pfn[MAX_NR_ZONES] __initdata;
342static unsigned long required_kernelcore __initdata;
343static unsigned long required_kernelcore_percent __initdata;
344static unsigned long required_movablecore __initdata;
345static unsigned long required_movablecore_percent __initdata;
346static unsigned long zone_movable_pfn[MAX_NUMNODES] __initdata;
347static bool mirrored_kernelcore __meminitdata;
348
349
350int movable_zone;
351EXPORT_SYMBOL(movable_zone);
352
353#if MAX_NUMNODES > 1
354unsigned int nr_node_ids __read_mostly = MAX_NUMNODES;
355unsigned int nr_online_nodes __read_mostly = 1;
356EXPORT_SYMBOL(nr_node_ids);
357EXPORT_SYMBOL(nr_online_nodes);
358#endif
359
360int page_group_by_mobility_disabled __read_mostly;
361
362#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
363
364
365
366
367
368static DEFINE_STATIC_KEY_TRUE(deferred_pages);
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383static inline void kasan_free_nondeferred_pages(struct page *page, int order)
384{
385 if (!static_branch_unlikely(&deferred_pages))
386 kasan_free_pages(page, order);
387}
388
389
390static inline bool __meminit early_page_uninitialised(unsigned long pfn)
391{
392 int nid = early_pfn_to_nid(pfn);
393
394 if (node_online(nid) && pfn >= NODE_DATA(nid)->first_deferred_pfn)
395 return true;
396
397 return false;
398}
399
400
401
402
403
404static bool __meminit
405defer_init(int nid, unsigned long pfn, unsigned long end_pfn)
406{
407 static unsigned long prev_end_pfn, nr_initialised;
408
409
410
411
412
413 if (prev_end_pfn != end_pfn) {
414 prev_end_pfn = end_pfn;
415 nr_initialised = 0;
416 }
417
418
419 if (end_pfn < pgdat_end_pfn(NODE_DATA(nid)))
420 return false;
421
422
423
424
425
426 nr_initialised++;
427 if ((nr_initialised > PAGES_PER_SECTION) &&
428 (pfn & (PAGES_PER_SECTION - 1)) == 0) {
429 NODE_DATA(nid)->first_deferred_pfn = pfn;
430 return true;
431 }
432 return false;
433}
434#else
435#define kasan_free_nondeferred_pages(p, o) kasan_free_pages(p, o)
436
437static inline bool early_page_uninitialised(unsigned long pfn)
438{
439 return false;
440}
441
442static inline bool defer_init(int nid, unsigned long pfn, unsigned long end_pfn)
443{
444 return false;
445}
446#endif
447
448
449static inline unsigned long *get_pageblock_bitmap(struct page *page,
450 unsigned long pfn)
451{
452#ifdef CONFIG_SPARSEMEM
453 return section_to_usemap(__pfn_to_section(pfn));
454#else
455 return page_zone(page)->pageblock_flags;
456#endif
457}
458
459static inline int pfn_to_bitidx(struct page *page, unsigned long pfn)
460{
461#ifdef CONFIG_SPARSEMEM
462 pfn &= (PAGES_PER_SECTION-1);
463#else
464 pfn = pfn - round_down(page_zone(page)->zone_start_pfn, pageblock_nr_pages);
465#endif
466 return (pfn >> pageblock_order) * NR_PAGEBLOCK_BITS;
467}
468
469
470
471
472
473
474
475
476
477static __always_inline
478unsigned long __get_pfnblock_flags_mask(struct page *page,
479 unsigned long pfn,
480 unsigned long mask)
481{
482 unsigned long *bitmap;
483 unsigned long bitidx, word_bitidx;
484 unsigned long word;
485
486 bitmap = get_pageblock_bitmap(page, pfn);
487 bitidx = pfn_to_bitidx(page, pfn);
488 word_bitidx = bitidx / BITS_PER_LONG;
489 bitidx &= (BITS_PER_LONG-1);
490
491 word = bitmap[word_bitidx];
492 return (word >> bitidx) & mask;
493}
494
495unsigned long get_pfnblock_flags_mask(struct page *page, unsigned long pfn,
496 unsigned long mask)
497{
498 return __get_pfnblock_flags_mask(page, pfn, mask);
499}
500
501static __always_inline int get_pfnblock_migratetype(struct page *page, unsigned long pfn)
502{
503 return __get_pfnblock_flags_mask(page, pfn, MIGRATETYPE_MASK);
504}
505
506
507
508
509
510
511
512
513void set_pfnblock_flags_mask(struct page *page, unsigned long flags,
514 unsigned long pfn,
515 unsigned long mask)
516{
517 unsigned long *bitmap;
518 unsigned long bitidx, word_bitidx;
519 unsigned long old_word, word;
520
521 BUILD_BUG_ON(NR_PAGEBLOCK_BITS != 4);
522 BUILD_BUG_ON(MIGRATE_TYPES > (1 << PB_migratetype_bits));
523
524 bitmap = get_pageblock_bitmap(page, pfn);
525 bitidx = pfn_to_bitidx(page, pfn);
526 word_bitidx = bitidx / BITS_PER_LONG;
527 bitidx &= (BITS_PER_LONG-1);
528
529 VM_BUG_ON_PAGE(!zone_spans_pfn(page_zone(page), pfn), page);
530
531 mask <<= bitidx;
532 flags <<= bitidx;
533
534 word = READ_ONCE(bitmap[word_bitidx]);
535 for (;;) {
536 old_word = cmpxchg(&bitmap[word_bitidx], word, (word & ~mask) | flags);
537 if (word == old_word)
538 break;
539 word = old_word;
540 }
541}
542
543void set_pageblock_migratetype(struct page *page, int migratetype)
544{
545 if (unlikely(page_group_by_mobility_disabled &&
546 migratetype < MIGRATE_PCPTYPES))
547 migratetype = MIGRATE_UNMOVABLE;
548
549 set_pfnblock_flags_mask(page, (unsigned long)migratetype,
550 page_to_pfn(page), MIGRATETYPE_MASK);
551}
552
553#ifdef CONFIG_DEBUG_VM
554static int page_outside_zone_boundaries(struct zone *zone, struct page *page)
555{
556 int ret = 0;
557 unsigned seq;
558 unsigned long pfn = page_to_pfn(page);
559 unsigned long sp, start_pfn;
560
561 do {
562 seq = zone_span_seqbegin(zone);
563 start_pfn = zone->zone_start_pfn;
564 sp = zone->spanned_pages;
565 if (!zone_spans_pfn(zone, pfn))
566 ret = 1;
567 } while (zone_span_seqretry(zone, seq));
568
569 if (ret)
570 pr_err("page 0x%lx outside node %d zone %s [ 0x%lx - 0x%lx ]\n",
571 pfn, zone_to_nid(zone), zone->name,
572 start_pfn, start_pfn + sp);
573
574 return ret;
575}
576
577static int page_is_consistent(struct zone *zone, struct page *page)
578{
579 if (!pfn_valid_within(page_to_pfn(page)))
580 return 0;
581 if (zone != page_zone(page))
582 return 0;
583
584 return 1;
585}
586
587
588
589static int __maybe_unused bad_range(struct zone *zone, struct page *page)
590{
591 if (page_outside_zone_boundaries(zone, page))
592 return 1;
593 if (!page_is_consistent(zone, page))
594 return 1;
595
596 return 0;
597}
598#else
599static inline int __maybe_unused bad_range(struct zone *zone, struct page *page)
600{
601 return 0;
602}
603#endif
604
605static void bad_page(struct page *page, const char *reason)
606{
607 static unsigned long resume;
608 static unsigned long nr_shown;
609 static unsigned long nr_unshown;
610
611
612
613
614
615 if (nr_shown == 60) {
616 if (time_before(jiffies, resume)) {
617 nr_unshown++;
618 goto out;
619 }
620 if (nr_unshown) {
621 pr_alert(
622 "BUG: Bad page state: %lu messages suppressed\n",
623 nr_unshown);
624 nr_unshown = 0;
625 }
626 nr_shown = 0;
627 }
628 if (nr_shown++ == 0)
629 resume = jiffies + 60 * HZ;
630
631 pr_alert("BUG: Bad page state in process %s pfn:%05lx\n",
632 current->comm, page_to_pfn(page));
633 __dump_page(page, reason);
634 dump_page_owner(page);
635
636 print_modules();
637 dump_stack();
638out:
639
640 page_mapcount_reset(page);
641 add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE);
642}
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659void free_compound_page(struct page *page)
660{
661 mem_cgroup_uncharge(page);
662 __free_pages_ok(page, compound_order(page));
663}
664
665void prep_compound_page(struct page *page, unsigned int order)
666{
667 int i;
668 int nr_pages = 1 << order;
669
670 __SetPageHead(page);
671 for (i = 1; i < nr_pages; i++) {
672 struct page *p = page + i;
673 set_page_count(p, 0);
674 p->mapping = TAIL_MAPPING;
675 set_compound_head(p, page);
676 }
677
678 set_compound_page_dtor(page, COMPOUND_PAGE_DTOR);
679 set_compound_order(page, order);
680 atomic_set(compound_mapcount_ptr(page), -1);
681 if (hpage_pincount_available(page))
682 atomic_set(compound_pincount_ptr(page), 0);
683}
684
685#ifdef CONFIG_DEBUG_PAGEALLOC
686unsigned int _debug_guardpage_minorder;
687
688bool _debug_pagealloc_enabled_early __read_mostly
689 = IS_ENABLED(CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT);
690EXPORT_SYMBOL(_debug_pagealloc_enabled_early);
691DEFINE_STATIC_KEY_FALSE(_debug_pagealloc_enabled);
692EXPORT_SYMBOL(_debug_pagealloc_enabled);
693
694DEFINE_STATIC_KEY_FALSE(_debug_guardpage_enabled);
695
696static int __init early_debug_pagealloc(char *buf)
697{
698 return kstrtobool(buf, &_debug_pagealloc_enabled_early);
699}
700early_param("debug_pagealloc", early_debug_pagealloc);
701
702void init_debug_pagealloc(void)
703{
704 if (!debug_pagealloc_enabled())
705 return;
706
707 static_branch_enable(&_debug_pagealloc_enabled);
708
709 if (!debug_guardpage_minorder())
710 return;
711
712 static_branch_enable(&_debug_guardpage_enabled);
713}
714
715static int __init debug_guardpage_minorder_setup(char *buf)
716{
717 unsigned long res;
718
719 if (kstrtoul(buf, 10, &res) < 0 || res > MAX_ORDER / 2) {
720 pr_err("Bad debug_guardpage_minorder value\n");
721 return 0;
722 }
723 _debug_guardpage_minorder = res;
724 pr_info("Setting debug_guardpage_minorder to %lu\n", res);
725 return 0;
726}
727early_param("debug_guardpage_minorder", debug_guardpage_minorder_setup);
728
729static inline bool set_page_guard(struct zone *zone, struct page *page,
730 unsigned int order, int migratetype)
731{
732 if (!debug_guardpage_enabled())
733 return false;
734
735 if (order >= debug_guardpage_minorder())
736 return false;
737
738 __SetPageGuard(page);
739 INIT_LIST_HEAD(&page->lru);
740 set_page_private(page, order);
741
742 __mod_zone_freepage_state(zone, -(1 << order), migratetype);
743
744 return true;
745}
746
747static inline void clear_page_guard(struct zone *zone, struct page *page,
748 unsigned int order, int migratetype)
749{
750 if (!debug_guardpage_enabled())
751 return;
752
753 __ClearPageGuard(page);
754
755 set_page_private(page, 0);
756 if (!is_migrate_isolate(migratetype))
757 __mod_zone_freepage_state(zone, (1 << order), migratetype);
758}
759#else
760static inline bool set_page_guard(struct zone *zone, struct page *page,
761 unsigned int order, int migratetype) { return false; }
762static inline void clear_page_guard(struct zone *zone, struct page *page,
763 unsigned int order, int migratetype) {}
764#endif
765
766static inline void set_page_order(struct page *page, unsigned int order)
767{
768 set_page_private(page, order);
769 __SetPageBuddy(page);
770}
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785static inline bool page_is_buddy(struct page *page, struct page *buddy,
786 unsigned int order)
787{
788 if (!page_is_guard(buddy) && !PageBuddy(buddy))
789 return false;
790
791 if (page_order(buddy) != order)
792 return false;
793
794
795
796
797
798 if (page_zone_id(page) != page_zone_id(buddy))
799 return false;
800
801 VM_BUG_ON_PAGE(page_count(buddy) != 0, buddy);
802
803 return true;
804}
805
806#ifdef CONFIG_COMPACTION
807static inline struct capture_control *task_capc(struct zone *zone)
808{
809 struct capture_control *capc = current->capture_control;
810
811 return unlikely(capc) &&
812 !(current->flags & PF_KTHREAD) &&
813 !capc->page &&
814 capc->cc->zone == zone ? capc : NULL;
815}
816
817static inline bool
818compaction_capture(struct capture_control *capc, struct page *page,
819 int order, int migratetype)
820{
821 if (!capc || order != capc->cc->order)
822 return false;
823
824
825 if (is_migrate_cma(migratetype) ||
826 is_migrate_isolate(migratetype))
827 return false;
828
829
830
831
832
833
834
835 if (order < pageblock_order && migratetype == MIGRATE_MOVABLE)
836 return false;
837
838 capc->page = page;
839 return true;
840}
841
842#else
843static inline struct capture_control *task_capc(struct zone *zone)
844{
845 return NULL;
846}
847
848static inline bool
849compaction_capture(struct capture_control *capc, struct page *page,
850 int order, int migratetype)
851{
852 return false;
853}
854#endif
855
856
857static inline void add_to_free_list(struct page *page, struct zone *zone,
858 unsigned int order, int migratetype)
859{
860 struct free_area *area = &zone->free_area[order];
861
862 list_add(&page->lru, &area->free_list[migratetype]);
863 area->nr_free++;
864}
865
866
867static inline void add_to_free_list_tail(struct page *page, struct zone *zone,
868 unsigned int order, int migratetype)
869{
870 struct free_area *area = &zone->free_area[order];
871
872 list_add_tail(&page->lru, &area->free_list[migratetype]);
873 area->nr_free++;
874}
875
876
877static inline void move_to_free_list(struct page *page, struct zone *zone,
878 unsigned int order, int migratetype)
879{
880 struct free_area *area = &zone->free_area[order];
881
882 list_move(&page->lru, &area->free_list[migratetype]);
883}
884
885static inline void del_page_from_free_list(struct page *page, struct zone *zone,
886 unsigned int order)
887{
888
889 if (page_reported(page))
890 __ClearPageReported(page);
891
892 list_del(&page->lru);
893 __ClearPageBuddy(page);
894 set_page_private(page, 0);
895 zone->free_area[order].nr_free--;
896}
897
898
899
900
901
902
903
904
905
906static inline bool
907buddy_merge_likely(unsigned long pfn, unsigned long buddy_pfn,
908 struct page *page, unsigned int order)
909{
910 struct page *higher_page, *higher_buddy;
911 unsigned long combined_pfn;
912
913 if (order >= MAX_ORDER - 2)
914 return false;
915
916 if (!pfn_valid_within(buddy_pfn))
917 return false;
918
919 combined_pfn = buddy_pfn & pfn;
920 higher_page = page + (combined_pfn - pfn);
921 buddy_pfn = __find_buddy_pfn(combined_pfn, order + 1);
922 higher_buddy = higher_page + (buddy_pfn - combined_pfn);
923
924 return pfn_valid_within(buddy_pfn) &&
925 page_is_buddy(higher_page, higher_buddy, order + 1);
926}
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952static inline void __free_one_page(struct page *page,
953 unsigned long pfn,
954 struct zone *zone, unsigned int order,
955 int migratetype, bool report)
956{
957 struct capture_control *capc = task_capc(zone);
958 unsigned long buddy_pfn;
959 unsigned long combined_pfn;
960 unsigned int max_order;
961 struct page *buddy;
962 bool to_tail;
963
964 max_order = min_t(unsigned int, MAX_ORDER, pageblock_order + 1);
965
966 VM_BUG_ON(!zone_is_initialized(zone));
967 VM_BUG_ON_PAGE(page->flags & PAGE_FLAGS_CHECK_AT_PREP, page);
968
969 VM_BUG_ON(migratetype == -1);
970 if (likely(!is_migrate_isolate(migratetype)))
971 __mod_zone_freepage_state(zone, 1 << order, migratetype);
972
973 VM_BUG_ON_PAGE(pfn & ((1 << order) - 1), page);
974 VM_BUG_ON_PAGE(bad_range(zone, page), page);
975
976continue_merging:
977 while (order < max_order - 1) {
978 if (compaction_capture(capc, page, order, migratetype)) {
979 __mod_zone_freepage_state(zone, -(1 << order),
980 migratetype);
981 return;
982 }
983 buddy_pfn = __find_buddy_pfn(pfn, order);
984 buddy = page + (buddy_pfn - pfn);
985
986 if (!pfn_valid_within(buddy_pfn))
987 goto done_merging;
988 if (!page_is_buddy(page, buddy, order))
989 goto done_merging;
990
991
992
993
994 if (page_is_guard(buddy))
995 clear_page_guard(zone, buddy, order, migratetype);
996 else
997 del_page_from_free_list(buddy, zone, order);
998 combined_pfn = buddy_pfn & pfn;
999 page = page + (combined_pfn - pfn);
1000 pfn = combined_pfn;
1001 order++;
1002 }
1003 if (max_order < MAX_ORDER) {
1004
1005
1006
1007
1008
1009
1010
1011
1012 if (unlikely(has_isolate_pageblock(zone))) {
1013 int buddy_mt;
1014
1015 buddy_pfn = __find_buddy_pfn(pfn, order);
1016 buddy = page + (buddy_pfn - pfn);
1017 buddy_mt = get_pageblock_migratetype(buddy);
1018
1019 if (migratetype != buddy_mt
1020 && (is_migrate_isolate(migratetype) ||
1021 is_migrate_isolate(buddy_mt)))
1022 goto done_merging;
1023 }
1024 max_order++;
1025 goto continue_merging;
1026 }
1027
1028done_merging:
1029 set_page_order(page, order);
1030
1031 if (is_shuffle_order(order))
1032 to_tail = shuffle_pick_tail();
1033 else
1034 to_tail = buddy_merge_likely(pfn, buddy_pfn, page, order);
1035
1036 if (to_tail)
1037 add_to_free_list_tail(page, zone, order, migratetype);
1038 else
1039 add_to_free_list(page, zone, order, migratetype);
1040
1041
1042 if (report)
1043 page_reporting_notify_free(order);
1044}
1045
1046
1047
1048
1049
1050
1051static inline bool page_expected_state(struct page *page,
1052 unsigned long check_flags)
1053{
1054 if (unlikely(atomic_read(&page->_mapcount) != -1))
1055 return false;
1056
1057 if (unlikely((unsigned long)page->mapping |
1058 page_ref_count(page) |
1059#ifdef CONFIG_MEMCG
1060 (unsigned long)page->mem_cgroup |
1061#endif
1062 (page->flags & check_flags)))
1063 return false;
1064
1065 return true;
1066}
1067
1068static const char *page_bad_reason(struct page *page, unsigned long flags)
1069{
1070 const char *bad_reason = NULL;
1071
1072 if (unlikely(atomic_read(&page->_mapcount) != -1))
1073 bad_reason = "nonzero mapcount";
1074 if (unlikely(page->mapping != NULL))
1075 bad_reason = "non-NULL mapping";
1076 if (unlikely(page_ref_count(page) != 0))
1077 bad_reason = "nonzero _refcount";
1078 if (unlikely(page->flags & flags)) {
1079 if (flags == PAGE_FLAGS_CHECK_AT_PREP)
1080 bad_reason = "PAGE_FLAGS_CHECK_AT_PREP flag(s) set";
1081 else
1082 bad_reason = "PAGE_FLAGS_CHECK_AT_FREE flag(s) set";
1083 }
1084#ifdef CONFIG_MEMCG
1085 if (unlikely(page->mem_cgroup))
1086 bad_reason = "page still charged to cgroup";
1087#endif
1088 return bad_reason;
1089}
1090
1091static void check_free_page_bad(struct page *page)
1092{
1093 bad_page(page,
1094 page_bad_reason(page, PAGE_FLAGS_CHECK_AT_FREE));
1095}
1096
1097static inline int check_free_page(struct page *page)
1098{
1099 if (likely(page_expected_state(page, PAGE_FLAGS_CHECK_AT_FREE)))
1100 return 0;
1101
1102
1103 check_free_page_bad(page);
1104 return 1;
1105}
1106
1107static int free_tail_pages_check(struct page *head_page, struct page *page)
1108{
1109 int ret = 1;
1110
1111
1112
1113
1114
1115 BUILD_BUG_ON((unsigned long)LIST_POISON1 & 1);
1116
1117 if (!IS_ENABLED(CONFIG_DEBUG_VM)) {
1118 ret = 0;
1119 goto out;
1120 }
1121 switch (page - head_page) {
1122 case 1:
1123
1124 if (unlikely(compound_mapcount(page))) {
1125 bad_page(page, "nonzero compound_mapcount");
1126 goto out;
1127 }
1128 break;
1129 case 2:
1130
1131
1132
1133
1134 break;
1135 default:
1136 if (page->mapping != TAIL_MAPPING) {
1137 bad_page(page, "corrupted mapping in tail page");
1138 goto out;
1139 }
1140 break;
1141 }
1142 if (unlikely(!PageTail(page))) {
1143 bad_page(page, "PageTail not set");
1144 goto out;
1145 }
1146 if (unlikely(compound_head(page) != head_page)) {
1147 bad_page(page, "compound_head not consistent");
1148 goto out;
1149 }
1150 ret = 0;
1151out:
1152 page->mapping = NULL;
1153 clear_compound_head(page);
1154 return ret;
1155}
1156
1157static void kernel_init_free_pages(struct page *page, int numpages)
1158{
1159 int i;
1160
1161
1162 kasan_disable_current();
1163 for (i = 0; i < numpages; i++)
1164 clear_highpage(page + i);
1165 kasan_enable_current();
1166}
1167
1168static __always_inline bool free_pages_prepare(struct page *page,
1169 unsigned int order, bool check_free)
1170{
1171 int bad = 0;
1172
1173 VM_BUG_ON_PAGE(PageTail(page), page);
1174
1175 trace_mm_page_free(page, order);
1176
1177
1178
1179
1180
1181 if (unlikely(order)) {
1182 bool compound = PageCompound(page);
1183 int i;
1184
1185 VM_BUG_ON_PAGE(compound && compound_order(page) != order, page);
1186
1187 if (compound)
1188 ClearPageDoubleMap(page);
1189 for (i = 1; i < (1 << order); i++) {
1190 if (compound)
1191 bad += free_tail_pages_check(page, page + i);
1192 if (unlikely(check_free_page(page + i))) {
1193 bad++;
1194 continue;
1195 }
1196 (page + i)->flags &= ~PAGE_FLAGS_CHECK_AT_PREP;
1197 }
1198 }
1199 if (PageMappingFlags(page))
1200 page->mapping = NULL;
1201 if (memcg_kmem_enabled() && PageKmemcg(page))
1202 __memcg_kmem_uncharge_page(page, order);
1203 if (check_free)
1204 bad += check_free_page(page);
1205 if (bad)
1206 return false;
1207
1208 page_cpupid_reset_last(page);
1209 page->flags &= ~PAGE_FLAGS_CHECK_AT_PREP;
1210 reset_page_owner(page, order);
1211
1212 if (!PageHighMem(page)) {
1213 debug_check_no_locks_freed(page_address(page),
1214 PAGE_SIZE << order);
1215 debug_check_no_obj_freed(page_address(page),
1216 PAGE_SIZE << order);
1217 }
1218 if (want_init_on_free())
1219 kernel_init_free_pages(page, 1 << order);
1220
1221 kernel_poison_pages(page, 1 << order, 0);
1222
1223
1224
1225
1226
1227 arch_free_page(page, order);
1228
1229 if (debug_pagealloc_enabled_static())
1230 kernel_map_pages(page, 1 << order, 0);
1231
1232 kasan_free_nondeferred_pages(page, order);
1233
1234 return true;
1235}
1236
1237#ifdef CONFIG_DEBUG_VM
1238
1239
1240
1241
1242
1243static bool free_pcp_prepare(struct page *page)
1244{
1245 return free_pages_prepare(page, 0, true);
1246}
1247
1248static bool bulkfree_pcp_prepare(struct page *page)
1249{
1250 if (debug_pagealloc_enabled_static())
1251 return check_free_page(page);
1252 else
1253 return false;
1254}
1255#else
1256
1257
1258
1259
1260
1261
1262static bool free_pcp_prepare(struct page *page)
1263{
1264 if (debug_pagealloc_enabled_static())
1265 return free_pages_prepare(page, 0, true);
1266 else
1267 return free_pages_prepare(page, 0, false);
1268}
1269
1270static bool bulkfree_pcp_prepare(struct page *page)
1271{
1272 return check_free_page(page);
1273}
1274#endif
1275
1276static inline void prefetch_buddy(struct page *page)
1277{
1278 unsigned long pfn = page_to_pfn(page);
1279 unsigned long buddy_pfn = __find_buddy_pfn(pfn, 0);
1280 struct page *buddy = page + (buddy_pfn - pfn);
1281
1282 prefetch(buddy);
1283}
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296static void free_pcppages_bulk(struct zone *zone, int count,
1297 struct per_cpu_pages *pcp)
1298{
1299 int migratetype = 0;
1300 int batch_free = 0;
1301 int prefetch_nr = 0;
1302 bool isolated_pageblocks;
1303 struct page *page, *tmp;
1304 LIST_HEAD(head);
1305
1306
1307
1308
1309
1310 count = min(pcp->count, count);
1311 while (count) {
1312 struct list_head *list;
1313
1314
1315
1316
1317
1318
1319
1320
1321 do {
1322 batch_free++;
1323 if (++migratetype == MIGRATE_PCPTYPES)
1324 migratetype = 0;
1325 list = &pcp->lists[migratetype];
1326 } while (list_empty(list));
1327
1328
1329 if (batch_free == MIGRATE_PCPTYPES)
1330 batch_free = count;
1331
1332 do {
1333 page = list_last_entry(list, struct page, lru);
1334
1335 list_del(&page->lru);
1336 pcp->count--;
1337
1338 if (bulkfree_pcp_prepare(page))
1339 continue;
1340
1341 list_add_tail(&page->lru, &head);
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352 if (prefetch_nr++ < pcp->batch)
1353 prefetch_buddy(page);
1354 } while (--count && --batch_free && !list_empty(list));
1355 }
1356
1357 spin_lock(&zone->lock);
1358 isolated_pageblocks = has_isolate_pageblock(zone);
1359
1360
1361
1362
1363
1364 list_for_each_entry_safe(page, tmp, &head, lru) {
1365 int mt = get_pcppage_migratetype(page);
1366
1367 VM_BUG_ON_PAGE(is_migrate_isolate(mt), page);
1368
1369 if (unlikely(isolated_pageblocks))
1370 mt = get_pageblock_migratetype(page);
1371
1372 __free_one_page(page, page_to_pfn(page), zone, 0, mt, true);
1373 trace_mm_page_pcpu_drain(page, 0, mt);
1374 }
1375 spin_unlock(&zone->lock);
1376}
1377
1378static void free_one_page(struct zone *zone,
1379 struct page *page, unsigned long pfn,
1380 unsigned int order,
1381 int migratetype)
1382{
1383 spin_lock(&zone->lock);
1384 if (unlikely(has_isolate_pageblock(zone) ||
1385 is_migrate_isolate(migratetype))) {
1386 migratetype = get_pfnblock_migratetype(page, pfn);
1387 }
1388 __free_one_page(page, pfn, zone, order, migratetype, true);
1389 spin_unlock(&zone->lock);
1390}
1391
1392static void __meminit __init_single_page(struct page *page, unsigned long pfn,
1393 unsigned long zone, int nid)
1394{
1395 mm_zero_struct_page(page);
1396 set_page_links(page, zone, nid, pfn);
1397 init_page_count(page);
1398 page_mapcount_reset(page);
1399 page_cpupid_reset_last(page);
1400 page_kasan_tag_reset(page);
1401
1402 INIT_LIST_HEAD(&page->lru);
1403#ifdef WANT_PAGE_VIRTUAL
1404
1405 if (!is_highmem_idx(zone))
1406 set_page_address(page, __va(pfn << PAGE_SHIFT));
1407#endif
1408}
1409
1410#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
1411static void __meminit init_reserved_page(unsigned long pfn)
1412{
1413 pg_data_t *pgdat;
1414 int nid, zid;
1415
1416 if (!early_page_uninitialised(pfn))
1417 return;
1418
1419 nid = early_pfn_to_nid(pfn);
1420 pgdat = NODE_DATA(nid);
1421
1422 for (zid = 0; zid < MAX_NR_ZONES; zid++) {
1423 struct zone *zone = &pgdat->node_zones[zid];
1424
1425 if (pfn >= zone->zone_start_pfn && pfn < zone_end_pfn(zone))
1426 break;
1427 }
1428 __init_single_page(pfn_to_page(pfn), pfn, zid, nid);
1429}
1430#else
1431static inline void init_reserved_page(unsigned long pfn)
1432{
1433}
1434#endif
1435
1436
1437
1438
1439
1440
1441
1442void __meminit reserve_bootmem_region(phys_addr_t start, phys_addr_t end)
1443{
1444 unsigned long start_pfn = PFN_DOWN(start);
1445 unsigned long end_pfn = PFN_UP(end);
1446
1447 for (; start_pfn < end_pfn; start_pfn++) {
1448 if (pfn_valid(start_pfn)) {
1449 struct page *page = pfn_to_page(start_pfn);
1450
1451 init_reserved_page(start_pfn);
1452
1453
1454 INIT_LIST_HEAD(&page->lru);
1455
1456
1457
1458
1459
1460
1461 __SetPageReserved(page);
1462 }
1463 }
1464}
1465
1466static void __free_pages_ok(struct page *page, unsigned int order)
1467{
1468 unsigned long flags;
1469 int migratetype;
1470 unsigned long pfn = page_to_pfn(page);
1471
1472 if (!free_pages_prepare(page, order, true))
1473 return;
1474
1475 migratetype = get_pfnblock_migratetype(page, pfn);
1476 local_irq_save(flags);
1477 __count_vm_events(PGFREE, 1 << order);
1478 free_one_page(page_zone(page), page, pfn, order, migratetype);
1479 local_irq_restore(flags);
1480}
1481
1482void __free_pages_core(struct page *page, unsigned int order)
1483{
1484 unsigned int nr_pages = 1 << order;
1485 struct page *p = page;
1486 unsigned int loop;
1487
1488 prefetchw(p);
1489 for (loop = 0; loop < (nr_pages - 1); loop++, p++) {
1490 prefetchw(p + 1);
1491 __ClearPageReserved(p);
1492 set_page_count(p, 0);
1493 }
1494 __ClearPageReserved(p);
1495 set_page_count(p, 0);
1496
1497 atomic_long_add(nr_pages, &page_zone(page)->managed_pages);
1498 set_page_refcounted(page);
1499 __free_pages(page, order);
1500}
1501
1502#ifdef CONFIG_NEED_MULTIPLE_NODES
1503
1504static struct mminit_pfnnid_cache early_pfnnid_cache __meminitdata;
1505
1506#ifndef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID
1507
1508
1509
1510
1511int __meminit __early_pfn_to_nid(unsigned long pfn,
1512 struct mminit_pfnnid_cache *state)
1513{
1514 unsigned long start_pfn, end_pfn;
1515 int nid;
1516
1517 if (state->last_start <= pfn && pfn < state->last_end)
1518 return state->last_nid;
1519
1520 nid = memblock_search_pfn_nid(pfn, &start_pfn, &end_pfn);
1521 if (nid != NUMA_NO_NODE) {
1522 state->last_start = start_pfn;
1523 state->last_end = end_pfn;
1524 state->last_nid = nid;
1525 }
1526
1527 return nid;
1528}
1529#endif
1530
1531int __meminit early_pfn_to_nid(unsigned long pfn)
1532{
1533 static DEFINE_SPINLOCK(early_pfn_lock);
1534 int nid;
1535
1536 spin_lock(&early_pfn_lock);
1537 nid = __early_pfn_to_nid(pfn, &early_pfnnid_cache);
1538 if (nid < 0)
1539 nid = first_online_node;
1540 spin_unlock(&early_pfn_lock);
1541
1542 return nid;
1543}
1544#endif
1545
1546void __init memblock_free_pages(struct page *page, unsigned long pfn,
1547 unsigned int order)
1548{
1549 if (early_page_uninitialised(pfn))
1550 return;
1551 __free_pages_core(page, order);
1552}
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571struct page *__pageblock_pfn_to_page(unsigned long start_pfn,
1572 unsigned long end_pfn, struct zone *zone)
1573{
1574 struct page *start_page;
1575 struct page *end_page;
1576
1577
1578 end_pfn--;
1579
1580 if (!pfn_valid(start_pfn) || !pfn_valid(end_pfn))
1581 return NULL;
1582
1583 start_page = pfn_to_online_page(start_pfn);
1584 if (!start_page)
1585 return NULL;
1586
1587 if (page_zone(start_page) != zone)
1588 return NULL;
1589
1590 end_page = pfn_to_page(end_pfn);
1591
1592
1593 if (page_zone_id(start_page) != page_zone_id(end_page))
1594 return NULL;
1595
1596 return start_page;
1597}
1598
1599void set_zone_contiguous(struct zone *zone)
1600{
1601 unsigned long block_start_pfn = zone->zone_start_pfn;
1602 unsigned long block_end_pfn;
1603
1604 block_end_pfn = ALIGN(block_start_pfn + 1, pageblock_nr_pages);
1605 for (; block_start_pfn < zone_end_pfn(zone);
1606 block_start_pfn = block_end_pfn,
1607 block_end_pfn += pageblock_nr_pages) {
1608
1609 block_end_pfn = min(block_end_pfn, zone_end_pfn(zone));
1610
1611 if (!__pageblock_pfn_to_page(block_start_pfn,
1612 block_end_pfn, zone))
1613 return;
1614 cond_resched();
1615 }
1616
1617
1618 zone->contiguous = true;
1619}
1620
1621void clear_zone_contiguous(struct zone *zone)
1622{
1623 zone->contiguous = false;
1624}
1625
1626#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
1627static void __init deferred_free_range(unsigned long pfn,
1628 unsigned long nr_pages)
1629{
1630 struct page *page;
1631 unsigned long i;
1632
1633 if (!nr_pages)
1634 return;
1635
1636 page = pfn_to_page(pfn);
1637
1638
1639 if (nr_pages == pageblock_nr_pages &&
1640 (pfn & (pageblock_nr_pages - 1)) == 0) {
1641 set_pageblock_migratetype(page, MIGRATE_MOVABLE);
1642 __free_pages_core(page, pageblock_order);
1643 return;
1644 }
1645
1646 for (i = 0; i < nr_pages; i++, page++, pfn++) {
1647 if ((pfn & (pageblock_nr_pages - 1)) == 0)
1648 set_pageblock_migratetype(page, MIGRATE_MOVABLE);
1649 __free_pages_core(page, 0);
1650 }
1651}
1652
1653
1654static atomic_t pgdat_init_n_undone __initdata;
1655static __initdata DECLARE_COMPLETION(pgdat_init_all_done_comp);
1656
1657static inline void __init pgdat_init_report_one_done(void)
1658{
1659 if (atomic_dec_and_test(&pgdat_init_n_undone))
1660 complete(&pgdat_init_all_done_comp);
1661}
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673static inline bool __init deferred_pfn_valid(unsigned long pfn)
1674{
1675 if (!pfn_valid_within(pfn))
1676 return false;
1677 if (!(pfn & (pageblock_nr_pages - 1)) && !pfn_valid(pfn))
1678 return false;
1679 return true;
1680}
1681
1682
1683
1684
1685
1686static void __init deferred_free_pages(unsigned long pfn,
1687 unsigned long end_pfn)
1688{
1689 unsigned long nr_pgmask = pageblock_nr_pages - 1;
1690 unsigned long nr_free = 0;
1691
1692 for (; pfn < end_pfn; pfn++) {
1693 if (!deferred_pfn_valid(pfn)) {
1694 deferred_free_range(pfn - nr_free, nr_free);
1695 nr_free = 0;
1696 } else if (!(pfn & nr_pgmask)) {
1697 deferred_free_range(pfn - nr_free, nr_free);
1698 nr_free = 1;
1699 } else {
1700 nr_free++;
1701 }
1702 }
1703
1704 deferred_free_range(pfn - nr_free, nr_free);
1705}
1706
1707
1708
1709
1710
1711
1712static unsigned long __init deferred_init_pages(struct zone *zone,
1713 unsigned long pfn,
1714 unsigned long end_pfn)
1715{
1716 unsigned long nr_pgmask = pageblock_nr_pages - 1;
1717 int nid = zone_to_nid(zone);
1718 unsigned long nr_pages = 0;
1719 int zid = zone_idx(zone);
1720 struct page *page = NULL;
1721
1722 for (; pfn < end_pfn; pfn++) {
1723 if (!deferred_pfn_valid(pfn)) {
1724 page = NULL;
1725 continue;
1726 } else if (!page || !(pfn & nr_pgmask)) {
1727 page = pfn_to_page(pfn);
1728 } else {
1729 page++;
1730 }
1731 __init_single_page(page, pfn, zid, nid);
1732 nr_pages++;
1733 }
1734 return (nr_pages);
1735}
1736
1737
1738
1739
1740
1741
1742
1743static bool __init
1744deferred_init_mem_pfn_range_in_zone(u64 *i, struct zone *zone,
1745 unsigned long *spfn, unsigned long *epfn,
1746 unsigned long first_init_pfn)
1747{
1748 u64 j;
1749
1750
1751
1752
1753
1754
1755 for_each_free_mem_pfn_range_in_zone(j, zone, spfn, epfn) {
1756 if (*epfn <= first_init_pfn)
1757 continue;
1758 if (*spfn < first_init_pfn)
1759 *spfn = first_init_pfn;
1760 *i = j;
1761 return true;
1762 }
1763
1764 return false;
1765}
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777static unsigned long __init
1778deferred_init_maxorder(u64 *i, struct zone *zone, unsigned long *start_pfn,
1779 unsigned long *end_pfn)
1780{
1781 unsigned long mo_pfn = ALIGN(*start_pfn + 1, MAX_ORDER_NR_PAGES);
1782 unsigned long spfn = *start_pfn, epfn = *end_pfn;
1783 unsigned long nr_pages = 0;
1784 u64 j = *i;
1785
1786
1787 for_each_free_mem_pfn_range_in_zone_from(j, zone, start_pfn, end_pfn) {
1788 unsigned long t;
1789
1790 if (mo_pfn <= *start_pfn)
1791 break;
1792
1793 t = min(mo_pfn, *end_pfn);
1794 nr_pages += deferred_init_pages(zone, *start_pfn, t);
1795
1796 if (mo_pfn < *end_pfn) {
1797 *start_pfn = mo_pfn;
1798 break;
1799 }
1800 }
1801
1802
1803 swap(j, *i);
1804
1805 for_each_free_mem_pfn_range_in_zone_from(j, zone, &spfn, &epfn) {
1806 unsigned long t;
1807
1808 if (mo_pfn <= spfn)
1809 break;
1810
1811 t = min(mo_pfn, epfn);
1812 deferred_free_pages(spfn, t);
1813
1814 if (mo_pfn <= epfn)
1815 break;
1816 }
1817
1818 return nr_pages;
1819}
1820
1821static void __init
1822deferred_init_memmap_chunk(unsigned long start_pfn, unsigned long end_pfn,
1823 void *arg)
1824{
1825 unsigned long spfn, epfn;
1826 struct zone *zone = arg;
1827 u64 i;
1828
1829 deferred_init_mem_pfn_range_in_zone(&i, zone, &spfn, &epfn, start_pfn);
1830
1831
1832
1833
1834
1835 while (spfn < end_pfn) {
1836 deferred_init_maxorder(&i, zone, &spfn, &epfn);
1837 cond_resched();
1838 }
1839}
1840
1841
1842__weak int __init
1843deferred_page_init_max_threads(const struct cpumask *node_cpumask)
1844{
1845 return 1;
1846}
1847
1848
1849static int __init deferred_init_memmap(void *data)
1850{
1851 pg_data_t *pgdat = data;
1852 const struct cpumask *cpumask = cpumask_of_node(pgdat->node_id);
1853 unsigned long spfn = 0, epfn = 0;
1854 unsigned long first_init_pfn, flags;
1855 unsigned long start = jiffies;
1856 struct zone *zone;
1857 int zid, max_threads;
1858 u64 i;
1859
1860
1861 if (!cpumask_empty(cpumask))
1862 set_cpus_allowed_ptr(current, cpumask);
1863
1864 pgdat_resize_lock(pgdat, &flags);
1865 first_init_pfn = pgdat->first_deferred_pfn;
1866 if (first_init_pfn == ULONG_MAX) {
1867 pgdat_resize_unlock(pgdat, &flags);
1868 pgdat_init_report_one_done();
1869 return 0;
1870 }
1871
1872
1873 BUG_ON(pgdat->first_deferred_pfn < pgdat->node_start_pfn);
1874 BUG_ON(pgdat->first_deferred_pfn > pgdat_end_pfn(pgdat));
1875 pgdat->first_deferred_pfn = ULONG_MAX;
1876
1877
1878
1879
1880
1881
1882 pgdat_resize_unlock(pgdat, &flags);
1883
1884
1885 for (zid = 0; zid < MAX_NR_ZONES; zid++) {
1886 zone = pgdat->node_zones + zid;
1887 if (first_init_pfn < zone_end_pfn(zone))
1888 break;
1889 }
1890
1891
1892 if (!deferred_init_mem_pfn_range_in_zone(&i, zone, &spfn, &epfn,
1893 first_init_pfn))
1894 goto zone_empty;
1895
1896 max_threads = deferred_page_init_max_threads(cpumask);
1897
1898 while (spfn < epfn) {
1899 unsigned long epfn_align = ALIGN(epfn, PAGES_PER_SECTION);
1900 struct padata_mt_job job = {
1901 .thread_fn = deferred_init_memmap_chunk,
1902 .fn_arg = zone,
1903 .start = spfn,
1904 .size = epfn_align - spfn,
1905 .align = PAGES_PER_SECTION,
1906 .min_chunk = PAGES_PER_SECTION,
1907 .max_threads = max_threads,
1908 };
1909
1910 padata_do_multithreaded(&job);
1911 deferred_init_mem_pfn_range_in_zone(&i, zone, &spfn, &epfn,
1912 epfn_align);
1913 }
1914zone_empty:
1915
1916 WARN_ON(++zid < MAX_NR_ZONES && populated_zone(++zone));
1917
1918 pr_info("node %d deferred pages initialised in %ums\n",
1919 pgdat->node_id, jiffies_to_msecs(jiffies - start));
1920
1921 pgdat_init_report_one_done();
1922 return 0;
1923}
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940static noinline bool __init
1941deferred_grow_zone(struct zone *zone, unsigned int order)
1942{
1943 unsigned long nr_pages_needed = ALIGN(1 << order, PAGES_PER_SECTION);
1944 pg_data_t *pgdat = zone->zone_pgdat;
1945 unsigned long first_deferred_pfn = pgdat->first_deferred_pfn;
1946 unsigned long spfn, epfn, flags;
1947 unsigned long nr_pages = 0;
1948 u64 i;
1949
1950
1951 if (zone_end_pfn(zone) != pgdat_end_pfn(pgdat))
1952 return false;
1953
1954 pgdat_resize_lock(pgdat, &flags);
1955
1956
1957
1958
1959
1960 if (first_deferred_pfn != pgdat->first_deferred_pfn) {
1961 pgdat_resize_unlock(pgdat, &flags);
1962 return true;
1963 }
1964
1965
1966 if (!deferred_init_mem_pfn_range_in_zone(&i, zone, &spfn, &epfn,
1967 first_deferred_pfn)) {
1968 pgdat->first_deferred_pfn = ULONG_MAX;
1969 pgdat_resize_unlock(pgdat, &flags);
1970
1971 return first_deferred_pfn != ULONG_MAX;
1972 }
1973
1974
1975
1976
1977
1978
1979 while (spfn < epfn) {
1980
1981 first_deferred_pfn = spfn;
1982
1983 nr_pages += deferred_init_maxorder(&i, zone, &spfn, &epfn);
1984 touch_nmi_watchdog();
1985
1986
1987 if ((first_deferred_pfn ^ spfn) < PAGES_PER_SECTION)
1988 continue;
1989
1990
1991 if (nr_pages >= nr_pages_needed)
1992 break;
1993 }
1994
1995 pgdat->first_deferred_pfn = spfn;
1996 pgdat_resize_unlock(pgdat, &flags);
1997
1998 return nr_pages > 0;
1999}
2000
2001
2002
2003
2004
2005
2006
2007static bool __ref
2008_deferred_grow_zone(struct zone *zone, unsigned int order)
2009{
2010 return deferred_grow_zone(zone, order);
2011}
2012
2013#endif
2014
2015void __init page_alloc_init_late(void)
2016{
2017 struct zone *zone;
2018 int nid;
2019
2020#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
2021
2022
2023 atomic_set(&pgdat_init_n_undone, num_node_state(N_MEMORY));
2024 for_each_node_state(nid, N_MEMORY) {
2025 kthread_run(deferred_init_memmap, NODE_DATA(nid), "pgdatinit%d", nid);
2026 }
2027
2028
2029 wait_for_completion(&pgdat_init_all_done_comp);
2030
2031
2032
2033
2034
2035
2036 for_each_populated_zone(zone)
2037 zone_pcp_update(zone);
2038
2039
2040
2041
2042
2043 static_branch_disable(&deferred_pages);
2044
2045
2046 files_maxfiles_init();
2047#endif
2048
2049
2050 memblock_discard();
2051
2052 for_each_node_state(nid, N_MEMORY)
2053 shuffle_free_memory(NODE_DATA(nid));
2054
2055 for_each_populated_zone(zone)
2056 set_zone_contiguous(zone);
2057}
2058
2059#ifdef CONFIG_CMA
2060
2061void __init init_cma_reserved_pageblock(struct page *page)
2062{
2063 unsigned i = pageblock_nr_pages;
2064 struct page *p = page;
2065
2066 do {
2067 __ClearPageReserved(p);
2068 set_page_count(p, 0);
2069 } while (++p, --i);
2070
2071 set_pageblock_migratetype(page, MIGRATE_CMA);
2072
2073 if (pageblock_order >= MAX_ORDER) {
2074 i = pageblock_nr_pages;
2075 p = page;
2076 do {
2077 set_page_refcounted(p);
2078 __free_pages(p, MAX_ORDER - 1);
2079 p += MAX_ORDER_NR_PAGES;
2080 } while (i -= MAX_ORDER_NR_PAGES);
2081 } else {
2082 set_page_refcounted(page);
2083 __free_pages(page, pageblock_order);
2084 }
2085
2086 adjust_managed_page_count(page, pageblock_nr_pages);
2087}
2088#endif
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104static inline void expand(struct zone *zone, struct page *page,
2105 int low, int high, int migratetype)
2106{
2107 unsigned long size = 1 << high;
2108
2109 while (high > low) {
2110 high--;
2111 size >>= 1;
2112 VM_BUG_ON_PAGE(bad_range(zone, &page[size]), &page[size]);
2113
2114
2115
2116
2117
2118
2119
2120 if (set_page_guard(zone, &page[size], high, migratetype))
2121 continue;
2122
2123 add_to_free_list(&page[size], zone, high, migratetype);
2124 set_page_order(&page[size], high);
2125 }
2126}
2127
2128static void check_new_page_bad(struct page *page)
2129{
2130 if (unlikely(page->flags & __PG_HWPOISON)) {
2131
2132 page_mapcount_reset(page);
2133 return;
2134 }
2135
2136 bad_page(page,
2137 page_bad_reason(page, PAGE_FLAGS_CHECK_AT_PREP));
2138}
2139
2140
2141
2142
2143static inline int check_new_page(struct page *page)
2144{
2145 if (likely(page_expected_state(page,
2146 PAGE_FLAGS_CHECK_AT_PREP|__PG_HWPOISON)))
2147 return 0;
2148
2149 check_new_page_bad(page);
2150 return 1;
2151}
2152
2153static inline bool free_pages_prezeroed(void)
2154{
2155 return (IS_ENABLED(CONFIG_PAGE_POISONING_ZERO) &&
2156 page_poisoning_enabled()) || want_init_on_free();
2157}
2158
2159#ifdef CONFIG_DEBUG_VM
2160
2161
2162
2163
2164
2165static inline bool check_pcp_refill(struct page *page)
2166{
2167 if (debug_pagealloc_enabled_static())
2168 return check_new_page(page);
2169 else
2170 return false;
2171}
2172
2173static inline bool check_new_pcp(struct page *page)
2174{
2175 return check_new_page(page);
2176}
2177#else
2178
2179
2180
2181
2182
2183static inline bool check_pcp_refill(struct page *page)
2184{
2185 return check_new_page(page);
2186}
2187static inline bool check_new_pcp(struct page *page)
2188{
2189 if (debug_pagealloc_enabled_static())
2190 return check_new_page(page);
2191 else
2192 return false;
2193}
2194#endif
2195
2196static bool check_new_pages(struct page *page, unsigned int order)
2197{
2198 int i;
2199 for (i = 0; i < (1 << order); i++) {
2200 struct page *p = page + i;
2201
2202 if (unlikely(check_new_page(p)))
2203 return true;
2204 }
2205
2206 return false;
2207}
2208
2209inline void post_alloc_hook(struct page *page, unsigned int order,
2210 gfp_t gfp_flags)
2211{
2212 set_page_private(page, 0);
2213 set_page_refcounted(page);
2214
2215 arch_alloc_page(page, order);
2216 if (debug_pagealloc_enabled_static())
2217 kernel_map_pages(page, 1 << order, 1);
2218 kasan_alloc_pages(page, order);
2219 kernel_poison_pages(page, 1 << order, 1);
2220 set_page_owner(page, order, gfp_flags);
2221}
2222
2223static void prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags,
2224 unsigned int alloc_flags)
2225{
2226 post_alloc_hook(page, order, gfp_flags);
2227
2228 if (!free_pages_prezeroed() && want_init_on_alloc(gfp_flags))
2229 kernel_init_free_pages(page, 1 << order);
2230
2231 if (order && (gfp_flags & __GFP_COMP))
2232 prep_compound_page(page, order);
2233
2234
2235
2236
2237
2238
2239
2240 if (alloc_flags & ALLOC_NO_WATERMARKS)
2241 set_page_pfmemalloc(page);
2242 else
2243 clear_page_pfmemalloc(page);
2244}
2245
2246
2247
2248
2249
2250static __always_inline
2251struct page *__rmqueue_smallest(struct zone *zone, unsigned int order,
2252 int migratetype)
2253{
2254 unsigned int current_order;
2255 struct free_area *area;
2256 struct page *page;
2257
2258
2259 for (current_order = order; current_order < MAX_ORDER; ++current_order) {
2260 area = &(zone->free_area[current_order]);
2261 page = get_page_from_free_area(area, migratetype);
2262 if (!page)
2263 continue;
2264 del_page_from_free_list(page, zone, current_order);
2265 expand(zone, page, order, current_order, migratetype);
2266 set_pcppage_migratetype(page, migratetype);
2267 return page;
2268 }
2269
2270 return NULL;
2271}
2272
2273
2274
2275
2276
2277
2278static int fallbacks[MIGRATE_TYPES][3] = {
2279 [MIGRATE_UNMOVABLE] = { MIGRATE_RECLAIMABLE, MIGRATE_MOVABLE, MIGRATE_TYPES },
2280 [MIGRATE_MOVABLE] = { MIGRATE_RECLAIMABLE, MIGRATE_UNMOVABLE, MIGRATE_TYPES },
2281 [MIGRATE_RECLAIMABLE] = { MIGRATE_UNMOVABLE, MIGRATE_MOVABLE, MIGRATE_TYPES },
2282#ifdef CONFIG_CMA
2283 [MIGRATE_CMA] = { MIGRATE_TYPES },
2284#endif
2285#ifdef CONFIG_MEMORY_ISOLATION
2286 [MIGRATE_ISOLATE] = { MIGRATE_TYPES },
2287#endif
2288};
2289
2290#ifdef CONFIG_CMA
2291static __always_inline struct page *__rmqueue_cma_fallback(struct zone *zone,
2292 unsigned int order)
2293{
2294 return __rmqueue_smallest(zone, order, MIGRATE_CMA);
2295}
2296#else
2297static inline struct page *__rmqueue_cma_fallback(struct zone *zone,
2298 unsigned int order) { return NULL; }
2299#endif
2300
2301
2302
2303
2304
2305
2306static int move_freepages(struct zone *zone,
2307 struct page *start_page, struct page *end_page,
2308 int migratetype, int *num_movable)
2309{
2310 struct page *page;
2311 unsigned int order;
2312 int pages_moved = 0;
2313
2314 for (page = start_page; page <= end_page;) {
2315 if (!pfn_valid_within(page_to_pfn(page))) {
2316 page++;
2317 continue;
2318 }
2319
2320 if (!PageBuddy(page)) {
2321
2322
2323
2324
2325
2326 if (num_movable &&
2327 (PageLRU(page) || __PageMovable(page)))
2328 (*num_movable)++;
2329
2330 page++;
2331 continue;
2332 }
2333
2334
2335 VM_BUG_ON_PAGE(page_to_nid(page) != zone_to_nid(zone), page);
2336 VM_BUG_ON_PAGE(page_zone(page) != zone, page);
2337
2338 order = page_order(page);
2339 move_to_free_list(page, zone, order, migratetype);
2340 page += 1 << order;
2341 pages_moved += 1 << order;
2342 }
2343
2344 return pages_moved;
2345}
2346
2347int move_freepages_block(struct zone *zone, struct page *page,
2348 int migratetype, int *num_movable)
2349{
2350 unsigned long start_pfn, end_pfn;
2351 struct page *start_page, *end_page;
2352
2353 if (num_movable)
2354 *num_movable = 0;
2355
2356 start_pfn = page_to_pfn(page);
2357 start_pfn = start_pfn & ~(pageblock_nr_pages-1);
2358 start_page = pfn_to_page(start_pfn);
2359 end_page = start_page + pageblock_nr_pages - 1;
2360 end_pfn = start_pfn + pageblock_nr_pages - 1;
2361
2362
2363 if (!zone_spans_pfn(zone, start_pfn))
2364 start_page = page;
2365 if (!zone_spans_pfn(zone, end_pfn))
2366 return 0;
2367
2368 return move_freepages(zone, start_page, end_page, migratetype,
2369 num_movable);
2370}
2371
2372static void change_pageblock_range(struct page *pageblock_page,
2373 int start_order, int migratetype)
2374{
2375 int nr_pageblocks = 1 << (start_order - pageblock_order);
2376
2377 while (nr_pageblocks--) {
2378 set_pageblock_migratetype(pageblock_page, migratetype);
2379 pageblock_page += pageblock_nr_pages;
2380 }
2381}
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395static bool can_steal_fallback(unsigned int order, int start_mt)
2396{
2397
2398
2399
2400
2401
2402
2403
2404 if (order >= pageblock_order)
2405 return true;
2406
2407 if (order >= pageblock_order / 2 ||
2408 start_mt == MIGRATE_RECLAIMABLE ||
2409 start_mt == MIGRATE_UNMOVABLE ||
2410 page_group_by_mobility_disabled)
2411 return true;
2412
2413 return false;
2414}
2415
2416static inline void boost_watermark(struct zone *zone)
2417{
2418 unsigned long max_boost;
2419
2420 if (!watermark_boost_factor)
2421 return;
2422
2423
2424
2425
2426
2427
2428 if ((pageblock_nr_pages * 4) > zone_managed_pages(zone))
2429 return;
2430
2431 max_boost = mult_frac(zone->_watermark[WMARK_HIGH],
2432 watermark_boost_factor, 10000);
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442 if (!max_boost)
2443 return;
2444
2445 max_boost = max(pageblock_nr_pages, max_boost);
2446
2447 zone->watermark_boost = min(zone->watermark_boost + pageblock_nr_pages,
2448 max_boost);
2449}
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459static void steal_suitable_fallback(struct zone *zone, struct page *page,
2460 unsigned int alloc_flags, int start_type, bool whole_block)
2461{
2462 unsigned int current_order = page_order(page);
2463 int free_pages, movable_pages, alike_pages;
2464 int old_block_type;
2465
2466 old_block_type = get_pageblock_migratetype(page);
2467
2468
2469
2470
2471
2472 if (is_migrate_highatomic(old_block_type))
2473 goto single_page;
2474
2475
2476 if (current_order >= pageblock_order) {
2477 change_pageblock_range(page, current_order, start_type);
2478 goto single_page;
2479 }
2480
2481
2482
2483
2484
2485
2486 boost_watermark(zone);
2487 if (alloc_flags & ALLOC_KSWAPD)
2488 set_bit(ZONE_BOOSTED_WATERMARK, &zone->flags);
2489
2490
2491 if (!whole_block)
2492 goto single_page;
2493
2494 free_pages = move_freepages_block(zone, page, start_type,
2495 &movable_pages);
2496
2497
2498
2499
2500
2501 if (start_type == MIGRATE_MOVABLE) {
2502 alike_pages = movable_pages;
2503 } else {
2504
2505
2506
2507
2508
2509
2510
2511 if (old_block_type == MIGRATE_MOVABLE)
2512 alike_pages = pageblock_nr_pages
2513 - (free_pages + movable_pages);
2514 else
2515 alike_pages = 0;
2516 }
2517
2518
2519 if (!free_pages)
2520 goto single_page;
2521
2522
2523
2524
2525
2526 if (free_pages + alike_pages >= (1 << (pageblock_order-1)) ||
2527 page_group_by_mobility_disabled)
2528 set_pageblock_migratetype(page, start_type);
2529
2530 return;
2531
2532single_page:
2533 move_to_free_list(page, zone, current_order, start_type);
2534}
2535
2536
2537
2538
2539
2540
2541
2542int find_suitable_fallback(struct free_area *area, unsigned int order,
2543 int migratetype, bool only_stealable, bool *can_steal)
2544{
2545 int i;
2546 int fallback_mt;
2547
2548 if (area->nr_free == 0)
2549 return -1;
2550
2551 *can_steal = false;
2552 for (i = 0;; i++) {
2553 fallback_mt = fallbacks[migratetype][i];
2554 if (fallback_mt == MIGRATE_TYPES)
2555 break;
2556
2557 if (free_area_empty(area, fallback_mt))
2558 continue;
2559
2560 if (can_steal_fallback(order, migratetype))
2561 *can_steal = true;
2562
2563 if (!only_stealable)
2564 return fallback_mt;
2565
2566 if (*can_steal)
2567 return fallback_mt;
2568 }
2569
2570 return -1;
2571}
2572
2573
2574
2575
2576
2577static void reserve_highatomic_pageblock(struct page *page, struct zone *zone,
2578 unsigned int alloc_order)
2579{
2580 int mt;
2581 unsigned long max_managed, flags;
2582
2583
2584
2585
2586
2587 max_managed = (zone_managed_pages(zone) / 100) + pageblock_nr_pages;
2588 if (zone->nr_reserved_highatomic >= max_managed)
2589 return;
2590
2591 spin_lock_irqsave(&zone->lock, flags);
2592
2593
2594 if (zone->nr_reserved_highatomic >= max_managed)
2595 goto out_unlock;
2596
2597
2598 mt = get_pageblock_migratetype(page);
2599 if (!is_migrate_highatomic(mt) && !is_migrate_isolate(mt)
2600 && !is_migrate_cma(mt)) {
2601 zone->nr_reserved_highatomic += pageblock_nr_pages;
2602 set_pageblock_migratetype(page, MIGRATE_HIGHATOMIC);
2603 move_freepages_block(zone, page, MIGRATE_HIGHATOMIC, NULL);
2604 }
2605
2606out_unlock:
2607 spin_unlock_irqrestore(&zone->lock, flags);
2608}
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619static bool unreserve_highatomic_pageblock(const struct alloc_context *ac,
2620 bool force)
2621{
2622 struct zonelist *zonelist = ac->zonelist;
2623 unsigned long flags;
2624 struct zoneref *z;
2625 struct zone *zone;
2626 struct page *page;
2627 int order;
2628 bool ret;
2629
2630 for_each_zone_zonelist_nodemask(zone, z, zonelist, ac->highest_zoneidx,
2631 ac->nodemask) {
2632
2633
2634
2635
2636 if (!force && zone->nr_reserved_highatomic <=
2637 pageblock_nr_pages)
2638 continue;
2639
2640 spin_lock_irqsave(&zone->lock, flags);
2641 for (order = 0; order < MAX_ORDER; order++) {
2642 struct free_area *area = &(zone->free_area[order]);
2643
2644 page = get_page_from_free_area(area, MIGRATE_HIGHATOMIC);
2645 if (!page)
2646 continue;
2647
2648
2649
2650
2651
2652
2653
2654
2655 if (is_migrate_highatomic_page(page)) {
2656
2657
2658
2659
2660
2661
2662
2663 zone->nr_reserved_highatomic -= min(
2664 pageblock_nr_pages,
2665 zone->nr_reserved_highatomic);
2666 }
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677 set_pageblock_migratetype(page, ac->migratetype);
2678 ret = move_freepages_block(zone, page, ac->migratetype,
2679 NULL);
2680 if (ret) {
2681 spin_unlock_irqrestore(&zone->lock, flags);
2682 return ret;
2683 }
2684 }
2685 spin_unlock_irqrestore(&zone->lock, flags);
2686 }
2687
2688 return false;
2689}
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701static __always_inline bool
2702__rmqueue_fallback(struct zone *zone, int order, int start_migratetype,
2703 unsigned int alloc_flags)
2704{
2705 struct free_area *area;
2706 int current_order;
2707 int min_order = order;
2708 struct page *page;
2709 int fallback_mt;
2710 bool can_steal;
2711
2712
2713
2714
2715
2716
2717 if (alloc_flags & ALLOC_NOFRAGMENT)
2718 min_order = pageblock_order;
2719
2720
2721
2722
2723
2724
2725 for (current_order = MAX_ORDER - 1; current_order >= min_order;
2726 --current_order) {
2727 area = &(zone->free_area[current_order]);
2728 fallback_mt = find_suitable_fallback(area, current_order,
2729 start_migratetype, false, &can_steal);
2730 if (fallback_mt == -1)
2731 continue;
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741 if (!can_steal && start_migratetype == MIGRATE_MOVABLE
2742 && current_order > order)
2743 goto find_smallest;
2744
2745 goto do_steal;
2746 }
2747
2748 return false;
2749
2750find_smallest:
2751 for (current_order = order; current_order < MAX_ORDER;
2752 current_order++) {
2753 area = &(zone->free_area[current_order]);
2754 fallback_mt = find_suitable_fallback(area, current_order,
2755 start_migratetype, false, &can_steal);
2756 if (fallback_mt != -1)
2757 break;
2758 }
2759
2760
2761
2762
2763
2764 VM_BUG_ON(current_order == MAX_ORDER);
2765
2766do_steal:
2767 page = get_page_from_free_area(area, fallback_mt);
2768
2769 steal_suitable_fallback(zone, page, alloc_flags, start_migratetype,
2770 can_steal);
2771
2772 trace_mm_page_alloc_extfrag(page, order, current_order,
2773 start_migratetype, fallback_mt);
2774
2775 return true;
2776
2777}
2778
2779
2780
2781
2782
2783static __always_inline struct page *
2784__rmqueue(struct zone *zone, unsigned int order, int migratetype,
2785 unsigned int alloc_flags)
2786{
2787 struct page *page;
2788
2789#ifdef CONFIG_CMA
2790
2791
2792
2793
2794
2795 if (alloc_flags & ALLOC_CMA &&
2796 zone_page_state(zone, NR_FREE_CMA_PAGES) >
2797 zone_page_state(zone, NR_FREE_PAGES) / 2) {
2798 page = __rmqueue_cma_fallback(zone, order);
2799 if (page)
2800 return page;
2801 }
2802#endif
2803retry:
2804 page = __rmqueue_smallest(zone, order, migratetype);
2805 if (unlikely(!page)) {
2806 if (alloc_flags & ALLOC_CMA)
2807 page = __rmqueue_cma_fallback(zone, order);
2808
2809 if (!page && __rmqueue_fallback(zone, order, migratetype,
2810 alloc_flags))
2811 goto retry;
2812 }
2813
2814 trace_mm_page_alloc_zone_locked(page, order, migratetype);
2815 return page;
2816}
2817
2818
2819
2820
2821
2822
2823static int rmqueue_bulk(struct zone *zone, unsigned int order,
2824 unsigned long count, struct list_head *list,
2825 int migratetype, unsigned int alloc_flags)
2826{
2827 int i, alloced = 0;
2828
2829 spin_lock(&zone->lock);
2830 for (i = 0; i < count; ++i) {
2831 struct page *page = __rmqueue(zone, order, migratetype,
2832 alloc_flags);
2833 if (unlikely(page == NULL))
2834 break;
2835
2836 if (unlikely(check_pcp_refill(page)))
2837 continue;
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849 list_add_tail(&page->lru, list);
2850 alloced++;
2851 if (is_migrate_cma(get_pcppage_migratetype(page)))
2852 __mod_zone_page_state(zone, NR_FREE_CMA_PAGES,
2853 -(1 << order));
2854 }
2855
2856
2857
2858
2859
2860
2861
2862 __mod_zone_page_state(zone, NR_FREE_PAGES, -(i << order));
2863 spin_unlock(&zone->lock);
2864 return alloced;
2865}
2866
2867#ifdef CONFIG_NUMA
2868
2869
2870
2871
2872
2873
2874
2875
2876void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
2877{
2878 unsigned long flags;
2879 int to_drain, batch;
2880
2881 local_irq_save(flags);
2882 batch = READ_ONCE(pcp->batch);
2883 to_drain = min(pcp->count, batch);
2884 if (to_drain > 0)
2885 free_pcppages_bulk(zone, to_drain, pcp);
2886 local_irq_restore(flags);
2887}
2888#endif
2889
2890
2891
2892
2893
2894
2895
2896
2897static void drain_pages_zone(unsigned int cpu, struct zone *zone)
2898{
2899 unsigned long flags;
2900 struct per_cpu_pageset *pset;
2901 struct per_cpu_pages *pcp;
2902
2903 local_irq_save(flags);
2904 pset = per_cpu_ptr(zone->pageset, cpu);
2905
2906 pcp = &pset->pcp;
2907 if (pcp->count)
2908 free_pcppages_bulk(zone, pcp->count, pcp);
2909 local_irq_restore(flags);
2910}
2911
2912
2913
2914
2915
2916
2917
2918
2919static void drain_pages(unsigned int cpu)
2920{
2921 struct zone *zone;
2922
2923 for_each_populated_zone(zone) {
2924 drain_pages_zone(cpu, zone);
2925 }
2926}
2927
2928
2929
2930
2931
2932
2933
2934void drain_local_pages(struct zone *zone)
2935{
2936 int cpu = smp_processor_id();
2937
2938 if (zone)
2939 drain_pages_zone(cpu, zone);
2940 else
2941 drain_pages(cpu);
2942}
2943
2944static void drain_local_pages_wq(struct work_struct *work)
2945{
2946 struct pcpu_drain *drain;
2947
2948 drain = container_of(work, struct pcpu_drain, work);
2949
2950
2951
2952
2953
2954
2955
2956
2957 preempt_disable();
2958 drain_local_pages(drain->zone);
2959 preempt_enable();
2960}
2961
2962
2963
2964
2965
2966
2967
2968
2969void drain_all_pages(struct zone *zone)
2970{
2971 int cpu;
2972
2973
2974
2975
2976
2977 static cpumask_t cpus_with_pcps;
2978
2979
2980
2981
2982
2983 if (WARN_ON_ONCE(!mm_percpu_wq))
2984 return;
2985
2986
2987
2988
2989
2990
2991 if (unlikely(!mutex_trylock(&pcpu_drain_mutex))) {
2992 if (!zone)
2993 return;
2994 mutex_lock(&pcpu_drain_mutex);
2995 }
2996
2997
2998
2999
3000
3001
3002
3003 for_each_online_cpu(cpu) {
3004 struct per_cpu_pageset *pcp;
3005 struct zone *z;
3006 bool has_pcps = false;
3007
3008 if (zone) {
3009 pcp = per_cpu_ptr(zone->pageset, cpu);
3010 if (pcp->pcp.count)
3011 has_pcps = true;
3012 } else {
3013 for_each_populated_zone(z) {
3014 pcp = per_cpu_ptr(z->pageset, cpu);
3015 if (pcp->pcp.count) {
3016 has_pcps = true;
3017 break;
3018 }
3019 }
3020 }
3021
3022 if (has_pcps)
3023 cpumask_set_cpu(cpu, &cpus_with_pcps);
3024 else
3025 cpumask_clear_cpu(cpu, &cpus_with_pcps);
3026 }
3027
3028 for_each_cpu(cpu, &cpus_with_pcps) {
3029 struct pcpu_drain *drain = per_cpu_ptr(&pcpu_drain, cpu);
3030
3031 drain->zone = zone;
3032 INIT_WORK(&drain->work, drain_local_pages_wq);
3033 queue_work_on(cpu, mm_percpu_wq, &drain->work);
3034 }
3035 for_each_cpu(cpu, &cpus_with_pcps)
3036 flush_work(&per_cpu_ptr(&pcpu_drain, cpu)->work);
3037
3038 mutex_unlock(&pcpu_drain_mutex);
3039}
3040
3041#ifdef CONFIG_HIBERNATION
3042
3043
3044
3045
3046#define WD_PAGE_COUNT (128*1024)
3047
3048void mark_free_pages(struct zone *zone)
3049{
3050 unsigned long pfn, max_zone_pfn, page_count = WD_PAGE_COUNT;
3051 unsigned long flags;
3052 unsigned int order, t;
3053 struct page *page;
3054
3055 if (zone_is_empty(zone))
3056 return;
3057
3058 spin_lock_irqsave(&zone->lock, flags);
3059
3060 max_zone_pfn = zone_end_pfn(zone);
3061 for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++)
3062 if (pfn_valid(pfn)) {
3063 page = pfn_to_page(pfn);
3064
3065 if (!--page_count) {
3066 touch_nmi_watchdog();
3067 page_count = WD_PAGE_COUNT;
3068 }
3069
3070 if (page_zone(page) != zone)
3071 continue;
3072
3073 if (!swsusp_page_is_forbidden(page))
3074 swsusp_unset_page_free(page);
3075 }
3076
3077 for_each_migratetype_order(order, t) {
3078 list_for_each_entry(page,
3079 &zone->free_area[order].free_list[t], lru) {
3080 unsigned long i;
3081
3082 pfn = page_to_pfn(page);
3083 for (i = 0; i < (1UL << order); i++) {
3084 if (!--page_count) {
3085 touch_nmi_watchdog();
3086 page_count = WD_PAGE_COUNT;
3087 }
3088 swsusp_set_page_free(pfn_to_page(pfn + i));
3089 }
3090 }
3091 }
3092 spin_unlock_irqrestore(&zone->lock, flags);
3093}
3094#endif
3095
3096static bool free_unref_page_prepare(struct page *page, unsigned long pfn)
3097{
3098 int migratetype;
3099
3100 if (!free_pcp_prepare(page))
3101 return false;
3102
3103 migratetype = get_pfnblock_migratetype(page, pfn);
3104 set_pcppage_migratetype(page, migratetype);
3105 return true;
3106}
3107
3108static void free_unref_page_commit(struct page *page, unsigned long pfn)
3109{
3110 struct zone *zone = page_zone(page);
3111 struct per_cpu_pages *pcp;
3112 int migratetype;
3113
3114 migratetype = get_pcppage_migratetype(page);
3115 __count_vm_event(PGFREE);
3116
3117
3118
3119
3120
3121
3122
3123
3124 if (migratetype >= MIGRATE_PCPTYPES) {
3125 if (unlikely(is_migrate_isolate(migratetype))) {
3126 free_one_page(zone, page, pfn, 0, migratetype);
3127 return;
3128 }
3129 migratetype = MIGRATE_MOVABLE;
3130 }
3131
3132 pcp = &this_cpu_ptr(zone->pageset)->pcp;
3133 list_add(&page->lru, &pcp->lists[migratetype]);
3134 pcp->count++;
3135 if (pcp->count >= pcp->high) {
3136 unsigned long batch = READ_ONCE(pcp->batch);
3137 free_pcppages_bulk(zone, batch, pcp);
3138 }
3139}
3140
3141
3142
3143
3144void free_unref_page(struct page *page)
3145{
3146 unsigned long flags;
3147 unsigned long pfn = page_to_pfn(page);
3148
3149 if (!free_unref_page_prepare(page, pfn))
3150 return;
3151
3152 local_irq_save(flags);
3153 free_unref_page_commit(page, pfn);
3154 local_irq_restore(flags);
3155}
3156
3157
3158
3159
3160void free_unref_page_list(struct list_head *list)
3161{
3162 struct page *page, *next;
3163 unsigned long flags, pfn;
3164 int batch_count = 0;
3165
3166
3167 list_for_each_entry_safe(page, next, list, lru) {
3168 pfn = page_to_pfn(page);
3169 if (!free_unref_page_prepare(page, pfn))
3170 list_del(&page->lru);
3171 set_page_private(page, pfn);
3172 }
3173
3174 local_irq_save(flags);
3175 list_for_each_entry_safe(page, next, list, lru) {
3176 unsigned long pfn = page_private(page);
3177
3178 set_page_private(page, 0);
3179 trace_mm_page_free_batched(page);
3180 free_unref_page_commit(page, pfn);
3181
3182
3183
3184
3185
3186 if (++batch_count == SWAP_CLUSTER_MAX) {
3187 local_irq_restore(flags);
3188 batch_count = 0;
3189 local_irq_save(flags);
3190 }
3191 }
3192 local_irq_restore(flags);
3193}
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203void split_page(struct page *page, unsigned int order)
3204{
3205 int i;
3206
3207 VM_BUG_ON_PAGE(PageCompound(page), page);
3208 VM_BUG_ON_PAGE(!page_count(page), page);
3209
3210 for (i = 1; i < (1 << order); i++)
3211 set_page_refcounted(page + i);
3212 split_page_owner(page, order);
3213}
3214EXPORT_SYMBOL_GPL(split_page);
3215
3216int __isolate_free_page(struct page *page, unsigned int order)
3217{
3218 unsigned long watermark;
3219 struct zone *zone;
3220 int mt;
3221
3222 BUG_ON(!PageBuddy(page));
3223
3224 zone = page_zone(page);
3225 mt = get_pageblock_migratetype(page);
3226
3227 if (!is_migrate_isolate(mt)) {
3228
3229
3230
3231
3232
3233
3234 watermark = zone->_watermark[WMARK_MIN] + (1UL << order);
3235 if (!zone_watermark_ok(zone, 0, watermark, 0, ALLOC_CMA))
3236 return 0;
3237
3238 __mod_zone_freepage_state(zone, -(1UL << order), mt);
3239 }
3240
3241
3242
3243 del_page_from_free_list(page, zone, order);
3244
3245
3246
3247
3248
3249 if (order >= pageblock_order - 1) {
3250 struct page *endpage = page + (1 << order) - 1;
3251 for (; page < endpage; page += pageblock_nr_pages) {
3252 int mt = get_pageblock_migratetype(page);
3253 if (!is_migrate_isolate(mt) && !is_migrate_cma(mt)
3254 && !is_migrate_highatomic(mt))
3255 set_pageblock_migratetype(page,
3256 MIGRATE_MOVABLE);
3257 }
3258 }
3259
3260
3261 return 1UL << order;
3262}
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273void __putback_isolated_page(struct page *page, unsigned int order, int mt)
3274{
3275 struct zone *zone = page_zone(page);
3276
3277
3278 lockdep_assert_held(&zone->lock);
3279
3280
3281 __free_one_page(page, page_to_pfn(page), zone, order, mt, false);
3282}
3283
3284
3285
3286
3287
3288
3289static inline void zone_statistics(struct zone *preferred_zone, struct zone *z)
3290{
3291#ifdef CONFIG_NUMA
3292 enum numa_stat_item local_stat = NUMA_LOCAL;
3293
3294
3295 if (!static_branch_likely(&vm_numa_stat_key))
3296 return;
3297
3298 if (zone_to_nid(z) != numa_node_id())
3299 local_stat = NUMA_OTHER;
3300
3301 if (zone_to_nid(z) == zone_to_nid(preferred_zone))
3302 __inc_numa_state(z, NUMA_HIT);
3303 else {
3304 __inc_numa_state(z, NUMA_MISS);
3305 __inc_numa_state(preferred_zone, NUMA_FOREIGN);
3306 }
3307 __inc_numa_state(z, local_stat);
3308#endif
3309}
3310
3311
3312static struct page *__rmqueue_pcplist(struct zone *zone, int migratetype,
3313 unsigned int alloc_flags,
3314 struct per_cpu_pages *pcp,
3315 struct list_head *list)
3316{
3317 struct page *page;
3318
3319 do {
3320 if (list_empty(list)) {
3321 pcp->count += rmqueue_bulk(zone, 0,
3322 pcp->batch, list,
3323 migratetype, alloc_flags);
3324 if (unlikely(list_empty(list)))
3325 return NULL;
3326 }
3327
3328 page = list_first_entry(list, struct page, lru);
3329 list_del(&page->lru);
3330 pcp->count--;
3331 } while (check_new_pcp(page));
3332
3333 return page;
3334}
3335
3336
3337static struct page *rmqueue_pcplist(struct zone *preferred_zone,
3338 struct zone *zone, gfp_t gfp_flags,
3339 int migratetype, unsigned int alloc_flags)
3340{
3341 struct per_cpu_pages *pcp;
3342 struct list_head *list;
3343 struct page *page;
3344 unsigned long flags;
3345
3346 local_irq_save(flags);
3347 pcp = &this_cpu_ptr(zone->pageset)->pcp;
3348 list = &pcp->lists[migratetype];
3349 page = __rmqueue_pcplist(zone, migratetype, alloc_flags, pcp, list);
3350 if (page) {
3351 __count_zid_vm_events(PGALLOC, page_zonenum(page), 1);
3352 zone_statistics(preferred_zone, zone);
3353 }
3354 local_irq_restore(flags);
3355 return page;
3356}
3357
3358
3359
3360
3361static inline
3362struct page *rmqueue(struct zone *preferred_zone,
3363 struct zone *zone, unsigned int order,
3364 gfp_t gfp_flags, unsigned int alloc_flags,
3365 int migratetype)
3366{
3367 unsigned long flags;
3368 struct page *page;
3369
3370 if (likely(order == 0)) {
3371
3372
3373
3374
3375 if (!IS_ENABLED(CONFIG_CMA) || alloc_flags & ALLOC_CMA ||
3376 migratetype != MIGRATE_MOVABLE) {
3377 page = rmqueue_pcplist(preferred_zone, zone, gfp_flags,
3378 migratetype, alloc_flags);
3379 goto out;
3380 }
3381 }
3382
3383
3384
3385
3386
3387 WARN_ON_ONCE((gfp_flags & __GFP_NOFAIL) && (order > 1));
3388 spin_lock_irqsave(&zone->lock, flags);
3389
3390 do {
3391 page = NULL;
3392
3393
3394
3395
3396
3397
3398 if (order > 0 && alloc_flags & ALLOC_HARDER) {
3399 page = __rmqueue_smallest(zone, order, MIGRATE_HIGHATOMIC);
3400 if (page)
3401 trace_mm_page_alloc_zone_locked(page, order, migratetype);
3402 }
3403 if (!page)
3404 page = __rmqueue(zone, order, migratetype, alloc_flags);
3405 } while (page && check_new_pages(page, order));
3406 spin_unlock(&zone->lock);
3407 if (!page)
3408 goto failed;
3409 __mod_zone_freepage_state(zone, -(1 << order),
3410 get_pcppage_migratetype(page));
3411
3412 __count_zid_vm_events(PGALLOC, page_zonenum(page), 1 << order);
3413 zone_statistics(preferred_zone, zone);
3414 local_irq_restore(flags);
3415
3416out:
3417
3418 if (test_bit(ZONE_BOOSTED_WATERMARK, &zone->flags)) {
3419 clear_bit(ZONE_BOOSTED_WATERMARK, &zone->flags);
3420 wakeup_kswapd(zone, 0, 0, zone_idx(zone));
3421 }
3422
3423 VM_BUG_ON_PAGE(page && bad_range(zone, page), page);
3424 return page;
3425
3426failed:
3427 local_irq_restore(flags);
3428 return NULL;
3429}
3430
3431#ifdef CONFIG_FAIL_PAGE_ALLOC
3432
3433static struct {
3434 struct fault_attr attr;
3435
3436 bool ignore_gfp_highmem;
3437 bool ignore_gfp_reclaim;
3438 u32 min_order;
3439} fail_page_alloc = {
3440 .attr = FAULT_ATTR_INITIALIZER,
3441 .ignore_gfp_reclaim = true,
3442 .ignore_gfp_highmem = true,
3443 .min_order = 1,
3444};
3445
3446static int __init setup_fail_page_alloc(char *str)
3447{
3448 return setup_fault_attr(&fail_page_alloc.attr, str);
3449}
3450__setup("fail_page_alloc=", setup_fail_page_alloc);
3451
3452static bool __should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
3453{
3454 if (order < fail_page_alloc.min_order)
3455 return false;
3456 if (gfp_mask & __GFP_NOFAIL)
3457 return false;
3458 if (fail_page_alloc.ignore_gfp_highmem && (gfp_mask & __GFP_HIGHMEM))
3459 return false;
3460 if (fail_page_alloc.ignore_gfp_reclaim &&
3461 (gfp_mask & __GFP_DIRECT_RECLAIM))
3462 return false;
3463
3464 return should_fail(&fail_page_alloc.attr, 1 << order);
3465}
3466
3467#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
3468
3469static int __init fail_page_alloc_debugfs(void)
3470{
3471 umode_t mode = S_IFREG | 0600;
3472 struct dentry *dir;
3473
3474 dir = fault_create_debugfs_attr("fail_page_alloc", NULL,
3475 &fail_page_alloc.attr);
3476
3477 debugfs_create_bool("ignore-gfp-wait", mode, dir,
3478 &fail_page_alloc.ignore_gfp_reclaim);
3479 debugfs_create_bool("ignore-gfp-highmem", mode, dir,
3480 &fail_page_alloc.ignore_gfp_highmem);
3481 debugfs_create_u32("min-order", mode, dir, &fail_page_alloc.min_order);
3482
3483 return 0;
3484}
3485
3486late_initcall(fail_page_alloc_debugfs);
3487
3488#endif
3489
3490#else
3491
3492static inline bool __should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
3493{
3494 return false;
3495}
3496
3497#endif
3498
3499static noinline bool should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
3500{
3501 return __should_fail_alloc_page(gfp_mask, order);
3502}
3503ALLOW_ERROR_INJECTION(should_fail_alloc_page, TRUE);
3504
3505static inline long __zone_watermark_unusable_free(struct zone *z,
3506 unsigned int order, unsigned int alloc_flags)
3507{
3508 const bool alloc_harder = (alloc_flags & (ALLOC_HARDER|ALLOC_OOM));
3509 long unusable_free = (1 << order) - 1;
3510
3511
3512
3513
3514
3515
3516 if (likely(!alloc_harder))
3517 unusable_free += z->nr_reserved_highatomic;
3518
3519#ifdef CONFIG_CMA
3520
3521 if (!(alloc_flags & ALLOC_CMA))
3522 unusable_free += zone_page_state(z, NR_FREE_CMA_PAGES);
3523#endif
3524
3525 return unusable_free;
3526}
3527
3528
3529
3530
3531
3532
3533
3534bool __zone_watermark_ok(struct zone *z, unsigned int order, unsigned long mark,
3535 int highest_zoneidx, unsigned int alloc_flags,
3536 long free_pages)
3537{
3538 long min = mark;
3539 int o;
3540 const bool alloc_harder = (alloc_flags & (ALLOC_HARDER|ALLOC_OOM));
3541
3542
3543 free_pages -= __zone_watermark_unusable_free(z, order, alloc_flags);
3544
3545 if (alloc_flags & ALLOC_HIGH)
3546 min -= min / 2;
3547
3548 if (unlikely(alloc_harder)) {
3549
3550
3551
3552
3553
3554
3555 if (alloc_flags & ALLOC_OOM)
3556 min -= min / 2;
3557 else
3558 min -= min / 4;
3559 }
3560
3561
3562
3563
3564
3565
3566 if (free_pages <= min + z->lowmem_reserve[highest_zoneidx])
3567 return false;
3568
3569
3570 if (!order)
3571 return true;
3572
3573
3574 for (o = order; o < MAX_ORDER; o++) {
3575 struct free_area *area = &z->free_area[o];
3576 int mt;
3577
3578 if (!area->nr_free)
3579 continue;
3580
3581 for (mt = 0; mt < MIGRATE_PCPTYPES; mt++) {
3582 if (!free_area_empty(area, mt))
3583 return true;
3584 }
3585
3586#ifdef CONFIG_CMA
3587 if ((alloc_flags & ALLOC_CMA) &&
3588 !free_area_empty(area, MIGRATE_CMA)) {
3589 return true;
3590 }
3591#endif
3592 if (alloc_harder && !free_area_empty(area, MIGRATE_HIGHATOMIC))
3593 return true;
3594 }
3595 return false;
3596}
3597
3598bool zone_watermark_ok(struct zone *z, unsigned int order, unsigned long mark,
3599 int highest_zoneidx, unsigned int alloc_flags)
3600{
3601 return __zone_watermark_ok(z, order, mark, highest_zoneidx, alloc_flags,
3602 zone_page_state(z, NR_FREE_PAGES));
3603}
3604
3605static inline bool zone_watermark_fast(struct zone *z, unsigned int order,
3606 unsigned long mark, int highest_zoneidx,
3607 unsigned int alloc_flags, gfp_t gfp_mask)
3608{
3609 long free_pages;
3610
3611 free_pages = zone_page_state(z, NR_FREE_PAGES);
3612
3613
3614
3615
3616
3617 if (!order) {
3618 long fast_free;
3619
3620 fast_free = free_pages;
3621 fast_free -= __zone_watermark_unusable_free(z, 0, alloc_flags);
3622 if (fast_free > mark + z->lowmem_reserve[highest_zoneidx])
3623 return true;
3624 }
3625
3626 if (__zone_watermark_ok(z, order, mark, highest_zoneidx, alloc_flags,
3627 free_pages))
3628 return true;
3629
3630
3631
3632
3633
3634
3635 if (unlikely(!order && (gfp_mask & __GFP_ATOMIC) && z->watermark_boost
3636 && ((alloc_flags & ALLOC_WMARK_MASK) == WMARK_MIN))) {
3637 mark = z->_watermark[WMARK_MIN];
3638 return __zone_watermark_ok(z, order, mark, highest_zoneidx,
3639 alloc_flags, free_pages);
3640 }
3641
3642 return false;
3643}
3644
3645bool zone_watermark_ok_safe(struct zone *z, unsigned int order,
3646 unsigned long mark, int highest_zoneidx)
3647{
3648 long free_pages = zone_page_state(z, NR_FREE_PAGES);
3649
3650 if (z->percpu_drift_mark && free_pages < z->percpu_drift_mark)
3651 free_pages = zone_page_state_snapshot(z, NR_FREE_PAGES);
3652
3653 return __zone_watermark_ok(z, order, mark, highest_zoneidx, 0,
3654 free_pages);
3655}
3656
3657#ifdef CONFIG_NUMA
3658static bool zone_allows_reclaim(struct zone *local_zone, struct zone *zone)
3659{
3660 return node_distance(zone_to_nid(local_zone), zone_to_nid(zone)) <=
3661 node_reclaim_distance;
3662}
3663#else
3664static bool zone_allows_reclaim(struct zone *local_zone, struct zone *zone)
3665{
3666 return true;
3667}
3668#endif
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678static inline unsigned int
3679alloc_flags_nofragment(struct zone *zone, gfp_t gfp_mask)
3680{
3681 unsigned int alloc_flags;
3682
3683
3684
3685
3686
3687 alloc_flags = (__force int) (gfp_mask & __GFP_KSWAPD_RECLAIM);
3688
3689#ifdef CONFIG_ZONE_DMA32
3690 if (!zone)
3691 return alloc_flags;
3692
3693 if (zone_idx(zone) != ZONE_NORMAL)
3694 return alloc_flags;
3695
3696
3697
3698
3699
3700
3701 BUILD_BUG_ON(ZONE_NORMAL - ZONE_DMA32 != 1);
3702 if (nr_online_nodes > 1 && !populated_zone(--zone))
3703 return alloc_flags;
3704
3705 alloc_flags |= ALLOC_NOFRAGMENT;
3706#endif
3707 return alloc_flags;
3708}
3709
3710static inline unsigned int current_alloc_flags(gfp_t gfp_mask,
3711 unsigned int alloc_flags)
3712{
3713#ifdef CONFIG_CMA
3714 unsigned int pflags = current->flags;
3715
3716 if (!(pflags & PF_MEMALLOC_NOCMA) &&
3717 gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE)
3718 alloc_flags |= ALLOC_CMA;
3719
3720#endif
3721 return alloc_flags;
3722}
3723
3724
3725
3726
3727
3728static struct page *
3729get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags,
3730 const struct alloc_context *ac)
3731{
3732 struct zoneref *z;
3733 struct zone *zone;
3734 struct pglist_data *last_pgdat_dirty_limit = NULL;
3735 bool no_fallback;
3736
3737retry:
3738
3739
3740
3741
3742 no_fallback = alloc_flags & ALLOC_NOFRAGMENT;
3743 z = ac->preferred_zoneref;
3744 for_next_zone_zonelist_nodemask(zone, z, ac->zonelist,
3745 ac->highest_zoneidx, ac->nodemask) {
3746 struct page *page;
3747 unsigned long mark;
3748
3749 if (cpusets_enabled() &&
3750 (alloc_flags & ALLOC_CPUSET) &&
3751 !__cpuset_zone_allowed(zone, gfp_mask))
3752 continue;
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772 if (ac->spread_dirty_pages) {
3773 if (last_pgdat_dirty_limit == zone->zone_pgdat)
3774 continue;
3775
3776 if (!node_dirty_ok(zone->zone_pgdat)) {
3777 last_pgdat_dirty_limit = zone->zone_pgdat;
3778 continue;
3779 }
3780 }
3781
3782 if (no_fallback && nr_online_nodes > 1 &&
3783 zone != ac->preferred_zoneref->zone) {
3784 int local_nid;
3785
3786
3787
3788
3789
3790
3791 local_nid = zone_to_nid(ac->preferred_zoneref->zone);
3792 if (zone_to_nid(zone) != local_nid) {
3793 alloc_flags &= ~ALLOC_NOFRAGMENT;
3794 goto retry;
3795 }
3796 }
3797
3798 mark = wmark_pages(zone, alloc_flags & ALLOC_WMARK_MASK);
3799 if (!zone_watermark_fast(zone, order, mark,
3800 ac->highest_zoneidx, alloc_flags,
3801 gfp_mask)) {
3802 int ret;
3803
3804#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
3805
3806
3807
3808
3809 if (static_branch_unlikely(&deferred_pages)) {
3810 if (_deferred_grow_zone(zone, order))
3811 goto try_this_zone;
3812 }
3813#endif
3814
3815 BUILD_BUG_ON(ALLOC_NO_WATERMARKS < NR_WMARK);
3816 if (alloc_flags & ALLOC_NO_WATERMARKS)
3817 goto try_this_zone;
3818
3819 if (node_reclaim_mode == 0 ||
3820 !zone_allows_reclaim(ac->preferred_zoneref->zone, zone))
3821 continue;
3822
3823 ret = node_reclaim(zone->zone_pgdat, gfp_mask, order);
3824 switch (ret) {
3825 case NODE_RECLAIM_NOSCAN:
3826
3827 continue;
3828 case NODE_RECLAIM_FULL:
3829
3830 continue;
3831 default:
3832
3833 if (zone_watermark_ok(zone, order, mark,
3834 ac->highest_zoneidx, alloc_flags))
3835 goto try_this_zone;
3836
3837 continue;
3838 }
3839 }
3840
3841try_this_zone:
3842 page = rmqueue(ac->preferred_zoneref->zone, zone, order,
3843 gfp_mask, alloc_flags, ac->migratetype);
3844 if (page) {
3845 prep_new_page(page, order, gfp_mask, alloc_flags);
3846
3847
3848
3849
3850
3851 if (unlikely(order && (alloc_flags & ALLOC_HARDER)))
3852 reserve_highatomic_pageblock(page, zone, order);
3853
3854 return page;
3855 } else {
3856#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
3857
3858 if (static_branch_unlikely(&deferred_pages)) {
3859 if (_deferred_grow_zone(zone, order))
3860 goto try_this_zone;
3861 }
3862#endif
3863 }
3864 }
3865
3866
3867
3868
3869
3870 if (no_fallback) {
3871 alloc_flags &= ~ALLOC_NOFRAGMENT;
3872 goto retry;
3873 }
3874
3875 return NULL;
3876}
3877
3878static void warn_alloc_show_mem(gfp_t gfp_mask, nodemask_t *nodemask)
3879{
3880 unsigned int filter = SHOW_MEM_FILTER_NODES;
3881
3882
3883
3884
3885
3886
3887 if (!(gfp_mask & __GFP_NOMEMALLOC))
3888 if (tsk_is_oom_victim(current) ||
3889 (current->flags & (PF_MEMALLOC | PF_EXITING)))
3890 filter &= ~SHOW_MEM_FILTER_NODES;
3891 if (in_interrupt() || !(gfp_mask & __GFP_DIRECT_RECLAIM))
3892 filter &= ~SHOW_MEM_FILTER_NODES;
3893
3894 show_mem(filter, nodemask);
3895}
3896
3897void warn_alloc(gfp_t gfp_mask, nodemask_t *nodemask, const char *fmt, ...)
3898{
3899 struct va_format vaf;
3900 va_list args;
3901 static DEFINE_RATELIMIT_STATE(nopage_rs, 10*HZ, 1);
3902
3903 if ((gfp_mask & __GFP_NOWARN) || !__ratelimit(&nopage_rs))
3904 return;
3905
3906 va_start(args, fmt);
3907 vaf.fmt = fmt;
3908 vaf.va = &args;
3909 pr_warn("%s: %pV, mode:%#x(%pGg), nodemask=%*pbl",
3910 current->comm, &vaf, gfp_mask, &gfp_mask,
3911 nodemask_pr_args(nodemask));
3912 va_end(args);
3913
3914 cpuset_print_current_mems_allowed();
3915 pr_cont("\n");
3916 dump_stack();
3917 warn_alloc_show_mem(gfp_mask, nodemask);
3918}
3919
3920static inline struct page *
3921__alloc_pages_cpuset_fallback(gfp_t gfp_mask, unsigned int order,
3922 unsigned int alloc_flags,
3923 const struct alloc_context *ac)
3924{
3925 struct page *page;
3926
3927 page = get_page_from_freelist(gfp_mask, order,
3928 alloc_flags|ALLOC_CPUSET, ac);
3929
3930
3931
3932
3933 if (!page)
3934 page = get_page_from_freelist(gfp_mask, order,
3935 alloc_flags, ac);
3936
3937 return page;
3938}
3939
3940static inline struct page *
3941__alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,
3942 const struct alloc_context *ac, unsigned long *did_some_progress)
3943{
3944 struct oom_control oc = {
3945 .zonelist = ac->zonelist,
3946 .nodemask = ac->nodemask,
3947 .memcg = NULL,
3948 .gfp_mask = gfp_mask,
3949 .order = order,
3950 };
3951 struct page *page;
3952
3953 *did_some_progress = 0;
3954
3955
3956
3957
3958
3959 if (!mutex_trylock(&oom_lock)) {
3960 *did_some_progress = 1;
3961 schedule_timeout_uninterruptible(1);
3962 return NULL;
3963 }
3964
3965
3966
3967
3968
3969
3970
3971
3972 page = get_page_from_freelist((gfp_mask | __GFP_HARDWALL) &
3973 ~__GFP_DIRECT_RECLAIM, order,
3974 ALLOC_WMARK_HIGH|ALLOC_CPUSET, ac);
3975 if (page)
3976 goto out;
3977
3978
3979 if (current->flags & PF_DUMPCORE)
3980 goto out;
3981
3982 if (order > PAGE_ALLOC_COSTLY_ORDER)
3983 goto out;
3984
3985
3986
3987
3988
3989
3990 if (gfp_mask & __GFP_RETRY_MAYFAIL)
3991 goto out;
3992
3993 if (ac->highest_zoneidx < ZONE_NORMAL)
3994 goto out;
3995 if (pm_suspended_storage())
3996 goto out;
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008 if (gfp_mask & __GFP_THISNODE)
4009 goto out;
4010
4011
4012 if (out_of_memory(&oc) || WARN_ON_ONCE(gfp_mask & __GFP_NOFAIL)) {
4013 *did_some_progress = 1;
4014
4015
4016
4017
4018
4019 if (gfp_mask & __GFP_NOFAIL)
4020 page = __alloc_pages_cpuset_fallback(gfp_mask, order,
4021 ALLOC_NO_WATERMARKS, ac);
4022 }
4023out:
4024 mutex_unlock(&oom_lock);
4025 return page;
4026}
4027
4028
4029
4030
4031
4032#define MAX_COMPACT_RETRIES 16
4033
4034#ifdef CONFIG_COMPACTION
4035
4036static struct page *
4037__alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order,
4038 unsigned int alloc_flags, const struct alloc_context *ac,
4039 enum compact_priority prio, enum compact_result *compact_result)
4040{
4041 struct page *page = NULL;
4042 unsigned long pflags;
4043 unsigned int noreclaim_flag;
4044
4045 if (!order)
4046 return NULL;
4047
4048 psi_memstall_enter(&pflags);
4049 noreclaim_flag = memalloc_noreclaim_save();
4050
4051 *compact_result = try_to_compact_pages(gfp_mask, order, alloc_flags, ac,
4052 prio, &page);
4053
4054 memalloc_noreclaim_restore(noreclaim_flag);
4055 psi_memstall_leave(&pflags);
4056
4057
4058
4059
4060
4061 count_vm_event(COMPACTSTALL);
4062
4063
4064 if (page)
4065 prep_new_page(page, order, gfp_mask, alloc_flags);
4066
4067
4068 if (!page)
4069 page = get_page_from_freelist(gfp_mask, order, alloc_flags, ac);
4070
4071 if (page) {
4072 struct zone *zone = page_zone(page);
4073
4074 zone->compact_blockskip_flush = false;
4075 compaction_defer_reset(zone, order, true);
4076 count_vm_event(COMPACTSUCCESS);
4077 return page;
4078 }
4079
4080
4081
4082
4083
4084 count_vm_event(COMPACTFAIL);
4085
4086 cond_resched();
4087
4088 return NULL;
4089}
4090
4091static inline bool
4092should_compact_retry(struct alloc_context *ac, int order, int alloc_flags,
4093 enum compact_result compact_result,
4094 enum compact_priority *compact_priority,
4095 int *compaction_retries)
4096{
4097 int max_retries = MAX_COMPACT_RETRIES;
4098 int min_priority;
4099 bool ret = false;
4100 int retries = *compaction_retries;
4101 enum compact_priority priority = *compact_priority;
4102
4103 if (!order)
4104 return false;
4105
4106 if (compaction_made_progress(compact_result))
4107 (*compaction_retries)++;
4108
4109
4110
4111
4112
4113
4114 if (compaction_failed(compact_result))
4115 goto check_priority;
4116
4117
4118
4119
4120
4121 if (compaction_needs_reclaim(compact_result)) {
4122 ret = compaction_zonelist_suitable(ac, order, alloc_flags);
4123 goto out;
4124 }
4125
4126
4127
4128
4129
4130
4131
4132 if (compaction_withdrawn(compact_result)) {
4133 goto check_priority;
4134 }
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144 if (order > PAGE_ALLOC_COSTLY_ORDER)
4145 max_retries /= 4;
4146 if (*compaction_retries <= max_retries) {
4147 ret = true;
4148 goto out;
4149 }
4150
4151
4152
4153
4154
4155check_priority:
4156 min_priority = (order > PAGE_ALLOC_COSTLY_ORDER) ?
4157 MIN_COMPACT_COSTLY_PRIORITY : MIN_COMPACT_PRIORITY;
4158
4159 if (*compact_priority > min_priority) {
4160 (*compact_priority)--;
4161 *compaction_retries = 0;
4162 ret = true;
4163 }
4164out:
4165 trace_compact_retry(order, priority, compact_result, retries, max_retries, ret);
4166 return ret;
4167}
4168#else
4169static inline struct page *
4170__alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order,
4171 unsigned int alloc_flags, const struct alloc_context *ac,
4172 enum compact_priority prio, enum compact_result *compact_result)
4173{
4174 *compact_result = COMPACT_SKIPPED;
4175 return NULL;
4176}
4177
4178static inline bool
4179should_compact_retry(struct alloc_context *ac, unsigned int order, int alloc_flags,
4180 enum compact_result compact_result,
4181 enum compact_priority *compact_priority,
4182 int *compaction_retries)
4183{
4184 struct zone *zone;
4185 struct zoneref *z;
4186
4187 if (!order || order > PAGE_ALLOC_COSTLY_ORDER)
4188 return false;
4189
4190
4191
4192
4193
4194
4195
4196 for_each_zone_zonelist_nodemask(zone, z, ac->zonelist,
4197 ac->highest_zoneidx, ac->nodemask) {
4198 if (zone_watermark_ok(zone, 0, min_wmark_pages(zone),
4199 ac->highest_zoneidx, alloc_flags))
4200 return true;
4201 }
4202 return false;
4203}
4204#endif
4205
4206#ifdef CONFIG_LOCKDEP
4207static struct lockdep_map __fs_reclaim_map =
4208 STATIC_LOCKDEP_MAP_INIT("fs_reclaim", &__fs_reclaim_map);
4209
4210static bool __need_fs_reclaim(gfp_t gfp_mask)
4211{
4212 gfp_mask = current_gfp_context(gfp_mask);
4213
4214
4215 if (!(gfp_mask & __GFP_DIRECT_RECLAIM))
4216 return false;
4217
4218
4219 if (current->flags & PF_MEMALLOC)
4220 return false;
4221
4222
4223 if (!(gfp_mask & __GFP_FS))
4224 return false;
4225
4226 if (gfp_mask & __GFP_NOLOCKDEP)
4227 return false;
4228
4229 return true;
4230}
4231
4232void __fs_reclaim_acquire(void)
4233{
4234 lock_map_acquire(&__fs_reclaim_map);
4235}
4236
4237void __fs_reclaim_release(void)
4238{
4239 lock_map_release(&__fs_reclaim_map);
4240}
4241
4242void fs_reclaim_acquire(gfp_t gfp_mask)
4243{
4244 if (__need_fs_reclaim(gfp_mask))
4245 __fs_reclaim_acquire();
4246}
4247EXPORT_SYMBOL_GPL(fs_reclaim_acquire);
4248
4249void fs_reclaim_release(gfp_t gfp_mask)
4250{
4251 if (__need_fs_reclaim(gfp_mask))
4252 __fs_reclaim_release();
4253}
4254EXPORT_SYMBOL_GPL(fs_reclaim_release);
4255#endif
4256
4257
4258static int
4259__perform_reclaim(gfp_t gfp_mask, unsigned int order,
4260 const struct alloc_context *ac)
4261{
4262 int progress;
4263 unsigned int noreclaim_flag;
4264 unsigned long pflags;
4265
4266 cond_resched();
4267
4268
4269 cpuset_memory_pressure_bump();
4270 psi_memstall_enter(&pflags);
4271 fs_reclaim_acquire(gfp_mask);
4272 noreclaim_flag = memalloc_noreclaim_save();
4273
4274 progress = try_to_free_pages(ac->zonelist, order, gfp_mask,
4275 ac->nodemask);
4276
4277 memalloc_noreclaim_restore(noreclaim_flag);
4278 fs_reclaim_release(gfp_mask);
4279 psi_memstall_leave(&pflags);
4280
4281 cond_resched();
4282
4283 return progress;
4284}
4285
4286
4287static inline struct page *
4288__alloc_pages_direct_reclaim(gfp_t gfp_mask, unsigned int order,
4289 unsigned int alloc_flags, const struct alloc_context *ac,
4290 unsigned long *did_some_progress)
4291{
4292 struct page *page = NULL;
4293 bool drained = false;
4294
4295 *did_some_progress = __perform_reclaim(gfp_mask, order, ac);
4296 if (unlikely(!(*did_some_progress)))
4297 return NULL;
4298
4299retry:
4300 page = get_page_from_freelist(gfp_mask, order, alloc_flags, ac);
4301
4302
4303
4304
4305
4306
4307 if (!page && !drained) {
4308 unreserve_highatomic_pageblock(ac, false);
4309 drain_all_pages(NULL);
4310 drained = true;
4311 goto retry;
4312 }
4313
4314 return page;
4315}
4316
4317static void wake_all_kswapds(unsigned int order, gfp_t gfp_mask,
4318 const struct alloc_context *ac)
4319{
4320 struct zoneref *z;
4321 struct zone *zone;
4322 pg_data_t *last_pgdat = NULL;
4323 enum zone_type highest_zoneidx = ac->highest_zoneidx;
4324
4325 for_each_zone_zonelist_nodemask(zone, z, ac->zonelist, highest_zoneidx,
4326 ac->nodemask) {
4327 if (last_pgdat != zone->zone_pgdat)
4328 wakeup_kswapd(zone, gfp_mask, order, highest_zoneidx);
4329 last_pgdat = zone->zone_pgdat;
4330 }
4331}
4332
4333static inline unsigned int
4334gfp_to_alloc_flags(gfp_t gfp_mask)
4335{
4336 unsigned int alloc_flags = ALLOC_WMARK_MIN | ALLOC_CPUSET;
4337
4338
4339
4340
4341
4342
4343 BUILD_BUG_ON(__GFP_HIGH != (__force gfp_t) ALLOC_HIGH);
4344 BUILD_BUG_ON(__GFP_KSWAPD_RECLAIM != (__force gfp_t) ALLOC_KSWAPD);
4345
4346
4347
4348
4349
4350
4351
4352 alloc_flags |= (__force int)
4353 (gfp_mask & (__GFP_HIGH | __GFP_KSWAPD_RECLAIM));
4354
4355 if (gfp_mask & __GFP_ATOMIC) {
4356
4357
4358
4359
4360 if (!(gfp_mask & __GFP_NOMEMALLOC))
4361 alloc_flags |= ALLOC_HARDER;
4362
4363
4364
4365
4366 alloc_flags &= ~ALLOC_CPUSET;
4367 } else if (unlikely(rt_task(current)) && !in_interrupt())
4368 alloc_flags |= ALLOC_HARDER;
4369
4370 alloc_flags = current_alloc_flags(gfp_mask, alloc_flags);
4371
4372 return alloc_flags;
4373}
4374
4375static bool oom_reserves_allowed(struct task_struct *tsk)
4376{
4377 if (!tsk_is_oom_victim(tsk))
4378 return false;
4379
4380
4381
4382
4383
4384 if (!IS_ENABLED(CONFIG_MMU) && !test_thread_flag(TIF_MEMDIE))
4385 return false;
4386
4387 return true;
4388}
4389
4390
4391
4392
4393
4394static inline int __gfp_pfmemalloc_flags(gfp_t gfp_mask)
4395{
4396 if (unlikely(gfp_mask & __GFP_NOMEMALLOC))
4397 return 0;
4398 if (gfp_mask & __GFP_MEMALLOC)
4399 return ALLOC_NO_WATERMARKS;
4400 if (in_serving_softirq() && (current->flags & PF_MEMALLOC))
4401 return ALLOC_NO_WATERMARKS;
4402 if (!in_interrupt()) {
4403 if (current->flags & PF_MEMALLOC)
4404 return ALLOC_NO_WATERMARKS;
4405 else if (oom_reserves_allowed(current))
4406 return ALLOC_OOM;
4407 }
4408
4409 return 0;
4410}
4411
4412bool gfp_pfmemalloc_allowed(gfp_t gfp_mask)
4413{
4414 return !!__gfp_pfmemalloc_flags(gfp_mask);
4415}
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427static inline bool
4428should_reclaim_retry(gfp_t gfp_mask, unsigned order,
4429 struct alloc_context *ac, int alloc_flags,
4430 bool did_some_progress, int *no_progress_loops)
4431{
4432 struct zone *zone;
4433 struct zoneref *z;
4434 bool ret = false;
4435
4436
4437
4438
4439
4440
4441 if (did_some_progress && order <= PAGE_ALLOC_COSTLY_ORDER)
4442 *no_progress_loops = 0;
4443 else
4444 (*no_progress_loops)++;
4445
4446
4447
4448
4449
4450 if (*no_progress_loops > MAX_RECLAIM_RETRIES) {
4451
4452 return unreserve_highatomic_pageblock(ac, true);
4453 }
4454
4455
4456
4457
4458
4459
4460
4461 for_each_zone_zonelist_nodemask(zone, z, ac->zonelist,
4462 ac->highest_zoneidx, ac->nodemask) {
4463 unsigned long available;
4464 unsigned long reclaimable;
4465 unsigned long min_wmark = min_wmark_pages(zone);
4466 bool wmark;
4467
4468 available = reclaimable = zone_reclaimable_pages(zone);
4469 available += zone_page_state_snapshot(zone, NR_FREE_PAGES);
4470
4471
4472
4473
4474
4475 wmark = __zone_watermark_ok(zone, order, min_wmark,
4476 ac->highest_zoneidx, alloc_flags, available);
4477 trace_reclaim_retry_zone(z, order, reclaimable,
4478 available, min_wmark, *no_progress_loops, wmark);
4479 if (wmark) {
4480
4481
4482
4483
4484
4485
4486 if (!did_some_progress) {
4487 unsigned long write_pending;
4488
4489 write_pending = zone_page_state_snapshot(zone,
4490 NR_ZONE_WRITE_PENDING);
4491
4492 if (2 * write_pending > reclaimable) {
4493 congestion_wait(BLK_RW_ASYNC, HZ/10);
4494 return true;
4495 }
4496 }
4497
4498 ret = true;
4499 goto out;
4500 }
4501 }
4502
4503out:
4504
4505
4506
4507
4508
4509
4510
4511 if (current->flags & PF_WQ_WORKER)
4512 schedule_timeout_uninterruptible(1);
4513 else
4514 cond_resched();
4515 return ret;
4516}
4517
4518static inline bool
4519check_retry_cpuset(int cpuset_mems_cookie, struct alloc_context *ac)
4520{
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532 if (cpusets_enabled() && ac->nodemask &&
4533 !cpuset_nodemask_valid_mems_allowed(ac->nodemask)) {
4534 ac->nodemask = NULL;
4535 return true;
4536 }
4537
4538
4539
4540
4541
4542
4543
4544
4545 if (read_mems_allowed_retry(cpuset_mems_cookie))
4546 return true;
4547
4548 return false;
4549}
4550
4551static inline struct page *
4552__alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
4553 struct alloc_context *ac)
4554{
4555 bool can_direct_reclaim = gfp_mask & __GFP_DIRECT_RECLAIM;
4556 const bool costly_order = order > PAGE_ALLOC_COSTLY_ORDER;
4557 struct page *page = NULL;
4558 unsigned int alloc_flags;
4559 unsigned long did_some_progress;
4560 enum compact_priority compact_priority;
4561 enum compact_result compact_result;
4562 int compaction_retries;
4563 int no_progress_loops;
4564 unsigned int cpuset_mems_cookie;
4565 int reserve_flags;
4566
4567
4568
4569
4570
4571 if (WARN_ON_ONCE((gfp_mask & (__GFP_ATOMIC|__GFP_DIRECT_RECLAIM)) ==
4572 (__GFP_ATOMIC|__GFP_DIRECT_RECLAIM)))
4573 gfp_mask &= ~__GFP_ATOMIC;
4574
4575retry_cpuset:
4576 compaction_retries = 0;
4577 no_progress_loops = 0;
4578 compact_priority = DEF_COMPACT_PRIORITY;
4579 cpuset_mems_cookie = read_mems_allowed_begin();
4580
4581
4582
4583
4584
4585
4586 alloc_flags = gfp_to_alloc_flags(gfp_mask);
4587
4588
4589
4590
4591
4592
4593
4594 ac->preferred_zoneref = first_zones_zonelist(ac->zonelist,
4595 ac->highest_zoneidx, ac->nodemask);
4596 if (!ac->preferred_zoneref->zone)
4597 goto nopage;
4598
4599 if (alloc_flags & ALLOC_KSWAPD)
4600 wake_all_kswapds(order, gfp_mask, ac);
4601
4602
4603
4604
4605
4606 page = get_page_from_freelist(gfp_mask, order, alloc_flags, ac);
4607 if (page)
4608 goto got_pg;
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619 if (can_direct_reclaim &&
4620 (costly_order ||
4621 (order > 0 && ac->migratetype != MIGRATE_MOVABLE))
4622 && !gfp_pfmemalloc_allowed(gfp_mask)) {
4623 page = __alloc_pages_direct_compact(gfp_mask, order,
4624 alloc_flags, ac,
4625 INIT_COMPACT_PRIORITY,
4626 &compact_result);
4627 if (page)
4628 goto got_pg;
4629
4630
4631
4632
4633
4634 if (costly_order && (gfp_mask & __GFP_NORETRY)) {
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652 if (compact_result == COMPACT_SKIPPED ||
4653 compact_result == COMPACT_DEFERRED)
4654 goto nopage;
4655
4656
4657
4658
4659
4660
4661 compact_priority = INIT_COMPACT_PRIORITY;
4662 }
4663 }
4664
4665retry:
4666
4667 if (alloc_flags & ALLOC_KSWAPD)
4668 wake_all_kswapds(order, gfp_mask, ac);
4669
4670 reserve_flags = __gfp_pfmemalloc_flags(gfp_mask);
4671 if (reserve_flags)
4672 alloc_flags = current_alloc_flags(gfp_mask, reserve_flags);
4673
4674
4675
4676
4677
4678
4679 if (!(alloc_flags & ALLOC_CPUSET) || reserve_flags) {
4680 ac->nodemask = NULL;
4681 ac->preferred_zoneref = first_zones_zonelist(ac->zonelist,
4682 ac->highest_zoneidx, ac->nodemask);
4683 }
4684
4685
4686 page = get_page_from_freelist(gfp_mask, order, alloc_flags, ac);
4687 if (page)
4688 goto got_pg;
4689
4690
4691 if (!can_direct_reclaim)
4692 goto nopage;
4693
4694
4695 if (current->flags & PF_MEMALLOC)
4696 goto nopage;
4697
4698
4699 page = __alloc_pages_direct_reclaim(gfp_mask, order, alloc_flags, ac,
4700 &did_some_progress);
4701 if (page)
4702 goto got_pg;
4703
4704
4705 page = __alloc_pages_direct_compact(gfp_mask, order, alloc_flags, ac,
4706 compact_priority, &compact_result);
4707 if (page)
4708 goto got_pg;
4709
4710
4711 if (gfp_mask & __GFP_NORETRY)
4712 goto nopage;
4713
4714
4715
4716
4717
4718 if (costly_order && !(gfp_mask & __GFP_RETRY_MAYFAIL))
4719 goto nopage;
4720
4721 if (should_reclaim_retry(gfp_mask, order, ac, alloc_flags,
4722 did_some_progress > 0, &no_progress_loops))
4723 goto retry;
4724
4725
4726
4727
4728
4729
4730
4731 if (did_some_progress > 0 &&
4732 should_compact_retry(ac, order, alloc_flags,
4733 compact_result, &compact_priority,
4734 &compaction_retries))
4735 goto retry;
4736
4737
4738
4739 if (check_retry_cpuset(cpuset_mems_cookie, ac))
4740 goto retry_cpuset;
4741
4742
4743 page = __alloc_pages_may_oom(gfp_mask, order, ac, &did_some_progress);
4744 if (page)
4745 goto got_pg;
4746
4747
4748 if (tsk_is_oom_victim(current) &&
4749 (alloc_flags & ALLOC_OOM ||
4750 (gfp_mask & __GFP_NOMEMALLOC)))
4751 goto nopage;
4752
4753
4754 if (did_some_progress) {
4755 no_progress_loops = 0;
4756 goto retry;
4757 }
4758
4759nopage:
4760
4761 if (check_retry_cpuset(cpuset_mems_cookie, ac))
4762 goto retry_cpuset;
4763
4764
4765
4766
4767
4768 if (gfp_mask & __GFP_NOFAIL) {
4769
4770
4771
4772
4773 if (WARN_ON_ONCE(!can_direct_reclaim))
4774 goto fail;
4775
4776
4777
4778
4779
4780
4781 WARN_ON_ONCE(current->flags & PF_MEMALLOC);
4782
4783
4784
4785
4786
4787
4788
4789 WARN_ON_ONCE(order > PAGE_ALLOC_COSTLY_ORDER);
4790
4791
4792
4793
4794
4795
4796
4797 page = __alloc_pages_cpuset_fallback(gfp_mask, order, ALLOC_HARDER, ac);
4798 if (page)
4799 goto got_pg;
4800
4801 cond_resched();
4802 goto retry;
4803 }
4804fail:
4805 warn_alloc(gfp_mask, ac->nodemask,
4806 "page allocation failure: order:%u", order);
4807got_pg:
4808 return page;
4809}
4810
4811static inline bool prepare_alloc_pages(gfp_t gfp_mask, unsigned int order,
4812 int preferred_nid, nodemask_t *nodemask,
4813 struct alloc_context *ac, gfp_t *alloc_mask,
4814 unsigned int *alloc_flags)
4815{
4816 ac->highest_zoneidx = gfp_zone(gfp_mask);
4817 ac->zonelist = node_zonelist(preferred_nid, gfp_mask);
4818 ac->nodemask = nodemask;
4819 ac->migratetype = gfp_migratetype(gfp_mask);
4820
4821 if (cpusets_enabled()) {
4822 *alloc_mask |= __GFP_HARDWALL;
4823
4824
4825
4826
4827 if (!in_interrupt() && !ac->nodemask)
4828 ac->nodemask = &cpuset_current_mems_allowed;
4829 else
4830 *alloc_flags |= ALLOC_CPUSET;
4831 }
4832
4833 fs_reclaim_acquire(gfp_mask);
4834 fs_reclaim_release(gfp_mask);
4835
4836 might_sleep_if(gfp_mask & __GFP_DIRECT_RECLAIM);
4837
4838 if (should_fail_alloc_page(gfp_mask, order))
4839 return false;
4840
4841 *alloc_flags = current_alloc_flags(gfp_mask, *alloc_flags);
4842
4843 return true;
4844}
4845
4846
4847static inline void finalise_ac(gfp_t gfp_mask, struct alloc_context *ac)
4848{
4849
4850 ac->spread_dirty_pages = (gfp_mask & __GFP_WRITE);
4851
4852
4853
4854
4855
4856
4857 ac->preferred_zoneref = first_zones_zonelist(ac->zonelist,
4858 ac->highest_zoneidx, ac->nodemask);
4859}
4860
4861
4862
4863
4864struct page *
4865__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid,
4866 nodemask_t *nodemask)
4867{
4868 struct page *page;
4869 unsigned int alloc_flags = ALLOC_WMARK_LOW;
4870 gfp_t alloc_mask;
4871 struct alloc_context ac = { };
4872
4873
4874
4875
4876
4877 if (unlikely(order >= MAX_ORDER)) {
4878 WARN_ON_ONCE(!(gfp_mask & __GFP_NOWARN));
4879 return NULL;
4880 }
4881
4882 gfp_mask &= gfp_allowed_mask;
4883 alloc_mask = gfp_mask;
4884 if (!prepare_alloc_pages(gfp_mask, order, preferred_nid, nodemask, &ac, &alloc_mask, &alloc_flags))
4885 return NULL;
4886
4887 finalise_ac(gfp_mask, &ac);
4888
4889
4890
4891
4892
4893 alloc_flags |= alloc_flags_nofragment(ac.preferred_zoneref->zone, gfp_mask);
4894
4895
4896 page = get_page_from_freelist(alloc_mask, order, alloc_flags, &ac);
4897 if (likely(page))
4898 goto out;
4899
4900
4901
4902
4903
4904
4905
4906 alloc_mask = current_gfp_context(gfp_mask);
4907 ac.spread_dirty_pages = false;
4908
4909
4910
4911
4912
4913 ac.nodemask = nodemask;
4914
4915 page = __alloc_pages_slowpath(alloc_mask, order, &ac);
4916
4917out:
4918 if (memcg_kmem_enabled() && (gfp_mask & __GFP_ACCOUNT) && page &&
4919 unlikely(__memcg_kmem_charge_page(page, gfp_mask, order) != 0)) {
4920 __free_pages(page, order);
4921 page = NULL;
4922 }
4923
4924 trace_mm_page_alloc(page, order, alloc_mask, ac.migratetype);
4925
4926 return page;
4927}
4928EXPORT_SYMBOL(__alloc_pages_nodemask);
4929
4930
4931
4932
4933
4934
4935unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
4936{
4937 struct page *page;
4938
4939 page = alloc_pages(gfp_mask & ~__GFP_HIGHMEM, order);
4940 if (!page)
4941 return 0;
4942 return (unsigned long) page_address(page);
4943}
4944EXPORT_SYMBOL(__get_free_pages);
4945
4946unsigned long get_zeroed_page(gfp_t gfp_mask)
4947{
4948 return __get_free_pages(gfp_mask | __GFP_ZERO, 0);
4949}
4950EXPORT_SYMBOL(get_zeroed_page);
4951
4952static inline void free_the_page(struct page *page, unsigned int order)
4953{
4954 if (order == 0)
4955 free_unref_page(page);
4956 else
4957 __free_pages_ok(page, order);
4958}
4959
4960void __free_pages(struct page *page, unsigned int order)
4961{
4962 if (put_page_testzero(page))
4963 free_the_page(page, order);
4964}
4965EXPORT_SYMBOL(__free_pages);
4966
4967void free_pages(unsigned long addr, unsigned int order)
4968{
4969 if (addr != 0) {
4970 VM_BUG_ON(!virt_addr_valid((void *)addr));
4971 __free_pages(virt_to_page((void *)addr), order);
4972 }
4973}
4974
4975EXPORT_SYMBOL(free_pages);
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988static struct page *__page_frag_cache_refill(struct page_frag_cache *nc,
4989 gfp_t gfp_mask)
4990{
4991 struct page *page = NULL;
4992 gfp_t gfp = gfp_mask;
4993
4994#if (PAGE_SIZE < PAGE_FRAG_CACHE_MAX_SIZE)
4995 gfp_mask |= __GFP_COMP | __GFP_NOWARN | __GFP_NORETRY |
4996 __GFP_NOMEMALLOC;
4997 page = alloc_pages_node(NUMA_NO_NODE, gfp_mask,
4998 PAGE_FRAG_CACHE_MAX_ORDER);
4999 nc->size = page ? PAGE_FRAG_CACHE_MAX_SIZE : PAGE_SIZE;
5000#endif
5001 if (unlikely(!page))
5002 page = alloc_pages_node(NUMA_NO_NODE, gfp, 0);
5003
5004 nc->va = page ? page_address(page) : NULL;
5005
5006 return page;
5007}
5008
5009void __page_frag_cache_drain(struct page *page, unsigned int count)
5010{
5011 VM_BUG_ON_PAGE(page_ref_count(page) == 0, page);
5012
5013 if (page_ref_sub_and_test(page, count))
5014 free_the_page(page, compound_order(page));
5015}
5016EXPORT_SYMBOL(__page_frag_cache_drain);
5017
5018void *page_frag_alloc(struct page_frag_cache *nc,
5019 unsigned int fragsz, gfp_t gfp_mask)
5020{
5021 unsigned int size = PAGE_SIZE;
5022 struct page *page;
5023 int offset;
5024
5025 if (unlikely(!nc->va)) {
5026refill:
5027 page = __page_frag_cache_refill(nc, gfp_mask);
5028 if (!page)
5029 return NULL;
5030
5031#if (PAGE_SIZE < PAGE_FRAG_CACHE_MAX_SIZE)
5032
5033 size = nc->size;
5034#endif
5035
5036
5037
5038 page_ref_add(page, PAGE_FRAG_CACHE_MAX_SIZE);
5039
5040
5041 nc->pfmemalloc = page_is_pfmemalloc(page);
5042 nc->pagecnt_bias = PAGE_FRAG_CACHE_MAX_SIZE + 1;
5043 nc->offset = size;
5044 }
5045
5046 offset = nc->offset - fragsz;
5047 if (unlikely(offset < 0)) {
5048 page = virt_to_page(nc->va);
5049
5050 if (!page_ref_sub_and_test(page, nc->pagecnt_bias))
5051 goto refill;
5052
5053#if (PAGE_SIZE < PAGE_FRAG_CACHE_MAX_SIZE)
5054
5055 size = nc->size;
5056#endif
5057
5058 set_page_count(page, PAGE_FRAG_CACHE_MAX_SIZE + 1);
5059
5060
5061 nc->pagecnt_bias = PAGE_FRAG_CACHE_MAX_SIZE + 1;
5062 offset = size - fragsz;
5063 }
5064
5065 nc->pagecnt_bias--;
5066 nc->offset = offset;
5067
5068 return nc->va + offset;
5069}
5070EXPORT_SYMBOL(page_frag_alloc);
5071
5072
5073
5074
5075void page_frag_free(void *addr)
5076{
5077 struct page *page = virt_to_head_page(addr);
5078
5079 if (unlikely(put_page_testzero(page)))
5080 free_the_page(page, compound_order(page));
5081}
5082EXPORT_SYMBOL(page_frag_free);
5083
5084static void *make_alloc_exact(unsigned long addr, unsigned int order,
5085 size_t size)
5086{
5087 if (addr) {
5088 unsigned long alloc_end = addr + (PAGE_SIZE << order);
5089 unsigned long used = addr + PAGE_ALIGN(size);
5090
5091 split_page(virt_to_page((void *)addr), order);
5092 while (used < alloc_end) {
5093 free_page(used);
5094 used += PAGE_SIZE;
5095 }
5096 }
5097 return (void *)addr;
5098}
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115void *alloc_pages_exact(size_t size, gfp_t gfp_mask)
5116{
5117 unsigned int order = get_order(size);
5118 unsigned long addr;
5119
5120 if (WARN_ON_ONCE(gfp_mask & __GFP_COMP))
5121 gfp_mask &= ~__GFP_COMP;
5122
5123 addr = __get_free_pages(gfp_mask, order);
5124 return make_alloc_exact(addr, order, size);
5125}
5126EXPORT_SYMBOL(alloc_pages_exact);
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140void * __meminit alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask)
5141{
5142 unsigned int order = get_order(size);
5143 struct page *p;
5144
5145 if (WARN_ON_ONCE(gfp_mask & __GFP_COMP))
5146 gfp_mask &= ~__GFP_COMP;
5147
5148 p = alloc_pages_node(nid, gfp_mask, order);
5149 if (!p)
5150 return NULL;
5151 return make_alloc_exact((unsigned long)page_address(p), order, size);
5152}
5153
5154
5155
5156
5157
5158
5159
5160
5161void free_pages_exact(void *virt, size_t size)
5162{
5163 unsigned long addr = (unsigned long)virt;
5164 unsigned long end = addr + PAGE_ALIGN(size);
5165
5166 while (addr < end) {
5167 free_page(addr);
5168 addr += PAGE_SIZE;
5169 }
5170}
5171EXPORT_SYMBOL(free_pages_exact);
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185static unsigned long nr_free_zone_pages(int offset)
5186{
5187 struct zoneref *z;
5188 struct zone *zone;
5189
5190
5191 unsigned long sum = 0;
5192
5193 struct zonelist *zonelist = node_zonelist(numa_node_id(), GFP_KERNEL);
5194
5195 for_each_zone_zonelist(zone, z, zonelist, offset) {
5196 unsigned long size = zone_managed_pages(zone);
5197 unsigned long high = high_wmark_pages(zone);
5198 if (size > high)
5199 sum += size - high;
5200 }
5201
5202 return sum;
5203}
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214unsigned long nr_free_buffer_pages(void)
5215{
5216 return nr_free_zone_pages(gfp_zone(GFP_USER));
5217}
5218EXPORT_SYMBOL_GPL(nr_free_buffer_pages);
5219
5220static inline void show_node(struct zone *zone)
5221{
5222 if (IS_ENABLED(CONFIG_NUMA))
5223 printk("Node %d ", zone_to_nid(zone));
5224}
5225
5226long si_mem_available(void)
5227{
5228 long available;
5229 unsigned long pagecache;
5230 unsigned long wmark_low = 0;
5231 unsigned long pages[NR_LRU_LISTS];
5232 unsigned long reclaimable;
5233 struct zone *zone;
5234 int lru;
5235
5236 for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++)
5237 pages[lru] = global_node_page_state(NR_LRU_BASE + lru);
5238
5239 for_each_zone(zone)
5240 wmark_low += low_wmark_pages(zone);
5241
5242
5243
5244
5245
5246 available = global_zone_page_state(NR_FREE_PAGES) - totalreserve_pages;
5247
5248
5249
5250
5251
5252
5253 pagecache = pages[LRU_ACTIVE_FILE] + pages[LRU_INACTIVE_FILE];
5254 pagecache -= min(pagecache / 2, wmark_low);
5255 available += pagecache;
5256
5257
5258
5259
5260
5261
5262 reclaimable = global_node_page_state_pages(NR_SLAB_RECLAIMABLE_B) +
5263 global_node_page_state(NR_KERNEL_MISC_RECLAIMABLE);
5264 available += reclaimable - min(reclaimable / 2, wmark_low);
5265
5266 if (available < 0)
5267 available = 0;
5268 return available;
5269}
5270EXPORT_SYMBOL_GPL(si_mem_available);
5271
5272void si_meminfo(struct sysinfo *val)
5273{
5274 val->totalram = totalram_pages();
5275 val->sharedram = global_node_page_state(NR_SHMEM);
5276 val->freeram = global_zone_page_state(NR_FREE_PAGES);
5277 val->bufferram = nr_blockdev_pages();
5278 val->totalhigh = totalhigh_pages();
5279 val->freehigh = nr_free_highpages();
5280 val->mem_unit = PAGE_SIZE;
5281}
5282
5283EXPORT_SYMBOL(si_meminfo);
5284
5285#ifdef CONFIG_NUMA
5286void si_meminfo_node(struct sysinfo *val, int nid)
5287{
5288 int zone_type;
5289 unsigned long managed_pages = 0;
5290 unsigned long managed_highpages = 0;
5291 unsigned long free_highpages = 0;
5292 pg_data_t *pgdat = NODE_DATA(nid);
5293
5294 for (zone_type = 0; zone_type < MAX_NR_ZONES; zone_type++)
5295 managed_pages += zone_managed_pages(&pgdat->node_zones[zone_type]);
5296 val->totalram = managed_pages;
5297 val->sharedram = node_page_state(pgdat, NR_SHMEM);
5298 val->freeram = sum_zone_node_page_state(nid, NR_FREE_PAGES);
5299#ifdef CONFIG_HIGHMEM
5300 for (zone_type = 0; zone_type < MAX_NR_ZONES; zone_type++) {
5301 struct zone *zone = &pgdat->node_zones[zone_type];
5302
5303 if (is_highmem(zone)) {
5304 managed_highpages += zone_managed_pages(zone);
5305 free_highpages += zone_page_state(zone, NR_FREE_PAGES);
5306 }
5307 }
5308 val->totalhigh = managed_highpages;
5309 val->freehigh = free_highpages;
5310#else
5311 val->totalhigh = managed_highpages;
5312 val->freehigh = free_highpages;
5313#endif
5314 val->mem_unit = PAGE_SIZE;
5315}
5316#endif
5317
5318
5319
5320
5321
5322static bool show_mem_node_skip(unsigned int flags, int nid, nodemask_t *nodemask)
5323{
5324 if (!(flags & SHOW_MEM_FILTER_NODES))
5325 return false;
5326
5327
5328
5329
5330
5331
5332 if (!nodemask)
5333 nodemask = &cpuset_current_mems_allowed;
5334
5335 return !node_isset(nid, *nodemask);
5336}
5337
5338#define K(x) ((x) << (PAGE_SHIFT-10))
5339
5340static void show_migration_types(unsigned char type)
5341{
5342 static const char types[MIGRATE_TYPES] = {
5343 [MIGRATE_UNMOVABLE] = 'U',
5344 [MIGRATE_MOVABLE] = 'M',
5345 [MIGRATE_RECLAIMABLE] = 'E',
5346 [MIGRATE_HIGHATOMIC] = 'H',
5347#ifdef CONFIG_CMA
5348 [MIGRATE_CMA] = 'C',
5349#endif
5350#ifdef CONFIG_MEMORY_ISOLATION
5351 [MIGRATE_ISOLATE] = 'I',
5352#endif
5353 };
5354 char tmp[MIGRATE_TYPES + 1];
5355 char *p = tmp;
5356 int i;
5357
5358 for (i = 0; i < MIGRATE_TYPES; i++) {
5359 if (type & (1 << i))
5360 *p++ = types[i];
5361 }
5362
5363 *p = '\0';
5364 printk(KERN_CONT "(%s) ", tmp);
5365}
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376void show_free_areas(unsigned int filter, nodemask_t *nodemask)
5377{
5378 unsigned long free_pcp = 0;
5379 int cpu;
5380 struct zone *zone;
5381 pg_data_t *pgdat;
5382
5383 for_each_populated_zone(zone) {
5384 if (show_mem_node_skip(filter, zone_to_nid(zone), nodemask))
5385 continue;
5386
5387 for_each_online_cpu(cpu)
5388 free_pcp += per_cpu_ptr(zone->pageset, cpu)->pcp.count;
5389 }
5390
5391 printk("active_anon:%lu inactive_anon:%lu isolated_anon:%lu\n"
5392 " active_file:%lu inactive_file:%lu isolated_file:%lu\n"
5393 " unevictable:%lu dirty:%lu writeback:%lu\n"
5394 " slab_reclaimable:%lu slab_unreclaimable:%lu\n"
5395 " mapped:%lu shmem:%lu pagetables:%lu bounce:%lu\n"
5396 " free:%lu free_pcp:%lu free_cma:%lu\n",
5397 global_node_page_state(NR_ACTIVE_ANON),
5398 global_node_page_state(NR_INACTIVE_ANON),
5399 global_node_page_state(NR_ISOLATED_ANON),
5400 global_node_page_state(NR_ACTIVE_FILE),
5401 global_node_page_state(NR_INACTIVE_FILE),
5402 global_node_page_state(NR_ISOLATED_FILE),
5403 global_node_page_state(NR_UNEVICTABLE),
5404 global_node_page_state(NR_FILE_DIRTY),
5405 global_node_page_state(NR_WRITEBACK),
5406 global_node_page_state_pages(NR_SLAB_RECLAIMABLE_B),
5407 global_node_page_state_pages(NR_SLAB_UNRECLAIMABLE_B),
5408 global_node_page_state(NR_FILE_MAPPED),
5409 global_node_page_state(NR_SHMEM),
5410 global_zone_page_state(NR_PAGETABLE),
5411 global_zone_page_state(NR_BOUNCE),
5412 global_zone_page_state(NR_FREE_PAGES),
5413 free_pcp,
5414 global_zone_page_state(NR_FREE_CMA_PAGES));
5415
5416 for_each_online_pgdat(pgdat) {
5417 if (show_mem_node_skip(filter, pgdat->node_id, nodemask))
5418 continue;
5419
5420 printk("Node %d"
5421 " active_anon:%lukB"
5422 " inactive_anon:%lukB"
5423 " active_file:%lukB"
5424 " inactive_file:%lukB"
5425 " unevictable:%lukB"
5426 " isolated(anon):%lukB"
5427 " isolated(file):%lukB"
5428 " mapped:%lukB"
5429 " dirty:%lukB"
5430 " writeback:%lukB"
5431 " shmem:%lukB"
5432#ifdef CONFIG_TRANSPARENT_HUGEPAGE
5433 " shmem_thp: %lukB"
5434 " shmem_pmdmapped: %lukB"
5435 " anon_thp: %lukB"
5436#endif
5437 " writeback_tmp:%lukB"
5438 " kernel_stack:%lukB"
5439#ifdef CONFIG_SHADOW_CALL_STACK
5440 " shadow_call_stack:%lukB"
5441#endif
5442 " all_unreclaimable? %s"
5443 "\n",
5444 pgdat->node_id,
5445 K(node_page_state(pgdat, NR_ACTIVE_ANON)),
5446 K(node_page_state(pgdat, NR_INACTIVE_ANON)),
5447 K(node_page_state(pgdat, NR_ACTIVE_FILE)),
5448 K(node_page_state(pgdat, NR_INACTIVE_FILE)),
5449 K(node_page_state(pgdat, NR_UNEVICTABLE)),
5450 K(node_page_state(pgdat, NR_ISOLATED_ANON)),
5451 K(node_page_state(pgdat, NR_ISOLATED_FILE)),
5452 K(node_page_state(pgdat, NR_FILE_MAPPED)),
5453 K(node_page_state(pgdat, NR_FILE_DIRTY)),
5454 K(node_page_state(pgdat, NR_WRITEBACK)),
5455 K(node_page_state(pgdat, NR_SHMEM)),
5456#ifdef CONFIG_TRANSPARENT_HUGEPAGE
5457 K(node_page_state(pgdat, NR_SHMEM_THPS) * HPAGE_PMD_NR),
5458 K(node_page_state(pgdat, NR_SHMEM_PMDMAPPED)
5459 * HPAGE_PMD_NR),
5460 K(node_page_state(pgdat, NR_ANON_THPS) * HPAGE_PMD_NR),
5461#endif
5462 K(node_page_state(pgdat, NR_WRITEBACK_TEMP)),
5463 node_page_state(pgdat, NR_KERNEL_STACK_KB),
5464#ifdef CONFIG_SHADOW_CALL_STACK
5465 node_page_state(pgdat, NR_KERNEL_SCS_KB),
5466#endif
5467 pgdat->kswapd_failures >= MAX_RECLAIM_RETRIES ?
5468 "yes" : "no");
5469 }
5470
5471 for_each_populated_zone(zone) {
5472 int i;
5473
5474 if (show_mem_node_skip(filter, zone_to_nid(zone), nodemask))
5475 continue;
5476
5477 free_pcp = 0;
5478 for_each_online_cpu(cpu)
5479 free_pcp += per_cpu_ptr(zone->pageset, cpu)->pcp.count;
5480
5481 show_node(zone);
5482 printk(KERN_CONT
5483 "%s"
5484 " free:%lukB"
5485 " min:%lukB"
5486 " low:%lukB"
5487 " high:%lukB"
5488 " reserved_highatomic:%luKB"
5489 " active_anon:%lukB"
5490 " inactive_anon:%lukB"
5491 " active_file:%lukB"
5492 " inactive_file:%lukB"
5493 " unevictable:%lukB"
5494 " writepending:%lukB"
5495 " present:%lukB"
5496 " managed:%lukB"
5497 " mlocked:%lukB"
5498 " pagetables:%lukB"
5499 " bounce:%lukB"
5500 " free_pcp:%lukB"
5501 " local_pcp:%ukB"
5502 " free_cma:%lukB"
5503 "\n",
5504 zone->name,
5505 K(zone_page_state(zone, NR_FREE_PAGES)),
5506 K(min_wmark_pages(zone)),
5507 K(low_wmark_pages(zone)),
5508 K(high_wmark_pages(zone)),
5509 K(zone->nr_reserved_highatomic),
5510 K(zone_page_state(zone, NR_ZONE_ACTIVE_ANON)),
5511 K(zone_page_state(zone, NR_ZONE_INACTIVE_ANON)),
5512 K(zone_page_state(zone, NR_ZONE_ACTIVE_FILE)),
5513 K(zone_page_state(zone, NR_ZONE_INACTIVE_FILE)),
5514 K(zone_page_state(zone, NR_ZONE_UNEVICTABLE)),
5515 K(zone_page_state(zone, NR_ZONE_WRITE_PENDING)),
5516 K(zone->present_pages),
5517 K(zone_managed_pages(zone)),
5518 K(zone_page_state(zone, NR_MLOCK)),
5519 K(zone_page_state(zone, NR_PAGETABLE)),
5520 K(zone_page_state(zone, NR_BOUNCE)),
5521 K(free_pcp),
5522 K(this_cpu_read(zone->pageset->pcp.count)),
5523 K(zone_page_state(zone, NR_FREE_CMA_PAGES)));
5524 printk("lowmem_reserve[]:");
5525 for (i = 0; i < MAX_NR_ZONES; i++)
5526 printk(KERN_CONT " %ld", zone->lowmem_reserve[i]);
5527 printk(KERN_CONT "\n");
5528 }
5529
5530 for_each_populated_zone(zone) {
5531 unsigned int order;
5532 unsigned long nr[MAX_ORDER], flags, total = 0;
5533 unsigned char types[MAX_ORDER];
5534
5535 if (show_mem_node_skip(filter, zone_to_nid(zone), nodemask))
5536 continue;
5537 show_node(zone);
5538 printk(KERN_CONT "%s: ", zone->name);
5539
5540 spin_lock_irqsave(&zone->lock, flags);
5541 for (order = 0; order < MAX_ORDER; order++) {
5542 struct free_area *area = &zone->free_area[order];
5543 int type;
5544
5545 nr[order] = area->nr_free;
5546 total += nr[order] << order;
5547
5548 types[order] = 0;
5549 for (type = 0; type < MIGRATE_TYPES; type++) {
5550 if (!free_area_empty(area, type))
5551 types[order] |= 1 << type;
5552 }
5553 }
5554 spin_unlock_irqrestore(&zone->lock, flags);
5555 for (order = 0; order < MAX_ORDER; order++) {
5556 printk(KERN_CONT "%lu*%lukB ",
5557 nr[order], K(1UL) << order);
5558 if (nr[order])
5559 show_migration_types(types[order]);
5560 }
5561 printk(KERN_CONT "= %lukB\n", K(total));
5562 }
5563
5564 hugetlb_show_meminfo();
5565
5566 printk("%ld total pagecache pages\n", global_node_page_state(NR_FILE_PAGES));
5567
5568 show_swap_cache_info();
5569}
5570
5571static void zoneref_set_zone(struct zone *zone, struct zoneref *zoneref)
5572{
5573 zoneref->zone = zone;
5574 zoneref->zone_idx = zone_idx(zone);
5575}
5576
5577
5578
5579
5580
5581
5582static int build_zonerefs_node(pg_data_t *pgdat, struct zoneref *zonerefs)
5583{
5584 struct zone *zone;
5585 enum zone_type zone_type = MAX_NR_ZONES;
5586 int nr_zones = 0;
5587
5588 do {
5589 zone_type--;
5590 zone = pgdat->node_zones + zone_type;
5591 if (managed_zone(zone)) {
5592 zoneref_set_zone(zone, &zonerefs[nr_zones++]);
5593 check_highest_zone(zone_type);
5594 }
5595 } while (zone_type);
5596
5597 return nr_zones;
5598}
5599
5600#ifdef CONFIG_NUMA
5601
5602static int __parse_numa_zonelist_order(char *s)
5603{
5604
5605
5606
5607
5608
5609
5610 if (!(*s == 'd' || *s == 'D' || *s == 'n' || *s == 'N')) {
5611 pr_warn("Ignoring unsupported numa_zonelist_order value: %s\n", s);
5612 return -EINVAL;
5613 }
5614 return 0;
5615}
5616
5617char numa_zonelist_order[] = "Node";
5618
5619
5620
5621
5622int numa_zonelist_order_handler(struct ctl_table *table, int write,
5623 void *buffer, size_t *length, loff_t *ppos)
5624{
5625 if (write)
5626 return __parse_numa_zonelist_order(buffer);
5627 return proc_dostring(table, write, buffer, length, ppos);
5628}
5629
5630
5631#define MAX_NODE_LOAD (nr_online_nodes)
5632static int node_load[MAX_NUMNODES];
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649static int find_next_best_node(int node, nodemask_t *used_node_mask)
5650{
5651 int n, val;
5652 int min_val = INT_MAX;
5653 int best_node = NUMA_NO_NODE;
5654 const struct cpumask *tmp = cpumask_of_node(0);
5655
5656
5657 if (!node_isset(node, *used_node_mask)) {
5658 node_set(node, *used_node_mask);
5659 return node;
5660 }
5661
5662 for_each_node_state(n, N_MEMORY) {
5663
5664
5665 if (node_isset(n, *used_node_mask))
5666 continue;
5667
5668
5669 val = node_distance(node, n);
5670
5671
5672 val += (n < node);
5673
5674
5675 tmp = cpumask_of_node(n);
5676 if (!cpumask_empty(tmp))
5677 val += PENALTY_FOR_NODE_WITH_CPUS;
5678
5679
5680 val *= (MAX_NODE_LOAD*MAX_NUMNODES);
5681 val += node_load[n];
5682
5683 if (val < min_val) {
5684 min_val = val;
5685 best_node = n;
5686 }
5687 }
5688
5689 if (best_node >= 0)
5690 node_set(best_node, *used_node_mask);
5691
5692 return best_node;
5693}
5694
5695
5696
5697
5698
5699
5700
5701static void build_zonelists_in_node_order(pg_data_t *pgdat, int *node_order,
5702 unsigned nr_nodes)
5703{
5704 struct zoneref *zonerefs;
5705 int i;
5706
5707 zonerefs = pgdat->node_zonelists[ZONELIST_FALLBACK]._zonerefs;
5708
5709 for (i = 0; i < nr_nodes; i++) {
5710 int nr_zones;
5711
5712 pg_data_t *node = NODE_DATA(node_order[i]);
5713
5714 nr_zones = build_zonerefs_node(node, zonerefs);
5715 zonerefs += nr_zones;
5716 }
5717 zonerefs->zone = NULL;
5718 zonerefs->zone_idx = 0;
5719}
5720
5721
5722
5723
5724static void build_thisnode_zonelists(pg_data_t *pgdat)
5725{
5726 struct zoneref *zonerefs;
5727 int nr_zones;
5728
5729 zonerefs = pgdat->node_zonelists[ZONELIST_NOFALLBACK]._zonerefs;
5730 nr_zones = build_zonerefs_node(pgdat, zonerefs);
5731 zonerefs += nr_zones;
5732 zonerefs->zone = NULL;
5733 zonerefs->zone_idx = 0;
5734}
5735
5736
5737
5738
5739
5740
5741
5742
5743static void build_zonelists(pg_data_t *pgdat)
5744{
5745 static int node_order[MAX_NUMNODES];
5746 int node, load, nr_nodes = 0;
5747 nodemask_t used_mask = NODE_MASK_NONE;
5748 int local_node, prev_node;
5749
5750
5751 local_node = pgdat->node_id;
5752 load = nr_online_nodes;
5753 prev_node = local_node;
5754
5755 memset(node_order, 0, sizeof(node_order));
5756 while ((node = find_next_best_node(local_node, &used_mask)) >= 0) {
5757
5758
5759
5760
5761
5762 if (node_distance(local_node, node) !=
5763 node_distance(local_node, prev_node))
5764 node_load[node] = load;
5765
5766 node_order[nr_nodes++] = node;
5767 prev_node = node;
5768 load--;
5769 }
5770
5771 build_zonelists_in_node_order(pgdat, node_order, nr_nodes);
5772 build_thisnode_zonelists(pgdat);
5773}
5774
5775#ifdef CONFIG_HAVE_MEMORYLESS_NODES
5776
5777
5778
5779
5780
5781
5782int local_memory_node(int node)
5783{
5784 struct zoneref *z;
5785
5786 z = first_zones_zonelist(node_zonelist(node, GFP_KERNEL),
5787 gfp_zone(GFP_KERNEL),
5788 NULL);
5789 return zone_to_nid(z->zone);
5790}
5791#endif
5792
5793static void setup_min_unmapped_ratio(void);
5794static void setup_min_slab_ratio(void);
5795#else
5796
5797static void build_zonelists(pg_data_t *pgdat)
5798{
5799 int node, local_node;
5800 struct zoneref *zonerefs;
5801 int nr_zones;
5802
5803 local_node = pgdat->node_id;
5804
5805 zonerefs = pgdat->node_zonelists[ZONELIST_FALLBACK]._zonerefs;
5806 nr_zones = build_zonerefs_node(pgdat, zonerefs);
5807 zonerefs += nr_zones;
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817 for (node = local_node + 1; node < MAX_NUMNODES; node++) {
5818 if (!node_online(node))
5819 continue;
5820 nr_zones = build_zonerefs_node(NODE_DATA(node), zonerefs);
5821 zonerefs += nr_zones;
5822 }
5823 for (node = 0; node < local_node; node++) {
5824 if (!node_online(node))
5825 continue;
5826 nr_zones = build_zonerefs_node(NODE_DATA(node), zonerefs);
5827 zonerefs += nr_zones;
5828 }
5829
5830 zonerefs->zone = NULL;
5831 zonerefs->zone_idx = 0;
5832}
5833
5834#endif
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851static void setup_pageset(struct per_cpu_pageset *p, unsigned long batch);
5852static DEFINE_PER_CPU(struct per_cpu_pageset, boot_pageset);
5853static DEFINE_PER_CPU(struct per_cpu_nodestat, boot_nodestats);
5854
5855static void __build_all_zonelists(void *data)
5856{
5857 int nid;
5858 int __maybe_unused cpu;
5859 pg_data_t *self = data;
5860 static DEFINE_SPINLOCK(lock);
5861
5862 spin_lock(&lock);
5863
5864#ifdef CONFIG_NUMA
5865 memset(node_load, 0, sizeof(node_load));
5866#endif
5867
5868
5869
5870
5871
5872 if (self && !node_online(self->node_id)) {
5873 build_zonelists(self);
5874 } else {
5875 for_each_online_node(nid) {
5876 pg_data_t *pgdat = NODE_DATA(nid);
5877
5878 build_zonelists(pgdat);
5879 }
5880
5881#ifdef CONFIG_HAVE_MEMORYLESS_NODES
5882
5883
5884
5885
5886
5887
5888
5889
5890 for_each_online_cpu(cpu)
5891 set_cpu_numa_mem(cpu, local_memory_node(cpu_to_node(cpu)));
5892#endif
5893 }
5894
5895 spin_unlock(&lock);
5896}
5897
5898static noinline void __init
5899build_all_zonelists_init(void)
5900{
5901 int cpu;
5902
5903 __build_all_zonelists(NULL);
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918 for_each_possible_cpu(cpu)
5919 setup_pageset(&per_cpu(boot_pageset, cpu), 0);
5920
5921 mminit_verify_zonelist();
5922 cpuset_init_current_mems_allowed();
5923}
5924
5925
5926
5927
5928
5929
5930
5931void __ref build_all_zonelists(pg_data_t *pgdat)
5932{
5933 unsigned long vm_total_pages;
5934
5935 if (system_state == SYSTEM_BOOTING) {
5936 build_all_zonelists_init();
5937 } else {
5938 __build_all_zonelists(pgdat);
5939
5940 }
5941
5942 vm_total_pages = nr_free_zone_pages(gfp_zone(GFP_HIGHUSER_MOVABLE));
5943
5944
5945
5946
5947
5948
5949
5950 if (vm_total_pages < (pageblock_nr_pages * MIGRATE_TYPES))
5951 page_group_by_mobility_disabled = 1;
5952 else
5953 page_group_by_mobility_disabled = 0;
5954
5955 pr_info("Built %u zonelists, mobility grouping %s. Total pages: %ld\n",
5956 nr_online_nodes,
5957 page_group_by_mobility_disabled ? "off" : "on",
5958 vm_total_pages);
5959#ifdef CONFIG_NUMA
5960 pr_info("Policy zone: %s\n", zone_names[policy_zone]);
5961#endif
5962}
5963
5964
5965static bool __meminit
5966overlap_memmap_init(unsigned long zone, unsigned long *pfn)
5967{
5968 static struct memblock_region *r;
5969
5970 if (mirrored_kernelcore && zone == ZONE_MOVABLE) {
5971 if (!r || *pfn >= memblock_region_memory_end_pfn(r)) {
5972 for_each_memblock(memory, r) {
5973 if (*pfn < memblock_region_memory_end_pfn(r))
5974 break;
5975 }
5976 }
5977 if (*pfn >= memblock_region_memory_base_pfn(r) &&
5978 memblock_is_mirror(r)) {
5979 *pfn = memblock_region_memory_end_pfn(r);
5980 return true;
5981 }
5982 }
5983 return false;
5984}
5985
5986
5987
5988
5989
5990
5991void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
5992 unsigned long start_pfn, enum meminit_context context,
5993 struct vmem_altmap *altmap)
5994{
5995 unsigned long pfn, end_pfn = start_pfn + size;
5996 struct page *page;
5997
5998 if (highest_memmap_pfn < end_pfn - 1)
5999 highest_memmap_pfn = end_pfn - 1;
6000
6001#ifdef CONFIG_ZONE_DEVICE
6002
6003
6004
6005
6006
6007
6008
6009 if (zone == ZONE_DEVICE) {
6010 if (!altmap)
6011 return;
6012
6013 if (start_pfn == altmap->base_pfn)
6014 start_pfn += altmap->reserve;
6015 end_pfn = altmap->base_pfn + vmem_altmap_offset(altmap);
6016 }
6017#endif
6018
6019 for (pfn = start_pfn; pfn < end_pfn; ) {
6020
6021
6022
6023
6024 if (context == MEMINIT_EARLY) {
6025 if (overlap_memmap_init(zone, &pfn))
6026 continue;
6027 if (defer_init(nid, pfn, end_pfn))
6028 break;
6029 }
6030
6031 page = pfn_to_page(pfn);
6032 __init_single_page(page, pfn, zone, nid);
6033 if (context == MEMINIT_HOTPLUG)
6034 __SetPageReserved(page);
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048 if (!(pfn & (pageblock_nr_pages - 1))) {
6049 set_pageblock_migratetype(page, MIGRATE_MOVABLE);
6050 cond_resched();
6051 }
6052 pfn++;
6053 }
6054}
6055
6056#ifdef CONFIG_ZONE_DEVICE
6057void __ref memmap_init_zone_device(struct zone *zone,
6058 unsigned long start_pfn,
6059 unsigned long nr_pages,
6060 struct dev_pagemap *pgmap)
6061{
6062 unsigned long pfn, end_pfn = start_pfn + nr_pages;
6063 struct pglist_data *pgdat = zone->zone_pgdat;
6064 struct vmem_altmap *altmap = pgmap_altmap(pgmap);
6065 unsigned long zone_idx = zone_idx(zone);
6066 unsigned long start = jiffies;
6067 int nid = pgdat->node_id;
6068
6069 if (WARN_ON_ONCE(!pgmap || zone_idx(zone) != ZONE_DEVICE))
6070 return;
6071
6072
6073
6074
6075
6076
6077 if (altmap) {
6078 start_pfn = altmap->base_pfn + vmem_altmap_offset(altmap);
6079 nr_pages = end_pfn - start_pfn;
6080 }
6081
6082 for (pfn = start_pfn; pfn < end_pfn; pfn++) {
6083 struct page *page = pfn_to_page(pfn);
6084
6085 __init_single_page(page, pfn, zone_idx, nid);
6086
6087
6088
6089
6090
6091
6092
6093
6094 __SetPageReserved(page);
6095
6096
6097
6098
6099
6100
6101 page->pgmap = pgmap;
6102 page->zone_device_data = NULL;
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119 if (!(pfn & (pageblock_nr_pages - 1))) {
6120 set_pageblock_migratetype(page, MIGRATE_MOVABLE);
6121 cond_resched();
6122 }
6123 }
6124
6125 pr_info("%s initialised %lu pages in %ums\n", __func__,
6126 nr_pages, jiffies_to_msecs(jiffies - start));
6127}
6128
6129#endif
6130static void __meminit zone_init_free_lists(struct zone *zone)
6131{
6132 unsigned int order, t;
6133 for_each_migratetype_order(order, t) {
6134 INIT_LIST_HEAD(&zone->free_area[order].free_list[t]);
6135 zone->free_area[order].nr_free = 0;
6136 }
6137}
6138
6139void __meminit __weak memmap_init(unsigned long size, int nid,
6140 unsigned long zone,
6141 unsigned long range_start_pfn)
6142{
6143 unsigned long start_pfn, end_pfn;
6144 unsigned long range_end_pfn = range_start_pfn + size;
6145 int i;
6146
6147 for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn, NULL) {
6148 start_pfn = clamp(start_pfn, range_start_pfn, range_end_pfn);
6149 end_pfn = clamp(end_pfn, range_start_pfn, range_end_pfn);
6150
6151 if (end_pfn > start_pfn) {
6152 size = end_pfn - start_pfn;
6153 memmap_init_zone(size, nid, zone, start_pfn,
6154 MEMINIT_EARLY, NULL);
6155 }
6156 }
6157}
6158
6159static int zone_batchsize(struct zone *zone)
6160{
6161#ifdef CONFIG_MMU
6162 int batch;
6163
6164
6165
6166
6167
6168 batch = zone_managed_pages(zone) / 1024;
6169
6170 if (batch * PAGE_SIZE > 1024 * 1024)
6171 batch = (1024 * 1024) / PAGE_SIZE;
6172 batch /= 4;
6173 if (batch < 1)
6174 batch = 1;
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186 batch = rounddown_pow_of_two(batch + batch/2) - 1;
6187
6188 return batch;
6189
6190#else
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204 return 0;
6205#endif
6206}
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221static void pageset_update(struct per_cpu_pages *pcp, unsigned long high,
6222 unsigned long batch)
6223{
6224
6225 pcp->batch = 1;
6226 smp_wmb();
6227
6228
6229 pcp->high = high;
6230 smp_wmb();
6231
6232 pcp->batch = batch;
6233}
6234
6235
6236static void pageset_set_batch(struct per_cpu_pageset *p, unsigned long batch)
6237{
6238 pageset_update(&p->pcp, 6 * batch, max(1UL, 1 * batch));
6239}
6240
6241static void pageset_init(struct per_cpu_pageset *p)
6242{
6243 struct per_cpu_pages *pcp;
6244 int migratetype;
6245
6246 memset(p, 0, sizeof(*p));
6247
6248 pcp = &p->pcp;
6249 for (migratetype = 0; migratetype < MIGRATE_PCPTYPES; migratetype++)
6250 INIT_LIST_HEAD(&pcp->lists[migratetype]);
6251}
6252
6253static void setup_pageset(struct per_cpu_pageset *p, unsigned long batch)
6254{
6255 pageset_init(p);
6256 pageset_set_batch(p, batch);
6257}
6258
6259
6260
6261
6262
6263static void pageset_set_high(struct per_cpu_pageset *p,
6264 unsigned long high)
6265{
6266 unsigned long batch = max(1UL, high / 4);
6267 if ((high / 4) > (PAGE_SHIFT * 8))
6268 batch = PAGE_SHIFT * 8;
6269
6270 pageset_update(&p->pcp, high, batch);
6271}
6272
6273static void pageset_set_high_and_batch(struct zone *zone,
6274 struct per_cpu_pageset *pcp)
6275{
6276 if (percpu_pagelist_fraction)
6277 pageset_set_high(pcp,
6278 (zone_managed_pages(zone) /
6279 percpu_pagelist_fraction));
6280 else
6281 pageset_set_batch(pcp, zone_batchsize(zone));
6282}
6283
6284static void __meminit zone_pageset_init(struct zone *zone, int cpu)
6285{
6286 struct per_cpu_pageset *pcp = per_cpu_ptr(zone->pageset, cpu);
6287
6288 pageset_init(pcp);
6289 pageset_set_high_and_batch(zone, pcp);
6290}
6291
6292void __meminit setup_zone_pageset(struct zone *zone)
6293{
6294 int cpu;
6295 zone->pageset = alloc_percpu(struct per_cpu_pageset);
6296 for_each_possible_cpu(cpu)
6297 zone_pageset_init(zone, cpu);
6298}
6299
6300
6301
6302
6303
6304void __init setup_per_cpu_pageset(void)
6305{
6306 struct pglist_data *pgdat;
6307 struct zone *zone;
6308 int __maybe_unused cpu;
6309
6310 for_each_populated_zone(zone)
6311 setup_zone_pageset(zone);
6312
6313#ifdef CONFIG_NUMA
6314
6315
6316
6317
6318
6319
6320 for_each_possible_cpu(cpu) {
6321 struct per_cpu_pageset *pcp = &per_cpu(boot_pageset, cpu);
6322 memset(pcp->vm_numa_stat_diff, 0,
6323 sizeof(pcp->vm_numa_stat_diff));
6324 }
6325#endif
6326
6327 for_each_online_pgdat(pgdat)
6328 pgdat->per_cpu_nodestats =
6329 alloc_percpu(struct per_cpu_nodestat);
6330}
6331
6332static __meminit void zone_pcp_init(struct zone *zone)
6333{
6334
6335
6336
6337
6338
6339 zone->pageset = &boot_pageset;
6340
6341 if (populated_zone(zone))
6342 printk(KERN_DEBUG " %s zone: %lu pages, LIFO batch:%u\n",
6343 zone->name, zone->present_pages,
6344 zone_batchsize(zone));
6345}
6346
6347void __meminit init_currently_empty_zone(struct zone *zone,
6348 unsigned long zone_start_pfn,
6349 unsigned long size)
6350{
6351 struct pglist_data *pgdat = zone->zone_pgdat;
6352 int zone_idx = zone_idx(zone) + 1;
6353
6354 if (zone_idx > pgdat->nr_zones)
6355 pgdat->nr_zones = zone_idx;
6356
6357 zone->zone_start_pfn = zone_start_pfn;
6358
6359 mminit_dprintk(MMINIT_TRACE, "memmap_init",
6360 "Initialising map node %d zone %lu pfns %lu -> %lu\n",
6361 pgdat->node_id,
6362 (unsigned long)zone_idx(zone),
6363 zone_start_pfn, (zone_start_pfn + size));
6364
6365 zone_init_free_lists(zone);
6366 zone->initialized = 1;
6367}
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380void __init get_pfn_range_for_nid(unsigned int nid,
6381 unsigned long *start_pfn, unsigned long *end_pfn)
6382{
6383 unsigned long this_start_pfn, this_end_pfn;
6384 int i;
6385
6386 *start_pfn = -1UL;
6387 *end_pfn = 0;
6388
6389 for_each_mem_pfn_range(i, nid, &this_start_pfn, &this_end_pfn, NULL) {
6390 *start_pfn = min(*start_pfn, this_start_pfn);
6391 *end_pfn = max(*end_pfn, this_end_pfn);
6392 }
6393
6394 if (*start_pfn == -1UL)
6395 *start_pfn = 0;
6396}
6397
6398
6399
6400
6401
6402
6403static void __init find_usable_zone_for_movable(void)
6404{
6405 int zone_index;
6406 for (zone_index = MAX_NR_ZONES - 1; zone_index >= 0; zone_index--) {
6407 if (zone_index == ZONE_MOVABLE)
6408 continue;
6409
6410 if (arch_zone_highest_possible_pfn[zone_index] >
6411 arch_zone_lowest_possible_pfn[zone_index])
6412 break;
6413 }
6414
6415 VM_BUG_ON(zone_index == -1);
6416 movable_zone = zone_index;
6417}
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429static void __init adjust_zone_range_for_zone_movable(int nid,
6430 unsigned long zone_type,
6431 unsigned long node_start_pfn,
6432 unsigned long node_end_pfn,
6433 unsigned long *zone_start_pfn,
6434 unsigned long *zone_end_pfn)
6435{
6436
6437 if (zone_movable_pfn[nid]) {
6438
6439 if (zone_type == ZONE_MOVABLE) {
6440 *zone_start_pfn = zone_movable_pfn[nid];
6441 *zone_end_pfn = min(node_end_pfn,
6442 arch_zone_highest_possible_pfn[movable_zone]);
6443
6444
6445 } else if (!mirrored_kernelcore &&
6446 *zone_start_pfn < zone_movable_pfn[nid] &&
6447 *zone_end_pfn > zone_movable_pfn[nid]) {
6448 *zone_end_pfn = zone_movable_pfn[nid];
6449
6450
6451 } else if (*zone_start_pfn >= zone_movable_pfn[nid])
6452 *zone_start_pfn = *zone_end_pfn;
6453 }
6454}
6455
6456
6457
6458
6459
6460static unsigned long __init zone_spanned_pages_in_node(int nid,
6461 unsigned long zone_type,
6462 unsigned long node_start_pfn,
6463 unsigned long node_end_pfn,
6464 unsigned long *zone_start_pfn,
6465 unsigned long *zone_end_pfn)
6466{
6467 unsigned long zone_low = arch_zone_lowest_possible_pfn[zone_type];
6468 unsigned long zone_high = arch_zone_highest_possible_pfn[zone_type];
6469
6470 if (!node_start_pfn && !node_end_pfn)
6471 return 0;
6472
6473
6474 *zone_start_pfn = clamp(node_start_pfn, zone_low, zone_high);
6475 *zone_end_pfn = clamp(node_end_pfn, zone_low, zone_high);
6476 adjust_zone_range_for_zone_movable(nid, zone_type,
6477 node_start_pfn, node_end_pfn,
6478 zone_start_pfn, zone_end_pfn);
6479
6480
6481 if (*zone_end_pfn < node_start_pfn || *zone_start_pfn > node_end_pfn)
6482 return 0;
6483
6484
6485 *zone_end_pfn = min(*zone_end_pfn, node_end_pfn);
6486 *zone_start_pfn = max(*zone_start_pfn, node_start_pfn);
6487
6488
6489 return *zone_end_pfn - *zone_start_pfn;
6490}
6491
6492
6493
6494
6495
6496unsigned long __init __absent_pages_in_range(int nid,
6497 unsigned long range_start_pfn,
6498 unsigned long range_end_pfn)
6499{
6500 unsigned long nr_absent = range_end_pfn - range_start_pfn;
6501 unsigned long start_pfn, end_pfn;
6502 int i;
6503
6504 for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn, NULL) {
6505 start_pfn = clamp(start_pfn, range_start_pfn, range_end_pfn);
6506 end_pfn = clamp(end_pfn, range_start_pfn, range_end_pfn);
6507 nr_absent -= end_pfn - start_pfn;
6508 }
6509 return nr_absent;
6510}
6511
6512
6513
6514
6515
6516
6517
6518
6519unsigned long __init absent_pages_in_range(unsigned long start_pfn,
6520 unsigned long end_pfn)
6521{
6522 return __absent_pages_in_range(MAX_NUMNODES, start_pfn, end_pfn);
6523}
6524
6525
6526static unsigned long __init zone_absent_pages_in_node(int nid,
6527 unsigned long zone_type,
6528 unsigned long node_start_pfn,
6529 unsigned long node_end_pfn)
6530{
6531 unsigned long zone_low = arch_zone_lowest_possible_pfn[zone_type];
6532 unsigned long zone_high = arch_zone_highest_possible_pfn[zone_type];
6533 unsigned long zone_start_pfn, zone_end_pfn;
6534 unsigned long nr_absent;
6535
6536
6537 if (!node_start_pfn && !node_end_pfn)
6538 return 0;
6539
6540 zone_start_pfn = clamp(node_start_pfn, zone_low, zone_high);
6541 zone_end_pfn = clamp(node_end_pfn, zone_low, zone_high);
6542
6543 adjust_zone_range_for_zone_movable(nid, zone_type,
6544 node_start_pfn, node_end_pfn,
6545 &zone_start_pfn, &zone_end_pfn);
6546 nr_absent = __absent_pages_in_range(nid, zone_start_pfn, zone_end_pfn);
6547
6548
6549
6550
6551
6552
6553 if (mirrored_kernelcore && zone_movable_pfn[nid]) {
6554 unsigned long start_pfn, end_pfn;
6555 struct memblock_region *r;
6556
6557 for_each_memblock(memory, r) {
6558 start_pfn = clamp(memblock_region_memory_base_pfn(r),
6559 zone_start_pfn, zone_end_pfn);
6560 end_pfn = clamp(memblock_region_memory_end_pfn(r),
6561 zone_start_pfn, zone_end_pfn);
6562
6563 if (zone_type == ZONE_MOVABLE &&
6564 memblock_is_mirror(r))
6565 nr_absent += end_pfn - start_pfn;
6566
6567 if (zone_type == ZONE_NORMAL &&
6568 !memblock_is_mirror(r))
6569 nr_absent += end_pfn - start_pfn;
6570 }
6571 }
6572
6573 return nr_absent;
6574}
6575
6576static void __init calculate_node_totalpages(struct pglist_data *pgdat,
6577 unsigned long node_start_pfn,
6578 unsigned long node_end_pfn)
6579{
6580 unsigned long realtotalpages = 0, totalpages = 0;
6581 enum zone_type i;
6582
6583 for (i = 0; i < MAX_NR_ZONES; i++) {
6584 struct zone *zone = pgdat->node_zones + i;
6585 unsigned long zone_start_pfn, zone_end_pfn;
6586 unsigned long spanned, absent;
6587 unsigned long size, real_size;
6588
6589 spanned = zone_spanned_pages_in_node(pgdat->node_id, i,
6590 node_start_pfn,
6591 node_end_pfn,
6592 &zone_start_pfn,
6593 &zone_end_pfn);
6594 absent = zone_absent_pages_in_node(pgdat->node_id, i,
6595 node_start_pfn,
6596 node_end_pfn);
6597
6598 size = spanned;
6599 real_size = size - absent;
6600
6601 if (size)
6602 zone->zone_start_pfn = zone_start_pfn;
6603 else
6604 zone->zone_start_pfn = 0;
6605 zone->spanned_pages = size;
6606 zone->present_pages = real_size;
6607
6608 totalpages += size;
6609 realtotalpages += real_size;
6610 }
6611
6612 pgdat->node_spanned_pages = totalpages;
6613 pgdat->node_present_pages = realtotalpages;
6614 printk(KERN_DEBUG "On node %d totalpages: %lu\n", pgdat->node_id,
6615 realtotalpages);
6616}
6617
6618#ifndef CONFIG_SPARSEMEM
6619
6620
6621
6622
6623
6624
6625
6626static unsigned long __init usemap_size(unsigned long zone_start_pfn, unsigned long zonesize)
6627{
6628 unsigned long usemapsize;
6629
6630 zonesize += zone_start_pfn & (pageblock_nr_pages-1);
6631 usemapsize = roundup(zonesize, pageblock_nr_pages);
6632 usemapsize = usemapsize >> pageblock_order;
6633 usemapsize *= NR_PAGEBLOCK_BITS;
6634 usemapsize = roundup(usemapsize, 8 * sizeof(unsigned long));
6635
6636 return usemapsize / 8;
6637}
6638
6639static void __ref setup_usemap(struct pglist_data *pgdat,
6640 struct zone *zone,
6641 unsigned long zone_start_pfn,
6642 unsigned long zonesize)
6643{
6644 unsigned long usemapsize = usemap_size(zone_start_pfn, zonesize);
6645 zone->pageblock_flags = NULL;
6646 if (usemapsize) {
6647 zone->pageblock_flags =
6648 memblock_alloc_node(usemapsize, SMP_CACHE_BYTES,
6649 pgdat->node_id);
6650 if (!zone->pageblock_flags)
6651 panic("Failed to allocate %ld bytes for zone %s pageblock flags on node %d\n",
6652 usemapsize, zone->name, pgdat->node_id);
6653 }
6654}
6655#else
6656static inline void setup_usemap(struct pglist_data *pgdat, struct zone *zone,
6657 unsigned long zone_start_pfn, unsigned long zonesize) {}
6658#endif
6659
6660#ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
6661
6662
6663void __init set_pageblock_order(void)
6664{
6665 unsigned int order;
6666
6667
6668 if (pageblock_order)
6669 return;
6670
6671 if (HPAGE_SHIFT > PAGE_SHIFT)
6672 order = HUGETLB_PAGE_ORDER;
6673 else
6674 order = MAX_ORDER - 1;
6675
6676
6677
6678
6679
6680
6681 pageblock_order = order;
6682}
6683#else
6684
6685
6686
6687
6688
6689
6690
6691void __init set_pageblock_order(void)
6692{
6693}
6694
6695#endif
6696
6697static unsigned long __init calc_memmap_size(unsigned long spanned_pages,
6698 unsigned long present_pages)
6699{
6700 unsigned long pages = spanned_pages;
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710 if (spanned_pages > present_pages + (present_pages >> 4) &&
6711 IS_ENABLED(CONFIG_SPARSEMEM))
6712 pages = present_pages;
6713
6714 return PAGE_ALIGN(pages * sizeof(struct page)) >> PAGE_SHIFT;
6715}
6716
6717#ifdef CONFIG_TRANSPARENT_HUGEPAGE
6718static void pgdat_init_split_queue(struct pglist_data *pgdat)
6719{
6720 struct deferred_split *ds_queue = &pgdat->deferred_split_queue;
6721
6722 spin_lock_init(&ds_queue->split_queue_lock);
6723 INIT_LIST_HEAD(&ds_queue->split_queue);
6724 ds_queue->split_queue_len = 0;
6725}
6726#else
6727static void pgdat_init_split_queue(struct pglist_data *pgdat) {}
6728#endif
6729
6730#ifdef CONFIG_COMPACTION
6731static void pgdat_init_kcompactd(struct pglist_data *pgdat)
6732{
6733 init_waitqueue_head(&pgdat->kcompactd_wait);
6734}
6735#else
6736static void pgdat_init_kcompactd(struct pglist_data *pgdat) {}
6737#endif
6738
6739static void __meminit pgdat_init_internals(struct pglist_data *pgdat)
6740{
6741 pgdat_resize_init(pgdat);
6742
6743 pgdat_init_split_queue(pgdat);
6744 pgdat_init_kcompactd(pgdat);
6745
6746 init_waitqueue_head(&pgdat->kswapd_wait);
6747 init_waitqueue_head(&pgdat->pfmemalloc_wait);
6748
6749 pgdat_page_ext_init(pgdat);
6750 spin_lock_init(&pgdat->lru_lock);
6751 lruvec_init(&pgdat->__lruvec);
6752}
6753
6754static void __meminit zone_init_internals(struct zone *zone, enum zone_type idx, int nid,
6755 unsigned long remaining_pages)
6756{
6757 atomic_long_set(&zone->managed_pages, remaining_pages);
6758 zone_set_nid(zone, nid);
6759 zone->name = zone_names[idx];
6760 zone->zone_pgdat = NODE_DATA(nid);
6761 spin_lock_init(&zone->lock);
6762 zone_seqlock_init(zone);
6763 zone_pcp_init(zone);
6764}
6765
6766
6767
6768
6769
6770
6771
6772
6773#ifdef CONFIG_MEMORY_HOTPLUG
6774void __ref free_area_init_core_hotplug(int nid)
6775{
6776 enum zone_type z;
6777 pg_data_t *pgdat = NODE_DATA(nid);
6778
6779 pgdat_init_internals(pgdat);
6780 for (z = 0; z < MAX_NR_ZONES; z++)
6781 zone_init_internals(&pgdat->node_zones[z], z, nid, 0);
6782}
6783#endif
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794static void __init free_area_init_core(struct pglist_data *pgdat)
6795{
6796 enum zone_type j;
6797 int nid = pgdat->node_id;
6798
6799 pgdat_init_internals(pgdat);
6800 pgdat->per_cpu_nodestats = &boot_nodestats;
6801
6802 for (j = 0; j < MAX_NR_ZONES; j++) {
6803 struct zone *zone = pgdat->node_zones + j;
6804 unsigned long size, freesize, memmap_pages;
6805 unsigned long zone_start_pfn = zone->zone_start_pfn;
6806
6807 size = zone->spanned_pages;
6808 freesize = zone->present_pages;
6809
6810
6811
6812
6813
6814
6815 memmap_pages = calc_memmap_size(size, freesize);
6816 if (!is_highmem_idx(j)) {
6817 if (freesize >= memmap_pages) {
6818 freesize -= memmap_pages;
6819 if (memmap_pages)
6820 printk(KERN_DEBUG
6821 " %s zone: %lu pages used for memmap\n",
6822 zone_names[j], memmap_pages);
6823 } else
6824 pr_warn(" %s zone: %lu pages exceeds freesize %lu\n",
6825 zone_names[j], memmap_pages, freesize);
6826 }
6827
6828
6829 if (j == 0 && freesize > dma_reserve) {
6830 freesize -= dma_reserve;
6831 printk(KERN_DEBUG " %s zone: %lu pages reserved\n",
6832 zone_names[0], dma_reserve);
6833 }
6834
6835 if (!is_highmem_idx(j))
6836 nr_kernel_pages += freesize;
6837
6838 else if (nr_kernel_pages > memmap_pages * 2)
6839 nr_kernel_pages -= memmap_pages;
6840 nr_all_pages += freesize;
6841
6842
6843
6844
6845
6846
6847 zone_init_internals(zone, j, nid, freesize);
6848
6849 if (!size)
6850 continue;
6851
6852 set_pageblock_order();
6853 setup_usemap(pgdat, zone, zone_start_pfn, size);
6854 init_currently_empty_zone(zone, zone_start_pfn, size);
6855 memmap_init(size, nid, j, zone_start_pfn);
6856 }
6857}
6858
6859#ifdef CONFIG_FLAT_NODE_MEM_MAP
6860static void __ref alloc_node_mem_map(struct pglist_data *pgdat)
6861{
6862 unsigned long __maybe_unused start = 0;
6863 unsigned long __maybe_unused offset = 0;
6864
6865
6866 if (!pgdat->node_spanned_pages)
6867 return;
6868
6869 start = pgdat->node_start_pfn & ~(MAX_ORDER_NR_PAGES - 1);
6870 offset = pgdat->node_start_pfn - start;
6871
6872 if (!pgdat->node_mem_map) {
6873 unsigned long size, end;
6874 struct page *map;
6875
6876
6877
6878
6879
6880
6881 end = pgdat_end_pfn(pgdat);
6882 end = ALIGN(end, MAX_ORDER_NR_PAGES);
6883 size = (end - start) * sizeof(struct page);
6884 map = memblock_alloc_node(size, SMP_CACHE_BYTES,
6885 pgdat->node_id);
6886 if (!map)
6887 panic("Failed to allocate %ld bytes for node %d memory map\n",
6888 size, pgdat->node_id);
6889 pgdat->node_mem_map = map + offset;
6890 }
6891 pr_debug("%s: node %d, pgdat %08lx, node_mem_map %08lx\n",
6892 __func__, pgdat->node_id, (unsigned long)pgdat,
6893 (unsigned long)pgdat->node_mem_map);
6894#ifndef CONFIG_NEED_MULTIPLE_NODES
6895
6896
6897
6898 if (pgdat == NODE_DATA(0)) {
6899 mem_map = NODE_DATA(0)->node_mem_map;
6900 if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
6901 mem_map -= offset;
6902 }
6903#endif
6904}
6905#else
6906static void __ref alloc_node_mem_map(struct pglist_data *pgdat) { }
6907#endif
6908
6909#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
6910static inline void pgdat_set_deferred_range(pg_data_t *pgdat)
6911{
6912 pgdat->first_deferred_pfn = ULONG_MAX;
6913}
6914#else
6915static inline void pgdat_set_deferred_range(pg_data_t *pgdat) {}
6916#endif
6917
6918static void __init free_area_init_node(int nid)
6919{
6920 pg_data_t *pgdat = NODE_DATA(nid);
6921 unsigned long start_pfn = 0;
6922 unsigned long end_pfn = 0;
6923
6924
6925 WARN_ON(pgdat->nr_zones || pgdat->kswapd_highest_zoneidx);
6926
6927 get_pfn_range_for_nid(nid, &start_pfn, &end_pfn);
6928
6929 pgdat->node_id = nid;
6930 pgdat->node_start_pfn = start_pfn;
6931 pgdat->per_cpu_nodestats = NULL;
6932
6933 pr_info("Initmem setup node %d [mem %#018Lx-%#018Lx]\n", nid,
6934 (u64)start_pfn << PAGE_SHIFT,
6935 end_pfn ? ((u64)end_pfn << PAGE_SHIFT) - 1 : 0);
6936 calculate_node_totalpages(pgdat, start_pfn, end_pfn);
6937
6938 alloc_node_mem_map(pgdat);
6939 pgdat_set_deferred_range(pgdat);
6940
6941 free_area_init_core(pgdat);
6942}
6943
6944void __init free_area_init_memoryless_node(int nid)
6945{
6946 free_area_init_node(nid);
6947}
6948
6949#if !defined(CONFIG_FLAT_NODE_MEM_MAP)
6950
6951
6952
6953
6954static u64 __init init_unavailable_range(unsigned long spfn, unsigned long epfn)
6955{
6956 unsigned long pfn;
6957 u64 pgcnt = 0;
6958
6959 for (pfn = spfn; pfn < epfn; pfn++) {
6960 if (!pfn_valid(ALIGN_DOWN(pfn, pageblock_nr_pages))) {
6961 pfn = ALIGN_DOWN(pfn, pageblock_nr_pages)
6962 + pageblock_nr_pages - 1;
6963 continue;
6964 }
6965
6966
6967
6968
6969
6970 __init_single_page(pfn_to_page(pfn), pfn, 0, 0);
6971 __SetPageReserved(pfn_to_page(pfn));
6972 pgcnt++;
6973 }
6974
6975 return pgcnt;
6976}
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991static void __init init_unavailable_mem(void)
6992{
6993 phys_addr_t start, end;
6994 u64 i, pgcnt;
6995 phys_addr_t next = 0;
6996
6997
6998
6999
7000 pgcnt = 0;
7001 for_each_mem_range(i, &memblock.memory, NULL,
7002 NUMA_NO_NODE, MEMBLOCK_NONE, &start, &end, NULL) {
7003 if (next < start)
7004 pgcnt += init_unavailable_range(PFN_DOWN(next),
7005 PFN_UP(start));
7006 next = end;
7007 }
7008
7009
7010
7011
7012
7013
7014
7015
7016 pgcnt += init_unavailable_range(PFN_DOWN(next),
7017 round_up(max_pfn, PAGES_PER_SECTION));
7018
7019
7020
7021
7022
7023 if (pgcnt)
7024 pr_info("Zeroed struct page in unavailable ranges: %lld pages", pgcnt);
7025}
7026#else
7027static inline void __init init_unavailable_mem(void)
7028{
7029}
7030#endif
7031
7032#if MAX_NUMNODES > 1
7033
7034
7035
7036void __init setup_nr_node_ids(void)
7037{
7038 unsigned int highest;
7039
7040 highest = find_last_bit(node_possible_map.bits, MAX_NUMNODES);
7041 nr_node_ids = highest + 1;
7042}
7043#endif
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064unsigned long __init node_map_pfn_alignment(void)
7065{
7066 unsigned long accl_mask = 0, last_end = 0;
7067 unsigned long start, end, mask;
7068 int last_nid = NUMA_NO_NODE;
7069 int i, nid;
7070
7071 for_each_mem_pfn_range(i, MAX_NUMNODES, &start, &end, &nid) {
7072 if (!start || last_nid < 0 || last_nid == nid) {
7073 last_nid = nid;
7074 last_end = end;
7075 continue;
7076 }
7077
7078
7079
7080
7081
7082
7083 mask = ~((1 << __ffs(start)) - 1);
7084 while (mask && last_end <= (start & (mask << 1)))
7085 mask <<= 1;
7086
7087
7088 accl_mask |= mask;
7089 }
7090
7091
7092 return ~accl_mask + 1;
7093}
7094
7095
7096
7097
7098
7099
7100
7101unsigned long __init find_min_pfn_with_active_regions(void)
7102{
7103 return PHYS_PFN(memblock_start_of_DRAM());
7104}
7105
7106
7107
7108
7109
7110
7111static unsigned long __init early_calculate_totalpages(void)
7112{
7113 unsigned long totalpages = 0;
7114 unsigned long start_pfn, end_pfn;
7115 int i, nid;
7116
7117 for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) {
7118 unsigned long pages = end_pfn - start_pfn;
7119
7120 totalpages += pages;
7121 if (pages)
7122 node_set_state(nid, N_MEMORY);
7123 }
7124 return totalpages;
7125}
7126
7127
7128
7129
7130
7131
7132
7133static void __init find_zone_movable_pfns_for_nodes(void)
7134{
7135 int i, nid;
7136 unsigned long usable_startpfn;
7137 unsigned long kernelcore_node, kernelcore_remaining;
7138
7139 nodemask_t saved_node_state = node_states[N_MEMORY];
7140 unsigned long totalpages = early_calculate_totalpages();
7141 int usable_nodes = nodes_weight(node_states[N_MEMORY]);
7142 struct memblock_region *r;
7143
7144
7145 find_usable_zone_for_movable();
7146
7147
7148
7149
7150
7151 if (movable_node_is_enabled()) {
7152 for_each_memblock(memory, r) {
7153 if (!memblock_is_hotpluggable(r))
7154 continue;
7155
7156 nid = memblock_get_region_node(r);
7157
7158 usable_startpfn = PFN_DOWN(r->base);
7159 zone_movable_pfn[nid] = zone_movable_pfn[nid] ?
7160 min(usable_startpfn, zone_movable_pfn[nid]) :
7161 usable_startpfn;
7162 }
7163
7164 goto out2;
7165 }
7166
7167
7168
7169
7170 if (mirrored_kernelcore) {
7171 bool mem_below_4gb_not_mirrored = false;
7172
7173 for_each_memblock(memory, r) {
7174 if (memblock_is_mirror(r))
7175 continue;
7176
7177 nid = memblock_get_region_node(r);
7178
7179 usable_startpfn = memblock_region_memory_base_pfn(r);
7180
7181 if (usable_startpfn < 0x100000) {
7182 mem_below_4gb_not_mirrored = true;
7183 continue;
7184 }
7185
7186 zone_movable_pfn[nid] = zone_movable_pfn[nid] ?
7187 min(usable_startpfn, zone_movable_pfn[nid]) :
7188 usable_startpfn;
7189 }
7190
7191 if (mem_below_4gb_not_mirrored)
7192 pr_warn("This configuration results in unmirrored kernel memory.\n");
7193
7194 goto out2;
7195 }
7196
7197
7198
7199
7200
7201 if (required_kernelcore_percent)
7202 required_kernelcore = (totalpages * 100 * required_kernelcore_percent) /
7203 10000UL;
7204 if (required_movablecore_percent)
7205 required_movablecore = (totalpages * 100 * required_movablecore_percent) /
7206 10000UL;
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216 if (required_movablecore) {
7217 unsigned long corepages;
7218
7219
7220
7221
7222
7223 required_movablecore =
7224 roundup(required_movablecore, MAX_ORDER_NR_PAGES);
7225 required_movablecore = min(totalpages, required_movablecore);
7226 corepages = totalpages - required_movablecore;
7227
7228 required_kernelcore = max(required_kernelcore, corepages);
7229 }
7230
7231
7232
7233
7234
7235 if (!required_kernelcore || required_kernelcore >= totalpages)
7236 goto out;
7237
7238
7239 usable_startpfn = arch_zone_lowest_possible_pfn[movable_zone];
7240
7241restart:
7242
7243 kernelcore_node = required_kernelcore / usable_nodes;
7244 for_each_node_state(nid, N_MEMORY) {
7245 unsigned long start_pfn, end_pfn;
7246
7247
7248
7249
7250
7251
7252 if (required_kernelcore < kernelcore_node)
7253 kernelcore_node = required_kernelcore / usable_nodes;
7254
7255
7256
7257
7258
7259
7260 kernelcore_remaining = kernelcore_node;
7261
7262
7263 for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn, NULL) {
7264 unsigned long size_pages;
7265
7266 start_pfn = max(start_pfn, zone_movable_pfn[nid]);
7267 if (start_pfn >= end_pfn)
7268 continue;
7269
7270
7271 if (start_pfn < usable_startpfn) {
7272 unsigned long kernel_pages;
7273 kernel_pages = min(end_pfn, usable_startpfn)
7274 - start_pfn;
7275
7276 kernelcore_remaining -= min(kernel_pages,
7277 kernelcore_remaining);
7278 required_kernelcore -= min(kernel_pages,
7279 required_kernelcore);
7280
7281
7282 if (end_pfn <= usable_startpfn) {
7283
7284
7285
7286
7287
7288
7289
7290 zone_movable_pfn[nid] = end_pfn;
7291 continue;
7292 }
7293 start_pfn = usable_startpfn;
7294 }
7295
7296
7297
7298
7299
7300
7301 size_pages = end_pfn - start_pfn;
7302 if (size_pages > kernelcore_remaining)
7303 size_pages = kernelcore_remaining;
7304 zone_movable_pfn[nid] = start_pfn + size_pages;
7305
7306
7307
7308
7309
7310
7311 required_kernelcore -= min(required_kernelcore,
7312 size_pages);
7313 kernelcore_remaining -= size_pages;
7314 if (!kernelcore_remaining)
7315 break;
7316 }
7317 }
7318
7319
7320
7321
7322
7323
7324
7325 usable_nodes--;
7326 if (usable_nodes && required_kernelcore > usable_nodes)
7327 goto restart;
7328
7329out2:
7330
7331 for (nid = 0; nid < MAX_NUMNODES; nid++)
7332 zone_movable_pfn[nid] =
7333 roundup(zone_movable_pfn[nid], MAX_ORDER_NR_PAGES);
7334
7335out:
7336
7337 node_states[N_MEMORY] = saved_node_state;
7338}
7339
7340
7341static void check_for_memory(pg_data_t *pgdat, int nid)
7342{
7343 enum zone_type zone_type;
7344
7345 for (zone_type = 0; zone_type <= ZONE_MOVABLE - 1; zone_type++) {
7346 struct zone *zone = &pgdat->node_zones[zone_type];
7347 if (populated_zone(zone)) {
7348 if (IS_ENABLED(CONFIG_HIGHMEM))
7349 node_set_state(nid, N_HIGH_MEMORY);
7350 if (zone_type <= ZONE_NORMAL)
7351 node_set_state(nid, N_NORMAL_MEMORY);
7352 break;
7353 }
7354 }
7355}
7356
7357
7358
7359
7360
7361bool __weak arch_has_descending_max_zone_pfns(void)
7362{
7363 return false;
7364}
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379void __init free_area_init(unsigned long *max_zone_pfn)
7380{
7381 unsigned long start_pfn, end_pfn;
7382 int i, nid, zone;
7383 bool descending;
7384
7385
7386 memset(arch_zone_lowest_possible_pfn, 0,
7387 sizeof(arch_zone_lowest_possible_pfn));
7388 memset(arch_zone_highest_possible_pfn, 0,
7389 sizeof(arch_zone_highest_possible_pfn));
7390
7391 start_pfn = find_min_pfn_with_active_regions();
7392 descending = arch_has_descending_max_zone_pfns();
7393
7394 for (i = 0; i < MAX_NR_ZONES; i++) {
7395 if (descending)
7396 zone = MAX_NR_ZONES - i - 1;
7397 else
7398 zone = i;
7399
7400 if (zone == ZONE_MOVABLE)
7401 continue;
7402
7403 end_pfn = max(max_zone_pfn[zone], start_pfn);
7404 arch_zone_lowest_possible_pfn[zone] = start_pfn;
7405 arch_zone_highest_possible_pfn[zone] = end_pfn;
7406
7407 start_pfn = end_pfn;
7408 }
7409
7410
7411 memset(zone_movable_pfn, 0, sizeof(zone_movable_pfn));
7412 find_zone_movable_pfns_for_nodes();
7413
7414
7415 pr_info("Zone ranges:\n");
7416 for (i = 0; i < MAX_NR_ZONES; i++) {
7417 if (i == ZONE_MOVABLE)
7418 continue;
7419 pr_info(" %-8s ", zone_names[i]);
7420 if (arch_zone_lowest_possible_pfn[i] ==
7421 arch_zone_highest_possible_pfn[i])
7422 pr_cont("empty\n");
7423 else
7424 pr_cont("[mem %#018Lx-%#018Lx]\n",
7425 (u64)arch_zone_lowest_possible_pfn[i]
7426 << PAGE_SHIFT,
7427 ((u64)arch_zone_highest_possible_pfn[i]
7428 << PAGE_SHIFT) - 1);
7429 }
7430
7431
7432 pr_info("Movable zone start for each node\n");
7433 for (i = 0; i < MAX_NUMNODES; i++) {
7434 if (zone_movable_pfn[i])
7435 pr_info(" Node %d: %#018Lx\n", i,
7436 (u64)zone_movable_pfn[i] << PAGE_SHIFT);
7437 }
7438
7439
7440
7441
7442
7443
7444 pr_info("Early memory node ranges\n");
7445 for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) {
7446 pr_info(" node %3d: [mem %#018Lx-%#018Lx]\n", nid,
7447 (u64)start_pfn << PAGE_SHIFT,
7448 ((u64)end_pfn << PAGE_SHIFT) - 1);
7449 subsection_map_init(start_pfn, end_pfn - start_pfn);
7450 }
7451
7452
7453 mminit_verify_pageflags_layout();
7454 setup_nr_node_ids();
7455 init_unavailable_mem();
7456 for_each_online_node(nid) {
7457 pg_data_t *pgdat = NODE_DATA(nid);
7458 free_area_init_node(nid);
7459
7460
7461 if (pgdat->node_present_pages)
7462 node_set_state(nid, N_MEMORY);
7463 check_for_memory(pgdat, nid);
7464 }
7465}
7466
7467static int __init cmdline_parse_core(char *p, unsigned long *core,
7468 unsigned long *percent)
7469{
7470 unsigned long long coremem;
7471 char *endptr;
7472
7473 if (!p)
7474 return -EINVAL;
7475
7476
7477 coremem = simple_strtoull(p, &endptr, 0);
7478 if (*endptr == '%') {
7479
7480 WARN_ON(coremem > 100);
7481
7482 *percent = coremem;
7483 } else {
7484 coremem = memparse(p, &p);
7485
7486 WARN_ON((coremem >> PAGE_SHIFT) > ULONG_MAX);
7487
7488 *core = coremem >> PAGE_SHIFT;
7489 *percent = 0UL;
7490 }
7491 return 0;
7492}
7493
7494
7495
7496
7497
7498static int __init cmdline_parse_kernelcore(char *p)
7499{
7500
7501 if (parse_option_str(p, "mirror")) {
7502 mirrored_kernelcore = true;
7503 return 0;
7504 }
7505
7506 return cmdline_parse_core(p, &required_kernelcore,
7507 &required_kernelcore_percent);
7508}
7509
7510
7511
7512
7513
7514static int __init cmdline_parse_movablecore(char *p)
7515{
7516 return cmdline_parse_core(p, &required_movablecore,
7517 &required_movablecore_percent);
7518}
7519
7520early_param("kernelcore", cmdline_parse_kernelcore);
7521early_param("movablecore", cmdline_parse_movablecore);
7522
7523void adjust_managed_page_count(struct page *page, long count)
7524{
7525 atomic_long_add(count, &page_zone(page)->managed_pages);
7526 totalram_pages_add(count);
7527#ifdef CONFIG_HIGHMEM
7528 if (PageHighMem(page))
7529 totalhigh_pages_add(count);
7530#endif
7531}
7532EXPORT_SYMBOL(adjust_managed_page_count);
7533
7534unsigned long free_reserved_area(void *start, void *end, int poison, const char *s)
7535{
7536 void *pos;
7537 unsigned long pages = 0;
7538
7539 start = (void *)PAGE_ALIGN((unsigned long)start);
7540 end = (void *)((unsigned long)end & PAGE_MASK);
7541 for (pos = start; pos < end; pos += PAGE_SIZE, pages++) {
7542 struct page *page = virt_to_page(pos);
7543 void *direct_map_addr;
7544
7545
7546
7547
7548
7549
7550
7551
7552 direct_map_addr = page_address(page);
7553 if ((unsigned int)poison <= 0xFF)
7554 memset(direct_map_addr, poison, PAGE_SIZE);
7555
7556 free_reserved_page(page);
7557 }
7558
7559 if (pages && s)
7560 pr_info("Freeing %s memory: %ldK\n",
7561 s, pages << (PAGE_SHIFT - 10));
7562
7563 return pages;
7564}
7565
7566#ifdef CONFIG_HIGHMEM
7567void free_highmem_page(struct page *page)
7568{
7569 __free_reserved_page(page);
7570 totalram_pages_inc();
7571 atomic_long_inc(&page_zone(page)->managed_pages);
7572 totalhigh_pages_inc();
7573}
7574#endif
7575
7576
7577void __init mem_init_print_info(const char *str)
7578{
7579 unsigned long physpages, codesize, datasize, rosize, bss_size;
7580 unsigned long init_code_size, init_data_size;
7581
7582 physpages = get_num_physpages();
7583 codesize = _etext - _stext;
7584 datasize = _edata - _sdata;
7585 rosize = __end_rodata - __start_rodata;
7586 bss_size = __bss_stop - __bss_start;
7587 init_data_size = __init_end - __init_begin;
7588 init_code_size = _einittext - _sinittext;
7589
7590
7591
7592
7593
7594
7595
7596
7597#define adj_init_size(start, end, size, pos, adj) \
7598 do { \
7599 if (start <= pos && pos < end && size > adj) \
7600 size -= adj; \
7601 } while (0)
7602
7603 adj_init_size(__init_begin, __init_end, init_data_size,
7604 _sinittext, init_code_size);
7605 adj_init_size(_stext, _etext, codesize, _sinittext, init_code_size);
7606 adj_init_size(_sdata, _edata, datasize, __init_begin, init_data_size);
7607 adj_init_size(_stext, _etext, codesize, __start_rodata, rosize);
7608 adj_init_size(_sdata, _edata, datasize, __start_rodata, rosize);
7609
7610#undef adj_init_size
7611
7612 pr_info("Memory: %luK/%luK available (%luK kernel code, %luK rwdata, %luK rodata, %luK init, %luK bss, %luK reserved, %luK cma-reserved"
7613#ifdef CONFIG_HIGHMEM
7614 ", %luK highmem"
7615#endif
7616 "%s%s)\n",
7617 nr_free_pages() << (PAGE_SHIFT - 10),
7618 physpages << (PAGE_SHIFT - 10),
7619 codesize >> 10, datasize >> 10, rosize >> 10,
7620 (init_data_size + init_code_size) >> 10, bss_size >> 10,
7621 (physpages - totalram_pages() - totalcma_pages) << (PAGE_SHIFT - 10),
7622 totalcma_pages << (PAGE_SHIFT - 10),
7623#ifdef CONFIG_HIGHMEM
7624 totalhigh_pages() << (PAGE_SHIFT - 10),
7625#endif
7626 str ? ", " : "", str ? str : "");
7627}
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640void __init set_dma_reserve(unsigned long new_dma_reserve)
7641{
7642 dma_reserve = new_dma_reserve;
7643}
7644
7645static int page_alloc_cpu_dead(unsigned int cpu)
7646{
7647
7648 lru_add_drain_cpu(cpu);
7649 drain_pages(cpu);
7650
7651
7652
7653
7654
7655
7656
7657 vm_events_fold_cpu(cpu);
7658
7659
7660
7661
7662
7663
7664
7665
7666 cpu_vm_stats_fold(cpu);
7667 return 0;
7668}
7669
7670#ifdef CONFIG_NUMA
7671int hashdist = HASHDIST_DEFAULT;
7672
7673static int __init set_hashdist(char *str)
7674{
7675 if (!str)
7676 return 0;
7677 hashdist = simple_strtoul(str, &str, 0);
7678 return 1;
7679}
7680__setup("hashdist=", set_hashdist);
7681#endif
7682
7683void __init page_alloc_init(void)
7684{
7685 int ret;
7686
7687#ifdef CONFIG_NUMA
7688 if (num_node_state(N_MEMORY) == 1)
7689 hashdist = 0;
7690#endif
7691
7692 ret = cpuhp_setup_state_nocalls(CPUHP_PAGE_ALLOC_DEAD,
7693 "mm/page_alloc:dead", NULL,
7694 page_alloc_cpu_dead);
7695 WARN_ON(ret < 0);
7696}
7697
7698
7699
7700
7701
7702static void calculate_totalreserve_pages(void)
7703{
7704 struct pglist_data *pgdat;
7705 unsigned long reserve_pages = 0;
7706 enum zone_type i, j;
7707
7708 for_each_online_pgdat(pgdat) {
7709
7710 pgdat->totalreserve_pages = 0;
7711
7712 for (i = 0; i < MAX_NR_ZONES; i++) {
7713 struct zone *zone = pgdat->node_zones + i;
7714 long max = 0;
7715 unsigned long managed_pages = zone_managed_pages(zone);
7716
7717
7718 for (j = i; j < MAX_NR_ZONES; j++) {
7719 if (zone->lowmem_reserve[j] > max)
7720 max = zone->lowmem_reserve[j];
7721 }
7722
7723
7724 max += high_wmark_pages(zone);
7725
7726 if (max > managed_pages)
7727 max = managed_pages;
7728
7729 pgdat->totalreserve_pages += max;
7730
7731 reserve_pages += max;
7732 }
7733 }
7734 totalreserve_pages = reserve_pages;
7735}
7736
7737
7738
7739
7740
7741
7742
7743static void setup_per_zone_lowmem_reserve(void)
7744{
7745 struct pglist_data *pgdat;
7746 enum zone_type j, idx;
7747
7748 for_each_online_pgdat(pgdat) {
7749 for (j = 0; j < MAX_NR_ZONES; j++) {
7750 struct zone *zone = pgdat->node_zones + j;
7751 unsigned long managed_pages = zone_managed_pages(zone);
7752
7753 zone->lowmem_reserve[j] = 0;
7754
7755 idx = j;
7756 while (idx) {
7757 struct zone *lower_zone;
7758
7759 idx--;
7760 lower_zone = pgdat->node_zones + idx;
7761
7762 if (!sysctl_lowmem_reserve_ratio[idx] ||
7763 !zone_managed_pages(lower_zone)) {
7764 lower_zone->lowmem_reserve[j] = 0;
7765 continue;
7766 } else {
7767 lower_zone->lowmem_reserve[j] =
7768 managed_pages / sysctl_lowmem_reserve_ratio[idx];
7769 }
7770 managed_pages += zone_managed_pages(lower_zone);
7771 }
7772 }
7773 }
7774
7775
7776 calculate_totalreserve_pages();
7777}
7778
7779static void __setup_per_zone_wmarks(void)
7780{
7781 unsigned long pages_min = min_free_kbytes >> (PAGE_SHIFT - 10);
7782 unsigned long lowmem_pages = 0;
7783 struct zone *zone;
7784 unsigned long flags;
7785
7786
7787 for_each_zone(zone) {
7788 if (!is_highmem(zone))
7789 lowmem_pages += zone_managed_pages(zone);
7790 }
7791
7792 for_each_zone(zone) {
7793 u64 tmp;
7794
7795 spin_lock_irqsave(&zone->lock, flags);
7796 tmp = (u64)pages_min * zone_managed_pages(zone);
7797 do_div(tmp, lowmem_pages);
7798 if (is_highmem(zone)) {
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808 unsigned long min_pages;
7809
7810 min_pages = zone_managed_pages(zone) / 1024;
7811 min_pages = clamp(min_pages, SWAP_CLUSTER_MAX, 128UL);
7812 zone->_watermark[WMARK_MIN] = min_pages;
7813 } else {
7814
7815
7816
7817
7818 zone->_watermark[WMARK_MIN] = tmp;
7819 }
7820
7821
7822
7823
7824
7825
7826 tmp = max_t(u64, tmp >> 2,
7827 mult_frac(zone_managed_pages(zone),
7828 watermark_scale_factor, 10000));
7829
7830 zone->watermark_boost = 0;
7831 zone->_watermark[WMARK_LOW] = min_wmark_pages(zone) + tmp;
7832 zone->_watermark[WMARK_HIGH] = min_wmark_pages(zone) + tmp * 2;
7833
7834 spin_unlock_irqrestore(&zone->lock, flags);
7835 }
7836
7837
7838 calculate_totalreserve_pages();
7839}
7840
7841
7842
7843
7844
7845
7846
7847
7848void setup_per_zone_wmarks(void)
7849{
7850 static DEFINE_SPINLOCK(lock);
7851
7852 spin_lock(&lock);
7853 __setup_per_zone_wmarks();
7854 spin_unlock(&lock);
7855}
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881int __meminit init_per_zone_wmark_min(void)
7882{
7883 unsigned long lowmem_kbytes;
7884 int new_min_free_kbytes;
7885
7886 lowmem_kbytes = nr_free_buffer_pages() * (PAGE_SIZE >> 10);
7887 new_min_free_kbytes = int_sqrt(lowmem_kbytes * 16);
7888
7889 if (new_min_free_kbytes > user_min_free_kbytes) {
7890 min_free_kbytes = new_min_free_kbytes;
7891 if (min_free_kbytes < 128)
7892 min_free_kbytes = 128;
7893 if (min_free_kbytes > 262144)
7894 min_free_kbytes = 262144;
7895 } else {
7896 pr_warn("min_free_kbytes is not updated to %d because user defined value %d is preferred\n",
7897 new_min_free_kbytes, user_min_free_kbytes);
7898 }
7899 setup_per_zone_wmarks();
7900 refresh_zone_stat_thresholds();
7901 setup_per_zone_lowmem_reserve();
7902
7903#ifdef CONFIG_NUMA
7904 setup_min_unmapped_ratio();
7905 setup_min_slab_ratio();
7906#endif
7907
7908 khugepaged_min_free_kbytes_update();
7909
7910 return 0;
7911}
7912postcore_initcall(init_per_zone_wmark_min)
7913
7914
7915
7916
7917
7918
7919int min_free_kbytes_sysctl_handler(struct ctl_table *table, int write,
7920 void *buffer, size_t *length, loff_t *ppos)
7921{
7922 int rc;
7923
7924 rc = proc_dointvec_minmax(table, write, buffer, length, ppos);
7925 if (rc)
7926 return rc;
7927
7928 if (write) {
7929 user_min_free_kbytes = min_free_kbytes;
7930 setup_per_zone_wmarks();
7931 }
7932 return 0;
7933}
7934
7935int watermark_scale_factor_sysctl_handler(struct ctl_table *table, int write,
7936 void *buffer, size_t *length, loff_t *ppos)
7937{
7938 int rc;
7939
7940 rc = proc_dointvec_minmax(table, write, buffer, length, ppos);
7941 if (rc)
7942 return rc;
7943
7944 if (write)
7945 setup_per_zone_wmarks();
7946
7947 return 0;
7948}
7949
7950#ifdef CONFIG_NUMA
7951static void setup_min_unmapped_ratio(void)
7952{
7953 pg_data_t *pgdat;
7954 struct zone *zone;
7955
7956 for_each_online_pgdat(pgdat)
7957 pgdat->min_unmapped_pages = 0;
7958
7959 for_each_zone(zone)
7960 zone->zone_pgdat->min_unmapped_pages += (zone_managed_pages(zone) *
7961 sysctl_min_unmapped_ratio) / 100;
7962}
7963
7964
7965int sysctl_min_unmapped_ratio_sysctl_handler(struct ctl_table *table, int write,
7966 void *buffer, size_t *length, loff_t *ppos)
7967{
7968 int rc;
7969
7970 rc = proc_dointvec_minmax(table, write, buffer, length, ppos);
7971 if (rc)
7972 return rc;
7973
7974 setup_min_unmapped_ratio();
7975
7976 return 0;
7977}
7978
7979static void setup_min_slab_ratio(void)
7980{
7981 pg_data_t *pgdat;
7982 struct zone *zone;
7983
7984 for_each_online_pgdat(pgdat)
7985 pgdat->min_slab_pages = 0;
7986
7987 for_each_zone(zone)
7988 zone->zone_pgdat->min_slab_pages += (zone_managed_pages(zone) *
7989 sysctl_min_slab_ratio) / 100;
7990}
7991
7992int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *table, int write,
7993 void *buffer, size_t *length, loff_t *ppos)
7994{
7995 int rc;
7996
7997 rc = proc_dointvec_minmax(table, write, buffer, length, ppos);
7998 if (rc)
7999 return rc;
8000
8001 setup_min_slab_ratio();
8002
8003 return 0;
8004}
8005#endif
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *table, int write,
8017 void *buffer, size_t *length, loff_t *ppos)
8018{
8019 int i;
8020
8021 proc_dointvec_minmax(table, write, buffer, length, ppos);
8022
8023 for (i = 0; i < MAX_NR_ZONES; i++) {
8024 if (sysctl_lowmem_reserve_ratio[i] < 1)
8025 sysctl_lowmem_reserve_ratio[i] = 0;
8026 }
8027
8028 setup_per_zone_lowmem_reserve();
8029 return 0;
8030}
8031
8032static void __zone_pcp_update(struct zone *zone)
8033{
8034 unsigned int cpu;
8035
8036 for_each_possible_cpu(cpu)
8037 pageset_set_high_and_batch(zone,
8038 per_cpu_ptr(zone->pageset, cpu));
8039}
8040
8041
8042
8043
8044
8045
8046int percpu_pagelist_fraction_sysctl_handler(struct ctl_table *table, int write,
8047 void *buffer, size_t *length, loff_t *ppos)
8048{
8049 struct zone *zone;
8050 int old_percpu_pagelist_fraction;
8051 int ret;
8052
8053 mutex_lock(&pcp_batch_high_lock);
8054 old_percpu_pagelist_fraction = percpu_pagelist_fraction;
8055
8056 ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
8057 if (!write || ret < 0)
8058 goto out;
8059
8060
8061 if (percpu_pagelist_fraction &&
8062 percpu_pagelist_fraction < MIN_PERCPU_PAGELIST_FRACTION) {
8063 percpu_pagelist_fraction = old_percpu_pagelist_fraction;
8064 ret = -EINVAL;
8065 goto out;
8066 }
8067
8068
8069 if (percpu_pagelist_fraction == old_percpu_pagelist_fraction)
8070 goto out;
8071
8072 for_each_populated_zone(zone)
8073 __zone_pcp_update(zone);
8074out:
8075 mutex_unlock(&pcp_batch_high_lock);
8076 return ret;
8077}
8078
8079#ifndef __HAVE_ARCH_RESERVED_KERNEL_PAGES
8080
8081
8082
8083
8084static unsigned long __init arch_reserved_kernel_pages(void)
8085{
8086 return 0;
8087}
8088#endif
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099#if __BITS_PER_LONG > 32
8100#define ADAPT_SCALE_BASE (64ul << 30)
8101#define ADAPT_SCALE_SHIFT 2
8102#define ADAPT_SCALE_NPAGES (ADAPT_SCALE_BASE >> PAGE_SHIFT)
8103#endif
8104
8105
8106
8107
8108
8109
8110
8111void *__init alloc_large_system_hash(const char *tablename,
8112 unsigned long bucketsize,
8113 unsigned long numentries,
8114 int scale,
8115 int flags,
8116 unsigned int *_hash_shift,
8117 unsigned int *_hash_mask,
8118 unsigned long low_limit,
8119 unsigned long high_limit)
8120{
8121 unsigned long long max = high_limit;
8122 unsigned long log2qty, size;
8123 void *table = NULL;
8124 gfp_t gfp_flags;
8125 bool virt;
8126
8127
8128 if (!numentries) {
8129
8130 numentries = nr_kernel_pages;
8131 numentries -= arch_reserved_kernel_pages();
8132
8133
8134 if (PAGE_SHIFT < 20)
8135 numentries = round_up(numentries, (1<<20)/PAGE_SIZE);
8136
8137#if __BITS_PER_LONG > 32
8138 if (!high_limit) {
8139 unsigned long adapt;
8140
8141 for (adapt = ADAPT_SCALE_NPAGES; adapt < numentries;
8142 adapt <<= ADAPT_SCALE_SHIFT)
8143 scale++;
8144 }
8145#endif
8146
8147
8148 if (scale > PAGE_SHIFT)
8149 numentries >>= (scale - PAGE_SHIFT);
8150 else
8151 numentries <<= (PAGE_SHIFT - scale);
8152
8153
8154 if (unlikely(flags & HASH_SMALL)) {
8155
8156 WARN_ON(!(flags & HASH_EARLY));
8157 if (!(numentries >> *_hash_shift)) {
8158 numentries = 1UL << *_hash_shift;
8159 BUG_ON(!numentries);
8160 }
8161 } else if (unlikely((numentries * bucketsize) < PAGE_SIZE))
8162 numentries = PAGE_SIZE / bucketsize;
8163 }
8164 numentries = roundup_pow_of_two(numentries);
8165
8166
8167 if (max == 0) {
8168 max = ((unsigned long long)nr_all_pages << PAGE_SHIFT) >> 4;
8169 do_div(max, bucketsize);
8170 }
8171 max = min(max, 0x80000000ULL);
8172
8173 if (numentries < low_limit)
8174 numentries = low_limit;
8175 if (numentries > max)
8176 numentries = max;
8177
8178 log2qty = ilog2(numentries);
8179
8180 gfp_flags = (flags & HASH_ZERO) ? GFP_ATOMIC | __GFP_ZERO : GFP_ATOMIC;
8181 do {
8182 virt = false;
8183 size = bucketsize << log2qty;
8184 if (flags & HASH_EARLY) {
8185 if (flags & HASH_ZERO)
8186 table = memblock_alloc(size, SMP_CACHE_BYTES);
8187 else
8188 table = memblock_alloc_raw(size,
8189 SMP_CACHE_BYTES);
8190 } else if (get_order(size) >= MAX_ORDER || hashdist) {
8191 table = __vmalloc(size, gfp_flags);
8192 virt = true;
8193 } else {
8194
8195
8196
8197
8198
8199 table = alloc_pages_exact(size, gfp_flags);
8200 kmemleak_alloc(table, size, 1, gfp_flags);
8201 }
8202 } while (!table && size > PAGE_SIZE && --log2qty);
8203
8204 if (!table)
8205 panic("Failed to allocate %s hash table\n", tablename);
8206
8207 pr_info("%s hash table entries: %ld (order: %d, %lu bytes, %s)\n",
8208 tablename, 1UL << log2qty, ilog2(size) - PAGE_SHIFT, size,
8209 virt ? "vmalloc" : "linear");
8210
8211 if (_hash_shift)
8212 *_hash_shift = log2qty;
8213 if (_hash_mask)
8214 *_hash_mask = (1 << log2qty) - 1;
8215
8216 return table;
8217}
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232struct page *has_unmovable_pages(struct zone *zone, struct page *page,
8233 int migratetype, int flags)
8234{
8235 unsigned long iter = 0;
8236 unsigned long pfn = page_to_pfn(page);
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246 if (is_migrate_cma_page(page)) {
8247
8248
8249
8250
8251
8252 if (is_migrate_cma(migratetype))
8253 return NULL;
8254
8255 return page;
8256 }
8257
8258 for (; iter < pageblock_nr_pages; iter++) {
8259 if (!pfn_valid_within(pfn + iter))
8260 continue;
8261
8262 page = pfn_to_page(pfn + iter);
8263
8264 if (PageReserved(page))
8265 return page;
8266
8267
8268
8269
8270
8271
8272 if (zone_idx(zone) == ZONE_MOVABLE)
8273 continue;
8274
8275
8276
8277
8278
8279
8280
8281 if (PageHuge(page) || PageTransCompound(page)) {
8282 struct page *head = compound_head(page);
8283 unsigned int skip_pages;
8284
8285 if (PageHuge(page)) {
8286 if (!hugepage_migration_supported(page_hstate(head)))
8287 return page;
8288 } else if (!PageLRU(head) && !__PageMovable(head)) {
8289 return page;
8290 }
8291
8292 skip_pages = compound_nr(head) - (page - head);
8293 iter += skip_pages - 1;
8294 continue;
8295 }
8296
8297
8298
8299
8300
8301
8302
8303 if (!page_ref_count(page)) {
8304 if (PageBuddy(page))
8305 iter += (1 << page_order(page)) - 1;
8306 continue;
8307 }
8308
8309
8310
8311
8312
8313 if ((flags & MEMORY_OFFLINE) && PageHWPoison(page))
8314 continue;
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326 if ((flags & MEMORY_OFFLINE) && PageOffline(page))
8327 continue;
8328
8329 if (__PageMovable(page) || PageLRU(page))
8330 continue;
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345 return page;
8346 }
8347 return NULL;
8348}
8349
8350#ifdef CONFIG_CONTIG_ALLOC
8351static unsigned long pfn_max_align_down(unsigned long pfn)
8352{
8353 return pfn & ~(max_t(unsigned long, MAX_ORDER_NR_PAGES,
8354 pageblock_nr_pages) - 1);
8355}
8356
8357static unsigned long pfn_max_align_up(unsigned long pfn)
8358{
8359 return ALIGN(pfn, max_t(unsigned long, MAX_ORDER_NR_PAGES,
8360 pageblock_nr_pages));
8361}
8362
8363
8364static int __alloc_contig_migrate_range(struct compact_control *cc,
8365 unsigned long start, unsigned long end)
8366{
8367
8368 unsigned int nr_reclaimed;
8369 unsigned long pfn = start;
8370 unsigned int tries = 0;
8371 int ret = 0;
8372 struct migration_target_control mtc = {
8373 .nid = zone_to_nid(cc->zone),
8374 .gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL,
8375 };
8376
8377 migrate_prep();
8378
8379 while (pfn < end || !list_empty(&cc->migratepages)) {
8380 if (fatal_signal_pending(current)) {
8381 ret = -EINTR;
8382 break;
8383 }
8384
8385 if (list_empty(&cc->migratepages)) {
8386 cc->nr_migratepages = 0;
8387 pfn = isolate_migratepages_range(cc, pfn, end);
8388 if (!pfn) {
8389 ret = -EINTR;
8390 break;
8391 }
8392 tries = 0;
8393 } else if (++tries == 5) {
8394 ret = ret < 0 ? ret : -EBUSY;
8395 break;
8396 }
8397
8398 nr_reclaimed = reclaim_clean_pages_from_list(cc->zone,
8399 &cc->migratepages);
8400 cc->nr_migratepages -= nr_reclaimed;
8401
8402 ret = migrate_pages(&cc->migratepages, alloc_migration_target,
8403 NULL, (unsigned long)&mtc, cc->mode, MR_CONTIG_RANGE);
8404 }
8405 if (ret < 0) {
8406 putback_movable_pages(&cc->migratepages);
8407 return ret;
8408 }
8409 return 0;
8410}
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433int alloc_contig_range(unsigned long start, unsigned long end,
8434 unsigned migratetype, gfp_t gfp_mask)
8435{
8436 unsigned long outer_start, outer_end;
8437 unsigned int order;
8438 int ret = 0;
8439
8440 struct compact_control cc = {
8441 .nr_migratepages = 0,
8442 .order = -1,
8443 .zone = page_zone(pfn_to_page(start)),
8444 .mode = MIGRATE_SYNC,
8445 .ignore_skip_hint = true,
8446 .no_set_skip_hint = true,
8447 .gfp_mask = current_gfp_context(gfp_mask),
8448 .alloc_contig = true,
8449 };
8450 INIT_LIST_HEAD(&cc.migratepages);
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476 ret = start_isolate_page_range(pfn_max_align_down(start),
8477 pfn_max_align_up(end), migratetype, 0);
8478 if (ret < 0)
8479 return ret;
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491 ret = __alloc_contig_migrate_range(&cc, start, end);
8492 if (ret && ret != -EBUSY)
8493 goto done;
8494 ret =0;
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513 lru_add_drain_all();
8514
8515 order = 0;
8516 outer_start = start;
8517 while (!PageBuddy(pfn_to_page(outer_start))) {
8518 if (++order >= MAX_ORDER) {
8519 outer_start = start;
8520 break;
8521 }
8522 outer_start &= ~0UL << order;
8523 }
8524
8525 if (outer_start != start) {
8526 order = page_order(pfn_to_page(outer_start));
8527
8528
8529
8530
8531
8532
8533
8534 if (outer_start + (1UL << order) <= start)
8535 outer_start = start;
8536 }
8537
8538
8539 if (test_pages_isolated(outer_start, end, 0)) {
8540 pr_info_ratelimited("%s: [%lx, %lx) PFNs busy\n",
8541 __func__, outer_start, end);
8542 ret = -EBUSY;
8543 goto done;
8544 }
8545
8546
8547 outer_end = isolate_freepages_range(&cc, outer_start, end);
8548 if (!outer_end) {
8549 ret = -EBUSY;
8550 goto done;
8551 }
8552
8553
8554 if (start != outer_start)
8555 free_contig_range(outer_start, start - outer_start);
8556 if (end != outer_end)
8557 free_contig_range(end, outer_end - end);
8558
8559done:
8560 undo_isolate_page_range(pfn_max_align_down(start),
8561 pfn_max_align_up(end), migratetype);
8562 return ret;
8563}
8564EXPORT_SYMBOL(alloc_contig_range);
8565
8566static int __alloc_contig_pages(unsigned long start_pfn,
8567 unsigned long nr_pages, gfp_t gfp_mask)
8568{
8569 unsigned long end_pfn = start_pfn + nr_pages;
8570
8571 return alloc_contig_range(start_pfn, end_pfn, MIGRATE_MOVABLE,
8572 gfp_mask);
8573}
8574
8575static bool pfn_range_valid_contig(struct zone *z, unsigned long start_pfn,
8576 unsigned long nr_pages)
8577{
8578 unsigned long i, end_pfn = start_pfn + nr_pages;
8579 struct page *page;
8580
8581 for (i = start_pfn; i < end_pfn; i++) {
8582 page = pfn_to_online_page(i);
8583 if (!page)
8584 return false;
8585
8586 if (page_zone(page) != z)
8587 return false;
8588
8589 if (PageReserved(page))
8590 return false;
8591
8592 if (page_count(page) > 0)
8593 return false;
8594
8595 if (PageHuge(page))
8596 return false;
8597 }
8598 return true;
8599}
8600
8601static bool zone_spans_last_pfn(const struct zone *zone,
8602 unsigned long start_pfn, unsigned long nr_pages)
8603{
8604 unsigned long last_pfn = start_pfn + nr_pages - 1;
8605
8606 return zone_spans_pfn(zone, last_pfn);
8607}
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630struct page *alloc_contig_pages(unsigned long nr_pages, gfp_t gfp_mask,
8631 int nid, nodemask_t *nodemask)
8632{
8633 unsigned long ret, pfn, flags;
8634 struct zonelist *zonelist;
8635 struct zone *zone;
8636 struct zoneref *z;
8637
8638 zonelist = node_zonelist(nid, gfp_mask);
8639 for_each_zone_zonelist_nodemask(zone, z, zonelist,
8640 gfp_zone(gfp_mask), nodemask) {
8641 spin_lock_irqsave(&zone->lock, flags);
8642
8643 pfn = ALIGN(zone->zone_start_pfn, nr_pages);
8644 while (zone_spans_last_pfn(zone, pfn, nr_pages)) {
8645 if (pfn_range_valid_contig(zone, pfn, nr_pages)) {
8646
8647
8648
8649
8650
8651
8652
8653 spin_unlock_irqrestore(&zone->lock, flags);
8654 ret = __alloc_contig_pages(pfn, nr_pages,
8655 gfp_mask);
8656 if (!ret)
8657 return pfn_to_page(pfn);
8658 spin_lock_irqsave(&zone->lock, flags);
8659 }
8660 pfn += nr_pages;
8661 }
8662 spin_unlock_irqrestore(&zone->lock, flags);
8663 }
8664 return NULL;
8665}
8666#endif
8667
8668void free_contig_range(unsigned long pfn, unsigned int nr_pages)
8669{
8670 unsigned int count = 0;
8671
8672 for (; nr_pages--; pfn++) {
8673 struct page *page = pfn_to_page(pfn);
8674
8675 count += page_count(page) != 1;
8676 __free_page(page);
8677 }
8678 WARN(count != 0, "%d pages are still in use!\n", count);
8679}
8680EXPORT_SYMBOL(free_contig_range);
8681
8682
8683
8684
8685
8686void __meminit zone_pcp_update(struct zone *zone)
8687{
8688 mutex_lock(&pcp_batch_high_lock);
8689 __zone_pcp_update(zone);
8690 mutex_unlock(&pcp_batch_high_lock);
8691}
8692
8693void zone_pcp_reset(struct zone *zone)
8694{
8695 unsigned long flags;
8696 int cpu;
8697 struct per_cpu_pageset *pset;
8698
8699
8700 local_irq_save(flags);
8701 if (zone->pageset != &boot_pageset) {
8702 for_each_online_cpu(cpu) {
8703 pset = per_cpu_ptr(zone->pageset, cpu);
8704 drain_zonestat(zone, pset);
8705 }
8706 free_percpu(zone->pageset);
8707 zone->pageset = &boot_pageset;
8708 }
8709 local_irq_restore(flags);
8710}
8711
8712#ifdef CONFIG_MEMORY_HOTREMOVE
8713
8714
8715
8716
8717unsigned long
8718__offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
8719{
8720 struct page *page;
8721 struct zone *zone;
8722 unsigned int order;
8723 unsigned long pfn;
8724 unsigned long flags;
8725 unsigned long offlined_pages = 0;
8726
8727
8728 for (pfn = start_pfn; pfn < end_pfn; pfn++)
8729 if (pfn_valid(pfn))
8730 break;
8731 if (pfn == end_pfn)
8732 return offlined_pages;
8733
8734 offline_mem_sections(pfn, end_pfn);
8735 zone = page_zone(pfn_to_page(pfn));
8736 spin_lock_irqsave(&zone->lock, flags);
8737 pfn = start_pfn;
8738 while (pfn < end_pfn) {
8739 if (!pfn_valid(pfn)) {
8740 pfn++;
8741 continue;
8742 }
8743 page = pfn_to_page(pfn);
8744
8745
8746
8747
8748 if (unlikely(!PageBuddy(page) && PageHWPoison(page))) {
8749 pfn++;
8750 offlined_pages++;
8751 continue;
8752 }
8753
8754
8755
8756
8757 if (PageOffline(page)) {
8758 BUG_ON(page_count(page));
8759 BUG_ON(PageBuddy(page));
8760 pfn++;
8761 offlined_pages++;
8762 continue;
8763 }
8764
8765 BUG_ON(page_count(page));
8766 BUG_ON(!PageBuddy(page));
8767 order = page_order(page);
8768 offlined_pages += 1 << order;
8769 del_page_from_free_list(page, zone, order);
8770 pfn += (1 << order);
8771 }
8772 spin_unlock_irqrestore(&zone->lock, flags);
8773
8774 return offlined_pages;
8775}
8776#endif
8777
8778bool is_free_buddy_page(struct page *page)
8779{
8780 struct zone *zone = page_zone(page);
8781 unsigned long pfn = page_to_pfn(page);
8782 unsigned long flags;
8783 unsigned int order;
8784
8785 spin_lock_irqsave(&zone->lock, flags);
8786 for (order = 0; order < MAX_ORDER; order++) {
8787 struct page *page_head = page - (pfn & ((1 << order) - 1));
8788
8789 if (PageBuddy(page_head) && page_order(page_head) >= order)
8790 break;
8791 }
8792 spin_unlock_irqrestore(&zone->lock, flags);
8793
8794 return order < MAX_ORDER;
8795}
8796
8797#ifdef CONFIG_MEMORY_FAILURE
8798
8799
8800
8801
8802
8803bool set_hwpoison_free_buddy_page(struct page *page)
8804{
8805 struct zone *zone = page_zone(page);
8806 unsigned long pfn = page_to_pfn(page);
8807 unsigned long flags;
8808 unsigned int order;
8809 bool hwpoisoned = false;
8810
8811 spin_lock_irqsave(&zone->lock, flags);
8812 for (order = 0; order < MAX_ORDER; order++) {
8813 struct page *page_head = page - (pfn & ((1 << order) - 1));
8814
8815 if (PageBuddy(page_head) && page_order(page_head) >= order) {
8816 if (!TestSetPageHWPoison(page))
8817 hwpoisoned = true;
8818 break;
8819 }
8820 }
8821 spin_unlock_irqrestore(&zone->lock, flags);
8822
8823 return hwpoisoned;
8824}
8825#endif
8826