ionic: update documentation for XDP support
[sfrench/cifs-2.6.git] / mm / Kconfig
1 # SPDX-License-Identifier: GPL-2.0-only
2
3 menu "Memory Management options"
4
5 #
6 # For some reason microblaze and nios2 hard code SWAP=n.  Hopefully we can
7 # add proper SWAP support to them, in which case this can be remove.
8 #
9 config ARCH_NO_SWAP
10         bool
11
12 config ZPOOL
13         bool
14
15 menuconfig SWAP
16         bool "Support for paging of anonymous memory (swap)"
17         depends on MMU && BLOCK && !ARCH_NO_SWAP
18         default y
19         help
20           This option allows you to choose whether you want to have support
21           for so called swap devices or swap files in your kernel that are
22           used to provide more virtual memory than the actual RAM present
23           in your computer.  If unsure say Y.
24
25 config ZSWAP
26         bool "Compressed cache for swap pages"
27         depends on SWAP
28         select CRYPTO
29         select ZPOOL
30         help
31           A lightweight compressed cache for swap pages.  It takes
32           pages that are in the process of being swapped out and attempts to
33           compress them into a dynamically allocated RAM-based memory pool.
34           This can result in a significant I/O reduction on swap device and,
35           in the case where decompressing from RAM is faster than swap device
36           reads, can also improve workload performance.
37
38 config ZSWAP_DEFAULT_ON
39         bool "Enable the compressed cache for swap pages by default"
40         depends on ZSWAP
41         help
42           If selected, the compressed cache for swap pages will be enabled
43           at boot, otherwise it will be disabled.
44
45           The selection made here can be overridden by using the kernel
46           command line 'zswap.enabled=' option.
47
48 config ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON
49         bool "Invalidate zswap entries when pages are loaded"
50         depends on ZSWAP
51         help
52           If selected, exclusive loads for zswap will be enabled at boot,
53           otherwise it will be disabled.
54
55           If exclusive loads are enabled, when a page is loaded from zswap,
56           the zswap entry is invalidated at once, as opposed to leaving it
57           in zswap until the swap entry is freed.
58
59           This avoids having two copies of the same page in memory
60           (compressed and uncompressed) after faulting in a page from zswap.
61           The cost is that if the page was never dirtied and needs to be
62           swapped out again, it will be re-compressed.
63
64 config ZSWAP_SHRINKER_DEFAULT_ON
65         bool "Shrink the zswap pool on memory pressure"
66         depends on ZSWAP
67         default n
68         help
69           If selected, the zswap shrinker will be enabled, and the pages
70           stored in the zswap pool will become available for reclaim (i.e
71           written back to the backing swap device) on memory pressure.
72
73           This means that zswap writeback could happen even if the pool is
74           not yet full, or the cgroup zswap limit has not been reached,
75           reducing the chance that cold pages will reside in the zswap pool
76           and consume memory indefinitely.
77
78 choice
79         prompt "Default compressor"
80         depends on ZSWAP
81         default ZSWAP_COMPRESSOR_DEFAULT_LZO
82         help
83           Selects the default compression algorithm for the compressed cache
84           for swap pages.
85
86           For an overview what kind of performance can be expected from
87           a particular compression algorithm please refer to the benchmarks
88           available at the following LWN page:
89           https://lwn.net/Articles/751795/
90
91           If in doubt, select 'LZO'.
92
93           The selection made here can be overridden by using the kernel
94           command line 'zswap.compressor=' option.
95
96 config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
97         bool "Deflate"
98         select CRYPTO_DEFLATE
99         help
100           Use the Deflate algorithm as the default compression algorithm.
101
102 config ZSWAP_COMPRESSOR_DEFAULT_LZO
103         bool "LZO"
104         select CRYPTO_LZO
105         help
106           Use the LZO algorithm as the default compression algorithm.
107
108 config ZSWAP_COMPRESSOR_DEFAULT_842
109         bool "842"
110         select CRYPTO_842
111         help
112           Use the 842 algorithm as the default compression algorithm.
113
114 config ZSWAP_COMPRESSOR_DEFAULT_LZ4
115         bool "LZ4"
116         select CRYPTO_LZ4
117         help
118           Use the LZ4 algorithm as the default compression algorithm.
119
120 config ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
121         bool "LZ4HC"
122         select CRYPTO_LZ4HC
123         help
124           Use the LZ4HC algorithm as the default compression algorithm.
125
126 config ZSWAP_COMPRESSOR_DEFAULT_ZSTD
127         bool "zstd"
128         select CRYPTO_ZSTD
129         help
130           Use the zstd algorithm as the default compression algorithm.
131 endchoice
132
133 config ZSWAP_COMPRESSOR_DEFAULT
134        string
135        depends on ZSWAP
136        default "deflate" if ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
137        default "lzo" if ZSWAP_COMPRESSOR_DEFAULT_LZO
138        default "842" if ZSWAP_COMPRESSOR_DEFAULT_842
139        default "lz4" if ZSWAP_COMPRESSOR_DEFAULT_LZ4
140        default "lz4hc" if ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
141        default "zstd" if ZSWAP_COMPRESSOR_DEFAULT_ZSTD
142        default ""
143
144 choice
145         prompt "Default allocator"
146         depends on ZSWAP
147         default ZSWAP_ZPOOL_DEFAULT_ZSMALLOC if MMU
148         default ZSWAP_ZPOOL_DEFAULT_ZBUD
149         help
150           Selects the default allocator for the compressed cache for
151           swap pages.
152           The default is 'zbud' for compatibility, however please do
153           read the description of each of the allocators below before
154           making a right choice.
155
156           The selection made here can be overridden by using the kernel
157           command line 'zswap.zpool=' option.
158
159 config ZSWAP_ZPOOL_DEFAULT_ZBUD
160         bool "zbud"
161         select ZBUD
162         help
163           Use the zbud allocator as the default allocator.
164
165 config ZSWAP_ZPOOL_DEFAULT_Z3FOLD
166         bool "z3fold"
167         select Z3FOLD
168         help
169           Use the z3fold allocator as the default allocator.
170
171 config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
172         bool "zsmalloc"
173         select ZSMALLOC
174         help
175           Use the zsmalloc allocator as the default allocator.
176 endchoice
177
178 config ZSWAP_ZPOOL_DEFAULT
179        string
180        depends on ZSWAP
181        default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD
182        default "z3fold" if ZSWAP_ZPOOL_DEFAULT_Z3FOLD
183        default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
184        default ""
185
186 config ZBUD
187         tristate "2:1 compression allocator (zbud)"
188         depends on ZSWAP
189         help
190           A special purpose allocator for storing compressed pages.
191           It is designed to store up to two compressed pages per physical
192           page.  While this design limits storage density, it has simple and
193           deterministic reclaim properties that make it preferable to a higher
194           density approach when reclaim will be used.
195
196 config Z3FOLD
197         tristate "3:1 compression allocator (z3fold)"
198         depends on ZSWAP
199         help
200           A special purpose allocator for storing compressed pages.
201           It is designed to store up to three compressed pages per physical
202           page. It is a ZBUD derivative so the simplicity and determinism are
203           still there.
204
205 config ZSMALLOC
206         tristate
207         prompt "N:1 compression allocator (zsmalloc)" if ZSWAP
208         depends on MMU
209         help
210           zsmalloc is a slab-based memory allocator designed to store
211           pages of various compression levels efficiently. It achieves
212           the highest storage density with the least amount of fragmentation.
213
214 config ZSMALLOC_STAT
215         bool "Export zsmalloc statistics"
216         depends on ZSMALLOC
217         select DEBUG_FS
218         help
219           This option enables code in the zsmalloc to collect various
220           statistics about what's happening in zsmalloc and exports that
221           information to userspace via debugfs.
222           If unsure, say N.
223
224 config ZSMALLOC_CHAIN_SIZE
225         int "Maximum number of physical pages per-zspage"
226         default 8
227         range 4 16
228         depends on ZSMALLOC
229         help
230           This option sets the upper limit on the number of physical pages
231           that a zmalloc page (zspage) can consist of. The optimal zspage
232           chain size is calculated for each size class during the
233           initialization of the pool.
234
235           Changing this option can alter the characteristics of size classes,
236           such as the number of pages per zspage and the number of objects
237           per zspage. This can also result in different configurations of
238           the pool, as zsmalloc merges size classes with similar
239           characteristics.
240
241           For more information, see zsmalloc documentation.
242
243 menu "Slab allocator options"
244
245 config SLUB
246         def_bool y
247
248 config SLUB_TINY
249         bool "Configure for minimal memory footprint"
250         depends on EXPERT
251         select SLAB_MERGE_DEFAULT
252         help
253            Configures the slab allocator in a way to achieve minimal memory
254            footprint, sacrificing scalability, debugging and other features.
255            This is intended only for the smallest system that had used the
256            SLOB allocator and is not recommended for systems with more than
257            16MB RAM.
258
259            If unsure, say N.
260
261 config SLAB_MERGE_DEFAULT
262         bool "Allow slab caches to be merged"
263         default y
264         help
265           For reduced kernel memory fragmentation, slab caches can be
266           merged when they share the same size and other characteristics.
267           This carries a risk of kernel heap overflows being able to
268           overwrite objects from merged caches (and more easily control
269           cache layout), which makes such heap attacks easier to exploit
270           by attackers. By keeping caches unmerged, these kinds of exploits
271           can usually only damage objects in the same cache. To disable
272           merging at runtime, "slab_nomerge" can be passed on the kernel
273           command line.
274
275 config SLAB_FREELIST_RANDOM
276         bool "Randomize slab freelist"
277         depends on !SLUB_TINY
278         help
279           Randomizes the freelist order used on creating new pages. This
280           security feature reduces the predictability of the kernel slab
281           allocator against heap overflows.
282
283 config SLAB_FREELIST_HARDENED
284         bool "Harden slab freelist metadata"
285         depends on !SLUB_TINY
286         help
287           Many kernel heap attacks try to target slab cache metadata and
288           other infrastructure. This options makes minor performance
289           sacrifices to harden the kernel slab allocator against common
290           freelist exploit methods.
291
292 config SLUB_STATS
293         default n
294         bool "Enable performance statistics"
295         depends on SYSFS && !SLUB_TINY
296         help
297           The statistics are useful to debug slab allocation behavior in
298           order find ways to optimize the allocator. This should never be
299           enabled for production use since keeping statistics slows down
300           the allocator by a few percentage points. The slabinfo command
301           supports the determination of the most active slabs to figure
302           out which slabs are relevant to a particular load.
303           Try running: slabinfo -DA
304
305 config SLUB_CPU_PARTIAL
306         default y
307         depends on SMP && !SLUB_TINY
308         bool "Enable per cpu partial caches"
309         help
310           Per cpu partial caches accelerate objects allocation and freeing
311           that is local to a processor at the price of more indeterminism
312           in the latency of the free. On overflow these caches will be cleared
313           which requires the taking of locks that may cause latency spikes.
314           Typically one would choose no for a realtime system.
315
316 config RANDOM_KMALLOC_CACHES
317         default n
318         depends on !SLUB_TINY
319         bool "Randomize slab caches for normal kmalloc"
320         help
321           A hardening feature that creates multiple copies of slab caches for
322           normal kmalloc allocation and makes kmalloc randomly pick one based
323           on code address, which makes the attackers more difficult to spray
324           vulnerable memory objects on the heap for the purpose of exploiting
325           memory vulnerabilities.
326
327           Currently the number of copies is set to 16, a reasonably large value
328           that effectively diverges the memory objects allocated for different
329           subsystems or modules into different caches, at the expense of a
330           limited degree of memory and CPU overhead that relates to hardware and
331           system workload.
332
333 endmenu # Slab allocator options
334
335 config SHUFFLE_PAGE_ALLOCATOR
336         bool "Page allocator randomization"
337         default SLAB_FREELIST_RANDOM && ACPI_NUMA
338         help
339           Randomization of the page allocator improves the average
340           utilization of a direct-mapped memory-side-cache. See section
341           5.2.27 Heterogeneous Memory Attribute Table (HMAT) in the ACPI
342           6.2a specification for an example of how a platform advertises
343           the presence of a memory-side-cache. There are also incidental
344           security benefits as it reduces the predictability of page
345           allocations to compliment SLAB_FREELIST_RANDOM, but the
346           default granularity of shuffling on the MAX_PAGE_ORDER i.e, 10th
347           order of pages is selected based on cache utilization benefits
348           on x86.
349
350           While the randomization improves cache utilization it may
351           negatively impact workloads on platforms without a cache. For
352           this reason, by default, the randomization is enabled only
353           after runtime detection of a direct-mapped memory-side-cache.
354           Otherwise, the randomization may be force enabled with the
355           'page_alloc.shuffle' kernel command line parameter.
356
357           Say Y if unsure.
358
359 config COMPAT_BRK
360         bool "Disable heap randomization"
361         default y
362         help
363           Randomizing heap placement makes heap exploits harder, but it
364           also breaks ancient binaries (including anything libc5 based).
365           This option changes the bootup default to heap randomization
366           disabled, and can be overridden at runtime by setting
367           /proc/sys/kernel/randomize_va_space to 2.
368
369           On non-ancient distros (post-2000 ones) N is usually a safe choice.
370
371 config MMAP_ALLOW_UNINITIALIZED
372         bool "Allow mmapped anonymous memory to be uninitialized"
373         depends on EXPERT && !MMU
374         default n
375         help
376           Normally, and according to the Linux spec, anonymous memory obtained
377           from mmap() has its contents cleared before it is passed to
378           userspace.  Enabling this config option allows you to request that
379           mmap() skip that if it is given an MAP_UNINITIALIZED flag, thus
380           providing a huge performance boost.  If this option is not enabled,
381           then the flag will be ignored.
382
383           This is taken advantage of by uClibc's malloc(), and also by
384           ELF-FDPIC binfmt's brk and stack allocator.
385
386           Because of the obvious security issues, this option should only be
387           enabled on embedded devices where you control what is run in
388           userspace.  Since that isn't generally a problem on no-MMU systems,
389           it is normally safe to say Y here.
390
391           See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
392
393 config SELECT_MEMORY_MODEL
394         def_bool y
395         depends on ARCH_SELECT_MEMORY_MODEL
396
397 choice
398         prompt "Memory model"
399         depends on SELECT_MEMORY_MODEL
400         default SPARSEMEM_MANUAL if ARCH_SPARSEMEM_DEFAULT
401         default FLATMEM_MANUAL
402         help
403           This option allows you to change some of the ways that
404           Linux manages its memory internally. Most users will
405           only have one option here selected by the architecture
406           configuration. This is normal.
407
408 config FLATMEM_MANUAL
409         bool "Flat Memory"
410         depends on !ARCH_SPARSEMEM_ENABLE || ARCH_FLATMEM_ENABLE
411         help
412           This option is best suited for non-NUMA systems with
413           flat address space. The FLATMEM is the most efficient
414           system in terms of performance and resource consumption
415           and it is the best option for smaller systems.
416
417           For systems that have holes in their physical address
418           spaces and for features like NUMA and memory hotplug,
419           choose "Sparse Memory".
420
421           If unsure, choose this option (Flat Memory) over any other.
422
423 config SPARSEMEM_MANUAL
424         bool "Sparse Memory"
425         depends on ARCH_SPARSEMEM_ENABLE
426         help
427           This will be the only option for some systems, including
428           memory hot-plug systems.  This is normal.
429
430           This option provides efficient support for systems with
431           holes is their physical address space and allows memory
432           hot-plug and hot-remove.
433
434           If unsure, choose "Flat Memory" over this option.
435
436 endchoice
437
438 config SPARSEMEM
439         def_bool y
440         depends on (!SELECT_MEMORY_MODEL && ARCH_SPARSEMEM_ENABLE) || SPARSEMEM_MANUAL
441
442 config FLATMEM
443         def_bool y
444         depends on !SPARSEMEM || FLATMEM_MANUAL
445
446 #
447 # SPARSEMEM_EXTREME (which is the default) does some bootmem
448 # allocations when sparse_init() is called.  If this cannot
449 # be done on your architecture, select this option.  However,
450 # statically allocating the mem_section[] array can potentially
451 # consume vast quantities of .bss, so be careful.
452 #
453 # This option will also potentially produce smaller runtime code
454 # with gcc 3.4 and later.
455 #
456 config SPARSEMEM_STATIC
457         bool
458
459 #
460 # Architecture platforms which require a two level mem_section in SPARSEMEM
461 # must select this option. This is usually for architecture platforms with
462 # an extremely sparse physical address space.
463 #
464 config SPARSEMEM_EXTREME
465         def_bool y
466         depends on SPARSEMEM && !SPARSEMEM_STATIC
467
468 config SPARSEMEM_VMEMMAP_ENABLE
469         bool
470
471 config SPARSEMEM_VMEMMAP
472         bool "Sparse Memory virtual memmap"
473         depends on SPARSEMEM && SPARSEMEM_VMEMMAP_ENABLE
474         default y
475         help
476           SPARSEMEM_VMEMMAP uses a virtually mapped memmap to optimise
477           pfn_to_page and page_to_pfn operations.  This is the most
478           efficient option when sufficient kernel resources are available.
479 #
480 # Select this config option from the architecture Kconfig, if it is preferred
481 # to enable the feature of HugeTLB/dev_dax vmemmap optimization.
482 #
483 config ARCH_WANT_OPTIMIZE_DAX_VMEMMAP
484         bool
485
486 config ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP
487         bool
488
489 config HAVE_MEMBLOCK_PHYS_MAP
490         bool
491
492 config HAVE_FAST_GUP
493         depends on MMU
494         bool
495
496 # Don't discard allocated memory used to track "memory" and "reserved" memblocks
497 # after early boot, so it can still be used to test for validity of memory.
498 # Also, memblocks are updated with memory hot(un)plug.
499 config ARCH_KEEP_MEMBLOCK
500         bool
501
502 # Keep arch NUMA mapping infrastructure post-init.
503 config NUMA_KEEP_MEMINFO
504         bool
505
506 config MEMORY_ISOLATION
507         bool
508
509 # IORESOURCE_SYSTEM_RAM regions in the kernel resource tree that are marked
510 # IORESOURCE_EXCLUSIVE cannot be mapped to user space, for example, via
511 # /dev/mem.
512 config EXCLUSIVE_SYSTEM_RAM
513         def_bool y
514         depends on !DEVMEM || STRICT_DEVMEM
515
516 #
517 # Only be set on architectures that have completely implemented memory hotplug
518 # feature. If you are not sure, don't touch it.
519 #
520 config HAVE_BOOTMEM_INFO_NODE
521         def_bool n
522
523 config ARCH_ENABLE_MEMORY_HOTPLUG
524         bool
525
526 config ARCH_ENABLE_MEMORY_HOTREMOVE
527         bool
528
529 # eventually, we can have this option just 'select SPARSEMEM'
530 menuconfig MEMORY_HOTPLUG
531         bool "Memory hotplug"
532         select MEMORY_ISOLATION
533         depends on SPARSEMEM
534         depends on ARCH_ENABLE_MEMORY_HOTPLUG
535         depends on 64BIT
536         select NUMA_KEEP_MEMINFO if NUMA
537
538 if MEMORY_HOTPLUG
539
540 config MEMORY_HOTPLUG_DEFAULT_ONLINE
541         bool "Online the newly added memory blocks by default"
542         depends on MEMORY_HOTPLUG
543         help
544           This option sets the default policy setting for memory hotplug
545           onlining policy (/sys/devices/system/memory/auto_online_blocks) which
546           determines what happens to newly added memory regions. Policy setting
547           can always be changed at runtime.
548           See Documentation/admin-guide/mm/memory-hotplug.rst for more information.
549
550           Say Y here if you want all hot-plugged memory blocks to appear in
551           'online' state by default.
552           Say N here if you want the default policy to keep all hot-plugged
553           memory blocks in 'offline' state.
554
555 config MEMORY_HOTREMOVE
556         bool "Allow for memory hot remove"
557         select HAVE_BOOTMEM_INFO_NODE if (X86_64 || PPC64)
558         depends on MEMORY_HOTPLUG && ARCH_ENABLE_MEMORY_HOTREMOVE
559         depends on MIGRATION
560
561 config MHP_MEMMAP_ON_MEMORY
562         def_bool y
563         depends on MEMORY_HOTPLUG && SPARSEMEM_VMEMMAP
564         depends on ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
565
566 endif # MEMORY_HOTPLUG
567
568 config ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
569        bool
570
571 # Heavily threaded applications may benefit from splitting the mm-wide
572 # page_table_lock, so that faults on different parts of the user address
573 # space can be handled with less contention: split it at this NR_CPUS.
574 # Default to 4 for wider testing, though 8 might be more appropriate.
575 # ARM's adjust_pte (unused if VIPT) depends on mm-wide page_table_lock.
576 # PA-RISC 7xxx's spinlock_t would enlarge struct page from 32 to 44 bytes.
577 # SPARC32 allocates multiple pte tables within a single page, and therefore
578 # a per-page lock leads to problems when multiple tables need to be locked
579 # at the same time (e.g. copy_page_range()).
580 # DEBUG_SPINLOCK and DEBUG_LOCK_ALLOC spinlock_t also enlarge struct page.
581 #
582 config SPLIT_PTLOCK_CPUS
583         int
584         default "999999" if !MMU
585         default "999999" if ARM && !CPU_CACHE_VIPT
586         default "999999" if PARISC && !PA20
587         default "999999" if SPARC32
588         default "4"
589
590 config ARCH_ENABLE_SPLIT_PMD_PTLOCK
591         bool
592
593 #
594 # support for memory balloon
595 config MEMORY_BALLOON
596         bool
597
598 #
599 # support for memory balloon compaction
600 config BALLOON_COMPACTION
601         bool "Allow for balloon memory compaction/migration"
602         def_bool y
603         depends on COMPACTION && MEMORY_BALLOON
604         help
605           Memory fragmentation introduced by ballooning might reduce
606           significantly the number of 2MB contiguous memory blocks that can be
607           used within a guest, thus imposing performance penalties associated
608           with the reduced number of transparent huge pages that could be used
609           by the guest workload. Allowing the compaction & migration for memory
610           pages enlisted as being part of memory balloon devices avoids the
611           scenario aforementioned and helps improving memory defragmentation.
612
613 #
614 # support for memory compaction
615 config COMPACTION
616         bool "Allow for memory compaction"
617         def_bool y
618         select MIGRATION
619         depends on MMU
620         help
621           Compaction is the only memory management component to form
622           high order (larger physically contiguous) memory blocks
623           reliably. The page allocator relies on compaction heavily and
624           the lack of the feature can lead to unexpected OOM killer
625           invocations for high order memory requests. You shouldn't
626           disable this option unless there really is a strong reason for
627           it and then we would be really interested to hear about that at
628           linux-mm@kvack.org.
629
630 config COMPACT_UNEVICTABLE_DEFAULT
631         int
632         depends on COMPACTION
633         default 0 if PREEMPT_RT
634         default 1
635
636 #
637 # support for free page reporting
638 config PAGE_REPORTING
639         bool "Free page reporting"
640         def_bool n
641         help
642           Free page reporting allows for the incremental acquisition of
643           free pages from the buddy allocator for the purpose of reporting
644           those pages to another entity, such as a hypervisor, so that the
645           memory can be freed within the host for other uses.
646
647 #
648 # support for page migration
649 #
650 config MIGRATION
651         bool "Page migration"
652         def_bool y
653         depends on (NUMA || ARCH_ENABLE_MEMORY_HOTREMOVE || COMPACTION || CMA) && MMU
654         help
655           Allows the migration of the physical location of pages of processes
656           while the virtual addresses are not changed. This is useful in
657           two situations. The first is on NUMA systems to put pages nearer
658           to the processors accessing. The second is when allocating huge
659           pages as migration can relocate pages to satisfy a huge page
660           allocation instead of reclaiming.
661
662 config DEVICE_MIGRATION
663         def_bool MIGRATION && ZONE_DEVICE
664
665 config ARCH_ENABLE_HUGEPAGE_MIGRATION
666         bool
667
668 config ARCH_ENABLE_THP_MIGRATION
669         bool
670
671 config HUGETLB_PAGE_SIZE_VARIABLE
672         def_bool n
673         help
674           Allows the pageblock_order value to be dynamic instead of just standard
675           HUGETLB_PAGE_ORDER when there are multiple HugeTLB page sizes available
676           on a platform.
677
678           Note that the pageblock_order cannot exceed MAX_PAGE_ORDER and will be
679           clamped down to MAX_PAGE_ORDER.
680
681 config CONTIG_ALLOC
682         def_bool (MEMORY_ISOLATION && COMPACTION) || CMA
683
684 config PCP_BATCH_SCALE_MAX
685         int "Maximum scale factor of PCP (Per-CPU pageset) batch allocate/free"
686         default 5
687         range 0 6
688         help
689           In page allocator, PCP (Per-CPU pageset) is refilled and drained in
690           batches.  The batch number is scaled automatically to improve page
691           allocation/free throughput.  But too large scale factor may hurt
692           latency.  This option sets the upper limit of scale factor to limit
693           the maximum latency.
694
695 config PHYS_ADDR_T_64BIT
696         def_bool 64BIT
697
698 config BOUNCE
699         bool "Enable bounce buffers"
700         default y
701         depends on BLOCK && MMU && HIGHMEM
702         help
703           Enable bounce buffers for devices that cannot access the full range of
704           memory available to the CPU. Enabled by default when HIGHMEM is
705           selected, but you may say n to override this.
706
707 config MMU_NOTIFIER
708         bool
709         select INTERVAL_TREE
710
711 config KSM
712         bool "Enable KSM for page merging"
713         depends on MMU
714         select XXHASH
715         help
716           Enable Kernel Samepage Merging: KSM periodically scans those areas
717           of an application's address space that an app has advised may be
718           mergeable.  When it finds pages of identical content, it replaces
719           the many instances by a single page with that content, so
720           saving memory until one or another app needs to modify the content.
721           Recommended for use with KVM, or with other duplicative applications.
722           See Documentation/mm/ksm.rst for more information: KSM is inactive
723           until a program has madvised that an area is MADV_MERGEABLE, and
724           root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set).
725
726 config DEFAULT_MMAP_MIN_ADDR
727         int "Low address space to protect from user allocation"
728         depends on MMU
729         default 4096
730         help
731           This is the portion of low virtual memory which should be protected
732           from userspace allocation.  Keeping a user from writing to low pages
733           can help reduce the impact of kernel NULL pointer bugs.
734
735           For most ppc64 and x86 users with lots of address space
736           a value of 65536 is reasonable and should cause no problems.
737           On arm and other archs it should not be higher than 32768.
738           Programs which use vm86 functionality or have some need to map
739           this low address space will need CAP_SYS_RAWIO or disable this
740           protection by setting the value to 0.
741
742           This value can be changed after boot using the
743           /proc/sys/vm/mmap_min_addr tunable.
744
745 config ARCH_SUPPORTS_MEMORY_FAILURE
746         bool
747
748 config MEMORY_FAILURE
749         depends on MMU
750         depends on ARCH_SUPPORTS_MEMORY_FAILURE
751         bool "Enable recovery from hardware memory errors"
752         select MEMORY_ISOLATION
753         select RAS
754         help
755           Enables code to recover from some memory failures on systems
756           with MCA recovery. This allows a system to continue running
757           even when some of its memory has uncorrected errors. This requires
758           special hardware support and typically ECC memory.
759
760 config HWPOISON_INJECT
761         tristate "HWPoison pages injector"
762         depends on MEMORY_FAILURE && DEBUG_KERNEL && PROC_FS
763         select PROC_PAGE_MONITOR
764
765 config NOMMU_INITIAL_TRIM_EXCESS
766         int "Turn on mmap() excess space trimming before booting"
767         depends on !MMU
768         default 1
769         help
770           The NOMMU mmap() frequently needs to allocate large contiguous chunks
771           of memory on which to store mappings, but it can only ask the system
772           allocator for chunks in 2^N*PAGE_SIZE amounts - which is frequently
773           more than it requires.  To deal with this, mmap() is able to trim off
774           the excess and return it to the allocator.
775
776           If trimming is enabled, the excess is trimmed off and returned to the
777           system allocator, which can cause extra fragmentation, particularly
778           if there are a lot of transient processes.
779
780           If trimming is disabled, the excess is kept, but not used, which for
781           long-term mappings means that the space is wasted.
782
783           Trimming can be dynamically controlled through a sysctl option
784           (/proc/sys/vm/nr_trim_pages) which specifies the minimum number of
785           excess pages there must be before trimming should occur, or zero if
786           no trimming is to occur.
787
788           This option specifies the initial value of this option.  The default
789           of 1 says that all excess pages should be trimmed.
790
791           See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
792
793 config ARCH_WANT_GENERAL_HUGETLB
794         bool
795
796 config ARCH_WANTS_THP_SWAP
797         def_bool n
798
799 menuconfig TRANSPARENT_HUGEPAGE
800         bool "Transparent Hugepage Support"
801         depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE && !PREEMPT_RT
802         select COMPACTION
803         select XARRAY_MULTI
804         help
805           Transparent Hugepages allows the kernel to use huge pages and
806           huge tlb transparently to the applications whenever possible.
807           This feature can improve computing performance to certain
808           applications by speeding up page faults during memory
809           allocation, by reducing the number of tlb misses and by speeding
810           up the pagetable walking.
811
812           If memory constrained on embedded, you may want to say N.
813
814 if TRANSPARENT_HUGEPAGE
815
816 choice
817         prompt "Transparent Hugepage Support sysfs defaults"
818         depends on TRANSPARENT_HUGEPAGE
819         default TRANSPARENT_HUGEPAGE_ALWAYS
820         help
821           Selects the sysfs defaults for Transparent Hugepage Support.
822
823         config TRANSPARENT_HUGEPAGE_ALWAYS
824                 bool "always"
825         help
826           Enabling Transparent Hugepage always, can increase the
827           memory footprint of applications without a guaranteed
828           benefit but it will work automatically for all applications.
829
830         config TRANSPARENT_HUGEPAGE_MADVISE
831                 bool "madvise"
832         help
833           Enabling Transparent Hugepage madvise, will only provide a
834           performance improvement benefit to the applications using
835           madvise(MADV_HUGEPAGE) but it won't risk to increase the
836           memory footprint of applications without a guaranteed
837           benefit.
838
839         config TRANSPARENT_HUGEPAGE_NEVER
840                 bool "never"
841         help
842           Disable Transparent Hugepage by default. It can still be
843           enabled at runtime via sysfs.
844 endchoice
845
846 config THP_SWAP
847         def_bool y
848         depends on TRANSPARENT_HUGEPAGE && ARCH_WANTS_THP_SWAP && SWAP && 64BIT
849         help
850           Swap transparent huge pages in one piece, without splitting.
851           XXX: For now, swap cluster backing transparent huge page
852           will be split after swapout.
853
854           For selection by architectures with reasonable THP sizes.
855
856 config READ_ONLY_THP_FOR_FS
857         bool "Read-only THP for filesystems (EXPERIMENTAL)"
858         depends on TRANSPARENT_HUGEPAGE && SHMEM
859
860         help
861           Allow khugepaged to put read-only file-backed pages in THP.
862
863           This is marked experimental because it is a new feature. Write
864           support of file THPs will be developed in the next few release
865           cycles.
866
867 endif # TRANSPARENT_HUGEPAGE
868
869 #
870 # UP and nommu archs use km based percpu allocator
871 #
872 config NEED_PER_CPU_KM
873         depends on !SMP || !MMU
874         bool
875         default y
876
877 config NEED_PER_CPU_EMBED_FIRST_CHUNK
878         bool
879
880 config NEED_PER_CPU_PAGE_FIRST_CHUNK
881         bool
882
883 config USE_PERCPU_NUMA_NODE_ID
884         bool
885
886 config HAVE_SETUP_PER_CPU_AREA
887         bool
888
889 config CMA
890         bool "Contiguous Memory Allocator"
891         depends on MMU
892         select MIGRATION
893         select MEMORY_ISOLATION
894         help
895           This enables the Contiguous Memory Allocator which allows other
896           subsystems to allocate big physically-contiguous blocks of memory.
897           CMA reserves a region of memory and allows only movable pages to
898           be allocated from it. This way, the kernel can use the memory for
899           pagecache and when a subsystem requests for contiguous area, the
900           allocated pages are migrated away to serve the contiguous request.
901
902           If unsure, say "n".
903
904 config CMA_DEBUG
905         bool "CMA debug messages (DEVELOPMENT)"
906         depends on DEBUG_KERNEL && CMA
907         help
908           Turns on debug messages in CMA.  This produces KERN_DEBUG
909           messages for every CMA call as well as various messages while
910           processing calls such as dma_alloc_from_contiguous().
911           This option does not affect warning and error messages.
912
913 config CMA_DEBUGFS
914         bool "CMA debugfs interface"
915         depends on CMA && DEBUG_FS
916         help
917           Turns on the DebugFS interface for CMA.
918
919 config CMA_SYSFS
920         bool "CMA information through sysfs interface"
921         depends on CMA && SYSFS
922         help
923           This option exposes some sysfs attributes to get information
924           from CMA.
925
926 config CMA_AREAS
927         int "Maximum count of the CMA areas"
928         depends on CMA
929         default 19 if NUMA
930         default 7
931         help
932           CMA allows to create CMA areas for particular purpose, mainly,
933           used as device private area. This parameter sets the maximum
934           number of CMA area in the system.
935
936           If unsure, leave the default value "7" in UMA and "19" in NUMA.
937
938 config MEM_SOFT_DIRTY
939         bool "Track memory changes"
940         depends on CHECKPOINT_RESTORE && HAVE_ARCH_SOFT_DIRTY && PROC_FS
941         select PROC_PAGE_MONITOR
942         help
943           This option enables memory changes tracking by introducing a
944           soft-dirty bit on pte-s. This bit it set when someone writes
945           into a page just as regular dirty bit, but unlike the latter
946           it can be cleared by hands.
947
948           See Documentation/admin-guide/mm/soft-dirty.rst for more details.
949
950 config GENERIC_EARLY_IOREMAP
951         bool
952
953 config STACK_MAX_DEFAULT_SIZE_MB
954         int "Default maximum user stack size for 32-bit processes (MB)"
955         default 100
956         range 8 2048
957         depends on STACK_GROWSUP && (!64BIT || COMPAT)
958         help
959           This is the maximum stack size in Megabytes in the VM layout of 32-bit
960           user processes when the stack grows upwards (currently only on parisc
961           arch) when the RLIMIT_STACK hard limit is unlimited.
962
963           A sane initial value is 100 MB.
964
965 config DEFERRED_STRUCT_PAGE_INIT
966         bool "Defer initialisation of struct pages to kthreads"
967         depends on SPARSEMEM
968         depends on !NEED_PER_CPU_KM
969         depends on 64BIT
970         select PADATA
971         help
972           Ordinarily all struct pages are initialised during early boot in a
973           single thread. On very large machines this can take a considerable
974           amount of time. If this option is set, large machines will bring up
975           a subset of memmap at boot and then initialise the rest in parallel.
976           This has a potential performance impact on tasks running early in the
977           lifetime of the system until these kthreads finish the
978           initialisation.
979
980 config PAGE_IDLE_FLAG
981         bool
982         select PAGE_EXTENSION if !64BIT
983         help
984           This adds PG_idle and PG_young flags to 'struct page'.  PTE Accessed
985           bit writers can set the state of the bit in the flags so that PTE
986           Accessed bit readers may avoid disturbance.
987
988 config IDLE_PAGE_TRACKING
989         bool "Enable idle page tracking"
990         depends on SYSFS && MMU
991         select PAGE_IDLE_FLAG
992         help
993           This feature allows to estimate the amount of user pages that have
994           not been touched during a given period of time. This information can
995           be useful to tune memory cgroup limits and/or for job placement
996           within a compute cluster.
997
998           See Documentation/admin-guide/mm/idle_page_tracking.rst for
999           more details.
1000
1001 config ARCH_HAS_CACHE_LINE_SIZE
1002         bool
1003
1004 config ARCH_HAS_CURRENT_STACK_POINTER
1005         bool
1006         help
1007           In support of HARDENED_USERCOPY performing stack variable lifetime
1008           checking, an architecture-agnostic way to find the stack pointer
1009           is needed. Once an architecture defines an unsigned long global
1010           register alias named "current_stack_pointer", this config can be
1011           selected.
1012
1013 config ARCH_HAS_PTE_DEVMAP
1014         bool
1015
1016 config ARCH_HAS_ZONE_DMA_SET
1017         bool
1018
1019 config ZONE_DMA
1020         bool "Support DMA zone" if ARCH_HAS_ZONE_DMA_SET
1021         default y if ARM64 || X86
1022
1023 config ZONE_DMA32
1024         bool "Support DMA32 zone" if ARCH_HAS_ZONE_DMA_SET
1025         depends on !X86_32
1026         default y if ARM64
1027
1028 config ZONE_DEVICE
1029         bool "Device memory (pmem, HMM, etc...) hotplug support"
1030         depends on MEMORY_HOTPLUG
1031         depends on MEMORY_HOTREMOVE
1032         depends on SPARSEMEM_VMEMMAP
1033         depends on ARCH_HAS_PTE_DEVMAP
1034         select XARRAY_MULTI
1035
1036         help
1037           Device memory hotplug support allows for establishing pmem,
1038           or other device driver discovered memory regions, in the
1039           memmap. This allows pfn_to_page() lookups of otherwise
1040           "device-physical" addresses which is needed for using a DAX
1041           mapping in an O_DIRECT operation, among other things.
1042
1043           If FS_DAX is enabled, then say Y.
1044
1045 #
1046 # Helpers to mirror range of the CPU page tables of a process into device page
1047 # tables.
1048 #
1049 config HMM_MIRROR
1050         bool
1051         depends on MMU
1052
1053 config GET_FREE_REGION
1054         depends on SPARSEMEM
1055         bool
1056
1057 config DEVICE_PRIVATE
1058         bool "Unaddressable device memory (GPU memory, ...)"
1059         depends on ZONE_DEVICE
1060         select GET_FREE_REGION
1061
1062         help
1063           Allows creation of struct pages to represent unaddressable device
1064           memory; i.e., memory that is only accessible from the device (or
1065           group of devices). You likely also want to select HMM_MIRROR.
1066
1067 config VMAP_PFN
1068         bool
1069
1070 config ARCH_USES_HIGH_VMA_FLAGS
1071         bool
1072 config ARCH_HAS_PKEYS
1073         bool
1074
1075 config ARCH_USES_PG_ARCH_X
1076         bool
1077         help
1078           Enable the definition of PG_arch_x page flags with x > 1. Only
1079           suitable for 64-bit architectures with CONFIG_FLATMEM or
1080           CONFIG_SPARSEMEM_VMEMMAP enabled, otherwise there may not be
1081           enough room for additional bits in page->flags.
1082
1083 config VM_EVENT_COUNTERS
1084         default y
1085         bool "Enable VM event counters for /proc/vmstat" if EXPERT
1086         help
1087           VM event counters are needed for event counts to be shown.
1088           This option allows the disabling of the VM event counters
1089           on EXPERT systems.  /proc/vmstat will only show page counts
1090           if VM event counters are disabled.
1091
1092 config PERCPU_STATS
1093         bool "Collect percpu memory statistics"
1094         help
1095           This feature collects and exposes statistics via debugfs. The
1096           information includes global and per chunk statistics, which can
1097           be used to help understand percpu memory usage.
1098
1099 config GUP_TEST
1100         bool "Enable infrastructure for get_user_pages()-related unit tests"
1101         depends on DEBUG_FS
1102         help
1103           Provides /sys/kernel/debug/gup_test, which in turn provides a way
1104           to make ioctl calls that can launch kernel-based unit tests for
1105           the get_user_pages*() and pin_user_pages*() family of API calls.
1106
1107           These tests include benchmark testing of the _fast variants of
1108           get_user_pages*() and pin_user_pages*(), as well as smoke tests of
1109           the non-_fast variants.
1110
1111           There is also a sub-test that allows running dump_page() on any
1112           of up to eight pages (selected by command line args) within the
1113           range of user-space addresses. These pages are either pinned via
1114           pin_user_pages*(), or pinned via get_user_pages*(), as specified
1115           by other command line arguments.
1116
1117           See tools/testing/selftests/mm/gup_test.c
1118
1119 comment "GUP_TEST needs to have DEBUG_FS enabled"
1120         depends on !GUP_TEST && !DEBUG_FS
1121
1122 config GUP_GET_PXX_LOW_HIGH
1123         bool
1124
1125 config DMAPOOL_TEST
1126         tristate "Enable a module to run time tests on dma_pool"
1127         depends on HAS_DMA
1128         help
1129           Provides a test module that will allocate and free many blocks of
1130           various sizes and report how long it takes. This is intended to
1131           provide a consistent way to measure how changes to the
1132           dma_pool_alloc/free routines affect performance.
1133
1134 config ARCH_HAS_PTE_SPECIAL
1135         bool
1136
1137 #
1138 # Some architectures require a special hugepage directory format that is
1139 # required to support multiple hugepage sizes. For example a4fe3ce76
1140 # "powerpc/mm: Allow more flexible layouts for hugepage pagetables"
1141 # introduced it on powerpc.  This allows for a more flexible hugepage
1142 # pagetable layouts.
1143 #
1144 config ARCH_HAS_HUGEPD
1145         bool
1146
1147 config MAPPING_DIRTY_HELPERS
1148         bool
1149
1150 config KMAP_LOCAL
1151         bool
1152
1153 config KMAP_LOCAL_NON_LINEAR_PTE_ARRAY
1154         bool
1155
1156 # struct io_mapping based helper.  Selected by drivers that need them
1157 config IO_MAPPING
1158         bool
1159
1160 config MEMFD_CREATE
1161         bool "Enable memfd_create() system call" if EXPERT
1162
1163 config SECRETMEM
1164         default y
1165         bool "Enable memfd_secret() system call" if EXPERT
1166         depends on ARCH_HAS_SET_DIRECT_MAP
1167         help
1168           Enable the memfd_secret() system call with the ability to create
1169           memory areas visible only in the context of the owning process and
1170           not mapped to other processes and other kernel page tables.
1171
1172 config ANON_VMA_NAME
1173         bool "Anonymous VMA name support"
1174         depends on PROC_FS && ADVISE_SYSCALLS && MMU
1175
1176         help
1177           Allow naming anonymous virtual memory areas.
1178
1179           This feature allows assigning names to virtual memory areas. Assigned
1180           names can be later retrieved from /proc/pid/maps and /proc/pid/smaps
1181           and help identifying individual anonymous memory areas.
1182           Assigning a name to anonymous virtual memory area might prevent that
1183           area from being merged with adjacent virtual memory areas due to the
1184           difference in their name.
1185
1186 config HAVE_ARCH_USERFAULTFD_WP
1187         bool
1188         help
1189           Arch has userfaultfd write protection support
1190
1191 config HAVE_ARCH_USERFAULTFD_MINOR
1192         bool
1193         help
1194           Arch has userfaultfd minor fault support
1195
1196 menuconfig USERFAULTFD
1197         bool "Enable userfaultfd() system call"
1198         depends on MMU
1199         help
1200           Enable the userfaultfd() system call that allows to intercept and
1201           handle page faults in userland.
1202
1203 if USERFAULTFD
1204 config PTE_MARKER_UFFD_WP
1205         bool "Userfaultfd write protection support for shmem/hugetlbfs"
1206         default y
1207         depends on HAVE_ARCH_USERFAULTFD_WP
1208
1209         help
1210           Allows to create marker PTEs for userfaultfd write protection
1211           purposes.  It is required to enable userfaultfd write protection on
1212           file-backed memory types like shmem and hugetlbfs.
1213 endif # USERFAULTFD
1214
1215 # multi-gen LRU {
1216 config LRU_GEN
1217         bool "Multi-Gen LRU"
1218         depends on MMU
1219         # make sure folio->flags has enough spare bits
1220         depends on 64BIT || !SPARSEMEM || SPARSEMEM_VMEMMAP
1221         help
1222           A high performance LRU implementation to overcommit memory. See
1223           Documentation/admin-guide/mm/multigen_lru.rst for details.
1224
1225 config LRU_GEN_ENABLED
1226         bool "Enable by default"
1227         depends on LRU_GEN
1228         help
1229           This option enables the multi-gen LRU by default.
1230
1231 config LRU_GEN_STATS
1232         bool "Full stats for debugging"
1233         depends on LRU_GEN
1234         help
1235           Do not enable this option unless you plan to look at historical stats
1236           from evicted generations for debugging purpose.
1237
1238           This option has a per-memcg and per-node memory overhead.
1239
1240 config LRU_GEN_WALKS_MMU
1241         def_bool y
1242         depends on LRU_GEN && ARCH_HAS_HW_PTE_YOUNG
1243 # }
1244
1245 config ARCH_SUPPORTS_PER_VMA_LOCK
1246        def_bool n
1247
1248 config PER_VMA_LOCK
1249         def_bool y
1250         depends on ARCH_SUPPORTS_PER_VMA_LOCK && MMU && SMP
1251         help
1252           Allow per-vma locking during page fault handling.
1253
1254           This feature allows locking each virtual memory area separately when
1255           handling page faults instead of taking mmap_lock.
1256
1257 config LOCK_MM_AND_FIND_VMA
1258         bool
1259         depends on !STACK_GROWSUP
1260
1261 config IOMMU_MM_DATA
1262         bool
1263
1264 source "mm/damon/Kconfig"
1265
1266 endmenu